Web缓存系列之如何构建可缓存站点

来源:互联网 发布:mermaid mac 编辑:程序博客网 时间:2024/06/05 00:28

1)同一个资源保证URL的稳定性

URL是浏览器缓存机制的基础,所以如果一个资源需要在多个地方被引用,尽量保证URL是固定的。同时,比较推荐使用公共类库,比如Google Ajax Library等,有利于最大限度使用缓存

2)给css、js、image图片等资源增加http缓存头,并强制入口html不被缓存

对于不经常修改的静态资源,比如Css,js,图片等,可以设置一个较长的过期的时间,或者至少加上Last-Modified/Etag,而对于html页面这种入口文件,不建议设置缓存。这样既能保证在静态资源不变了情况下,可以不重发请求或直接通过304避免重复下载,又能保证在资源有更新的,只要通过给资源增加时间戳或者更换路径,就能让用户访问最新的资源。

3)减少对Cookie的依赖

过多的使用Cookie会大大增加HTTP请求的负担,每次GET或POST请求,都会把Cookie都带上,增加网络传输流量,导致增长交互时间;同时Cache是很难被缓存的,应该尽量少使用,或者这在动态页面上使用。

4)减少对https加密协议的使用

通过HTTPS请求的资源,默认是不会被缓存的,必须通过特殊的配置,才能让资源得到缓存。建议只对涉及敏感信息的请求使用HTTPS传输,其他类似Css,Js,图片这些静态资源,尽量避免使用。

5)多用get方式请求cgi

虽然POST的请求方式比Get更安全,可以避免类似密码这种敏感信息在网络传输,被代理或其他人截获,但是Get请求方式更快,效率更高,而且能被缓存,建议对于那些不涉及敏感信息提交的请求尽量使用Get方式请求.

6)缓存动态CGI

如果动态脚本或CGI输入的内容在一定的时间范围内是固定的,或者根据GET参数相同,输入的内容相同,我们也认为请求是可以被缓存的,有以下几种方式,可以达到这个效果:

  1. 让动态脚本定期将内容改变时导出成静态文件,Web直接访问带有Last-Modified/Etag的静态文件
  2. 开发者可以通过代码给动态脚本的响应头中添加Cache-Control: max-age,告诉浏览器在过期前可以直接使用副本
  3. 通过代码给动态脚本的响应头添加Last-Modified/Etag信息,浏览器再次请求的时候,可以通过解析If-Modified-Since/If-None-Match得知浏览器是否存在缓存,由代码逻辑控制是否返回304

7)给站点增加缓存机制

HTTP请求/响应头中缓存报头对有效利用站点缓存,作为一个Web前端开发者,我要做什么呢?答案是:啥都不用做。不过要去推动Web运营人员、Web后端开发人员分别给服务器和动态脚本CGI增加合适的缓存报头。

 

8)编写可缓存的动态脚本

服务器配置的方法比较简单通用,但是如果遇到没有权限修改服务器配置或者需要添加更细致的Expires/Cache-Control/Etag等信息时,不妨可以试试从代码层面去添加这些信息。不同语言写法实现略有不同,但思路都是一致的。可以在单独开辟一个独立模块,调用语言库提供的添加报头的接口,根据需要设置报头信息。当某个请求的动态脚本需要被缓存时,可以采用类似include,require等模块引用方式调用公共模块,实现缓存机制。

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); ?> 


 

原创粉丝点击