转载自:http://www.alloyteam.com/2012/03/web-cache-3-how-to-build-cacheable-website/
前面了解了Web缓存的运行机制极其重要性之后,我们可以从以下这些方面去努力改善我们的站点,保证缓存被最有效的利用,达到最佳的性能。
URL是浏览器缓存机制的基础,所以如果一个资源需要在多个地方被引用,尽量保证URL是固定的。同时,比较推荐使用公共类库,比如Google Ajax Library等,有利于最大限度使用缓存
对于不经常修改的静态资源,比如Css,js,图片等,可以设置一个较长的过期的时间,或者至少加上Last-Modified/Etag,而对于html页面这种入口文件,不建议设置缓存。这样既能保证在静态资源不变了情况下,可以不重发请求或直接通过304避免重复下载,又能保证在资源有更新的,只要通过给资源增加时间戳或者更换路径,就能让用户访问最新的资源
过多的使用Cookie会大大增加HTTP请求的负担,每次GET或POST请求,都会把Cookie都带上,增加网络传输流量,导致增长交互时间;同时Cache是很难被缓存的,应该尽量少使用,或者这在动态页面上使用。
通过HTTPS请求的资源,默认是不会被缓存的,必须通过特殊的配置,才能让资源得到缓存。建议只对涉及敏感信息的请求使用HTTPS传输,其他类似Css,Js,图片这些静态资源,尽量避免使用。
虽然POST的请求方式比Get更安全,可以避免类似密码这种敏感信息在网络传输,被代理或其他人截获,但是Get请求方式更快,效率更高,而且能被缓存,建议对于那些不涉及敏感信息提交的请求尽量使用Get方式请求
如果动态脚本或CGI输入的内容在一定的时间范围内是固定的,或者根据GET参数相同,输入的内容相同,我们也认为请求是可以被缓存的,有以下几种方式,可以达到这个效果:
HTTP请求/响应头中缓存报头对有效利用站点缓存,作为一个Web前端开发者,我要做什么呢?答案是:啥都不用做。不过要去推动Web运营人员、Web后端开发人员分别给服务器和动态脚本CGI增加合适的缓存报头。
Apache相关配置参考:mod_headers、mod_headers
服务器配置的方法比较简单通用,但是如果遇到没有权限修改服务器配置或者需要添加更细致的Expires/Cache-Control/Etag等信息时,不妨可以试试从代码层面去添加这些信息。不同语言写法实现略有不同,但思路都是一致的。可以在单独开辟一个独立模块,调用语言库提供的添加报头的接口,根据需要设置报头信息。当某个请求的动态脚本需要被缓存时,可以采用类似include,require等模块引用方式调用公共模块,实现缓存机制。
Php实现代码实例如下:
Cache.php
<?php
Header(“Cache-Control: must-revalidate”);
$offset = 60 * 60 * 24 * 3;
$ExpStr = “Expires: ” . gmdate(“D, d M Y H:i:s”, time() + $offset) . ” GMT”;
Header($ExpStr);
?>
<?php
Require(Cache.php)
// business code here
// todo
?>