加速blog:设置浏览器缓存

在用户浏览blog的不同页面时,很多内容是重复的,比如相同的javascript,css,背景图片等。如果我们能够建议甚至强制浏览器在本地缓存这些文件,将大大降低页面产生的流量,从而降低页面载入时间。

根据服务器端的响应header(怎么看HTTP Header),一个文件对浏览器而言,有几级不同的缓存状态。

  1. 服务器端告诉浏览器不要缓存此文件,每次都到服务器上更新文件。
  2. 服务器端没有给浏览器任何指示(此时我也不知道这时候浏览器将会怎么做),这种情况多为动态脚本(比如PHP)产生的文件。
  3. 在上次传输中,服务器给浏览器发送了Last-Modified或Etag数据,再次浏览时浏览器将提交这些数据到服务器,验证本地版本是否最新的,如果为最新的则服务器返回304代码,告诉浏览器直接使用本地版本,否则下载新版本。一般来说,有且只有静态文件,服务器端才会给出这些数据。
  4. 服务器强制要求浏览器缓存文件,并设置了过期时间。在缓存未到期之前,浏览器将直接使用本地缓存文件,不会与服务器端产生任何通信。

我们要做的是尽量强制浏览器到第四种状态,特别是对于javascript, css和图片等变动较少的文件。

对于PHP产生的动态内容,只需要在内容输出之前输出强制缓存的header即可,比如下面的代码即要求浏览器缓存文件1个月:

<?php
  header("Cache-Control: public");
  header("Pragma: cache");

  $offset = 1000*60*60*24; // cache 1 year
  $ExpStr = "Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT";
  header($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的发行版里,但并不是默认安装模块。

  • 加速blog:服务器端的中转和缓存 前面已经提到了浏览器端的缓存,通过适当的Header可以建议和命令浏览器缓存页面内容比如javascript, css, 图片等。这里的服务器端的缓存又是什么意思...
  • 加速blog:HTTP Header 本文隶属加速blog系列 HTTP请求和相应Header 一个经典的HTTP连接是,读者通过浏览器(下称为浏览器端),向服务器(下称为服务器端)申请浏览某网页...
  • 加速blog:监测和优化WordPress数据库 在WordPress生成页面时,最消耗时间的便是数据库查询了。 监测WordPress的数据库查询 WordPress内置了数据库缓存系统,安装插件WordPress Cache Inspect,它会...
  • 加速blog:速度检测 本文隶属加速blog系列 既然我们要谈加速blog,第一重要的是给blog的速度一个量化的评价。 Firefox的fasterfox插件会在Firefox的右下角给出每个网页的载...
  • 加速blog:优化WordPress程序效率 这里本质上要谈的还是优化数据库的效率,不过是改写WordPress的代码使得降低数据库查询次数。 get_permalink函数 get_permalink函数非常好用,get_permalink($i...
  • Dreamhost上的GZIP & Cache 用WordPress的都知道,WordPress可以打开GZIP传输,压缩比率能达到60%到80%。下表是本blog首页在Web Page Analyzer上的测试报告,此页面上包括css, js所有东西加...
  • 加速blog:处理页面图片 作为文章的或者功能性的或者美学意义上的需求,现在blog越来越丰富多彩,图片也越来越多。 选择合适的图片尺寸 现在数码相机越来越好,动辄800...
  • 用CSS Sprites让网站再加速 我对于blog的速度有着变态的需求. 网站速度与HTML请求数目有很直接的关系,所以我一直没有在网页上放过多的背景图片——注意这里有个网页加速的...
  • 加速blog:序 这是一个介绍如何提速blog的系列文章,特别是基于WordPress的blog。通过这些方法,你我完全能做到一个飞速的blog,至少要比与你同服务器上的其它blog要...
  • 加速blog:减少和优化插件 尽量少用含javascript和css的插件 很多插件作者需要为blog的慢速度负责。插件作者随意地往'wp_head'里安插js和css,导致很多blog的head部分越来越臃肿。 ...
2条留言 -> 跳到留言表格
(Required)
(Required, not published)

  B | I | U | D | 添加链接 | 插入引用 | 插入代码 | 插入表情 | | + | ?
guest | 注册 | BBS | 管理 | English | 繁體 | https

阅微堂

zhiqiang's personal blog
Loading...
Loading...
Loading...