好多服务器端或CDN都会对CSS、JS和图片这些静态的内容设置缓存,到了IE这里又会在本地做一个缓存。所以当我们更新了CSS文件之后,常常会出现客户端没有更新,导致显示出现问题。之前我一直使用时间戳参数的方法来解决:
每次更改了css文件就把参数time的值设为更改当日的日期,这样本地IE就会把它当作一个新的文件更新一次。
但是在最近做的项目中发现一个比较奇怪的问题,服务器端做了gzip压缩,到客户端第一次解压的时候没问题,第二次访问的时候ie从cache里读文件就出问题了,只能读出前面大约一两千个字节。在两台win2000+ie6的机子上重现了这个问题,XP的还没有发现。
最终的解决方案是在时间戳参数后面再加上一个.css结尾,也就是这么写:
然后就一切正常了…
大概IE在从缓存里读文件的时候还得对文件扩展名做一个判断,所以这么加一下它就认了。
当然js也可以用这种方法
Web性能优化最佳实践中最重要的一条是减少HTTP 请求,它也是YSlow中比重最大的一条规 则。减少HTTP请求的方案主要有合并JavaScript和CSS文件、CSS Sprites、图像映射 (Image Map)和使用Data URI来编码图片。CSS Sprites和图像映射现在已经随处可见了,但由于IE6和IE7不支持Data URI以及性能问题,这项技术尚未大量使用。目前大部分网页中的JavaScript和CSS文件数量和开发时一致,少量的网页会根据实际情况采取本地合 并,这些合并中相当多的是有选择地手动完成,每次新的合并都需要重新在本地完成并上传到服务器,比较的随意和繁琐,同样文件的压缩也有类似的情况。而利用 服务端的合并和压缩,我们就可以按照开发的逻辑尽可能让文件的颗粒度变小,利用网页中URL的规则来自动实现文件的合并和压缩,这会相当的灵活和高效。
YUI Combo Handler
2008年7 月YUI Team宣布在YAHOO! CDN上对YUI JavaScript组件提供Combo Handler服务。Combo Handler是Yahoo!开发的一个Apache模块,它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件,从而大大减少 文件请求数。比如在页面上使用YUI2的Rich Text Editor组件需要引入多个JavaScript文件,常用方式如下:
阅读全文…