tips 前端 阻止 浏览器缓存静态资源
css js 图片 等这些当出现改动了刷新网页根本没有效果
电脑端浏览器没有问题 因为部分手机端浏览器 总会出于省流量性能等因素缓存静态资源本来没有什么问题 不过这会给开发带来困扰 不适合调试 如果只是这样还好 可是还是会对生产环境造成一定影响比如当服务器端的css文件内内容有了改动 手机端浏览器却一直没有释放缓存 就会造成一些页面上出现明显的问题所以给css js jpg swf 等加上时间戳是必要的,最好是每当文件做了修改就变动时间戳让浏览器去下载,而没有改动就调用浏览器缓存的文件
所以可以这样
<?php $css='/xxx/xxx.css' ?> <link rel="stylesheet" type="text/css" href="<?php echo "$css" . '?time=' . filemtime( $css ); ?>" />
笔记:
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做 虽然可以用它这样得到时间戳
<script> var time1=Date.parse(new Date()); var time2=new Date().valueOf(); var time3=new Date().getTime(); console.log('timestamp:'+time1); console.log('timestamp:'+time2); console.log('timestamp:'+time3); /* time1的毫秒部分将是000,不会计算毫秒 time2,time3会记录精确到毫秒,且结果相同 */ </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
很多方式,选喜欢的吧!
总结:以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。
上一篇: sphinx全文检索之PHP使用课程