Optimize caching (优化缓存) 篇
Leverage Browser Caching
https://developers.google.com/speed/docs/best-practices/rules_intro
1. 为所有可缓存的静态资源设置HTTP缓存头。使用Expires头或者是Last-Modified头,当然,使用Expires头性能更高,因为使用Last-Modified头,浏览器还需要连接服务器获取最后修改时间。谷歌的建议是,Expires设置为1个月或者更多,最长可以设置为1年,但不能超过1年,因为超过1年违反了HTTP规则。
2. 使用指纹(fingerprinting )来动态地设置缓存。这条建议是和第一条建议相关的,由于设置了Expires头,所以在过期之前浏览器不会从服务器再次获取资源,但是如果你修改了服务器上的某个资源,希望浏览器重新获取它,这个时候怎么办呢?修改URL,使用指纹。比如将css的url设置为82b6bc440914c01297b99b4bca641a5d_common.css,当你修改了这个CSS后,将指纹部分修改掉,这样URL发生了变化,浏览器当然会重新获取该资源。
3. 为了IE浏览器,一定要正确地设置你的Vary Header。Vary Header的用法我在这里就不赘述了,大家自己去Google。这条建议的意思是,不要在Vary头里面设置任何除了Accept-Encoding
和
User-Agent
以外的值,因为如果你设置了其它的值,IE将不会缓存这个资源。
4. 避免FireFox中的URLs Cache冲突问题。Firefox通过URL计算出一个HASH值,然后检查这个HASH值是否已经缓存过,如果已经缓存就不用去服务器获取。但是Firefox的HASH计算函数有个问题:如果两个URL的差异在8个字符以内,它计算出的HASH值是相同的。这样就会导致HASH冲突,最终导致Cache冲突。所以,确保你的URL的差异在8个字符以上。
5. 使用Cache contorl: public头迫使Firefox缓存HTTPS资源。正常情况下,Firefox不会缓存HTTPS资源,所以为了让它缓存HTTPS资源,需要使用Cache control: public头,虽然这个头本来是用于代理服务器的。
Leverage Proxy Caching