分类: PHP
2013-03-26 17:42:19
转自:http://zhiqiang.org/blog/it/speedup-blog-set-browser-cache.html
在用户浏览blog的不同页面时,很多内容是重复的,比如相同的javascript,css,背景图片等。如果我们能够建议甚至强制浏览器在本地缓存这些文件,将大大降低页面产生的流量,从而降低页面载入时间。
根据服务器端的响应header(怎么看HTTP Header),一个文件对浏览器而言,有几级不同的缓存状态。
我们要做的是尽量强制浏览器到第四种状态,特别是对于javascript, css和图片等变动较少的文件。
对于PHP产生的动态内容,只需要在内容输出之前输出强制缓存的header即可,比如下面的代码即要求浏览器缓存文件1个月:
php ("Cache-Control: public"); ("Pragma: cache"); $offset = 30*60*60*24; // cache 1 month $ExpStr = "Expires: ".("D, d M Y H:i:s", () + $offset)." GMT"; ($ExpStr); ?>
对于静态文件,一般的服务器都支持第3级缓存状态。要想达到第四级的缓存效果,要么像之前GZIP压缩那样,用PHP外包一层,然后用PHP处理。要么需要服务器端的支持,APACHE的一个模块mod_expires支持给文件添加expires header。把下面的代码加入你的blog目录下的.htaccess文件,如果你的服务器安装了mod_expires模块,则将自动生效,图片等强制缓存一个月,html文档缓存10分钟。如果该模块没有安装,也不会出错。
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/png A2592000 ExpiresByType application/x-shockwave-flash A2592000 ExpiresByType text/css A2592000 ExpiresByType application/x-javascript A2592000 ExpiresByType text/html A600 IfModule>
在有mod_expires更详细的文档和教程。不过我要说明的是,mod_expires在绝大多数服务器上都没安装 ,因为虽然这个模块包含在Apache的发行版里,但并不是默认安装模块。