首页 > 网站 > WEB开发 > 正文

tips 前端 阻止 浏览器缓存静态资源

2024-04-27 14:27:09
字体:
来源:转载
供稿:网友
tips 前端 阻止 浏览器缓存静态资源

手机浏览器 uc上一直表现良好 QQ浏览器还有微信上网址直接打开的(一样采用qq浏览器的内核)大量缓存了静态资源

CSS js图片等这些当出现改动了刷新网页根本没有效果

电脑端浏览器没有问题因为部分手机端浏览器总会出于省流量性能等因素缓存静态资源本来没有什么问题不过这会给开发带来困扰不适合调试如果只是这样还好可是还是会对生产环境造成一定影响比如当服务器端的css文件内内容有了改动手机端浏览器却一直没有释放缓存就会造成一些页面上出现明显的问题所以给css js jpg swf等加上时间戳是必要的,最好是每当文件做了修改就变动时间戳让浏览器去下载,而没有改动就调用浏览器缓存的文件

所以可以这样

1 <?php $css='/xxx/xxx.css' ?>2 <link rel="stylesheet" type="text/css" href="<?php echo "$css" . '?time=' . filemtime( $css ); ?>" />

note:php原则上'' ""是通用的,echo函数输出时 ' '内的内容会被解析为纯字符串, " "内的变量会被解析会变量的值,但是不能解析函数的值 .是php的连接符

    filemtime("file")将得到file最近一次修改时间,得到类似1430451431这个格式的unix时间戳

    原理是通过增加一个后缀改变了请求的文件的url,从而迫使浏览器认为这是不同的文件去下载更新缓存

    最终输出的内容就像 百度云的首页html源代码里这样

<link href="/pPRes/static/css/pcloud_feedpage_all.css?t=201504154611" rel="stylesheet" type="text/css"/>

css文件可以这样加时间戳,其它静态资源也可参照此加

不过开发时也可以直接这样让它每次都更新时间戳,

<link rel="stylesheet" type="text/css" href="/xx/style.css?time=<?php echo time(); ?> " />

其它语言如jsp asp 等同样可以轻易做到

不过不可以用javascript做虽然可以用它这样得到时间戳

 1 <script> 2 var time1=Date.parse(new Date()); 3 var time2=new Date().valueOf(); 4 var time3=new Date().getTime(); 5 console.log('timestamp:'+time1); 6 console.log('timestamp:'+time2); 7 console.log('timestamp:'+time3); 8  9 /* time1的毫秒部分将是000,不会计算毫秒10  time2,time3会记录精确到毫秒,且结果相同 */11 </script>

但是是没有意义的,在客户端即使插入到了引用路径中也是也是没有意义因为请求是向服务器端发的需要考虑一个是执行加时间戳的时间上一个是服务器端的路由控制

Wordpress下也可以参照这样

来自winy:http://www.hilau.com/1311273.html /or/ http://www.laozhuhome.com/html/automatically-version-your-css-and-Javascript-files

用grunt作前端工作流时更可以使用这样一个tool

automatic-version-increment

很多方式,选喜欢的吧!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表