会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > 杨建:网站加快--Cache为王篇

杨建:网站加快--Cache为王篇

时间:2012-01-12 20:47:04   作者:   来源:   点击:

提升性能的同时为你节俭10倍以上本钱。

.Cache,王道也

我感觉系统架构不该该仅仅是搭建一个强硬的能承受巨年夜并发压力的后台,前端页面也是需要架构的并且同等重要,不睬解前台的的后台工程师是不合格的。中国人讲究钢柔相济,后台强硬只能说你内功深厚,前端用的巧,那叫四两拨千斤。

一般后台工程师很少关心前端如何使用自己的资源,而前端工程师,不知道自己的一个简单的用法会对后端造成多年夜影响。我会给出一些数据,来震撼下你的眼球。

.Cache 基来历根底理介绍 (参考Caching Tutorial)

为什么使用Cache?

1.削减延迟,让你的网站更快,提高用户体验。

2.避免网络拥塞,削减请求量,削减输出带宽。

弥补一个cache的原则:不更新的资源就不该该让它再次产生HTTP请求,如果强制产生了请求,那么就看看能否返回304。

Cache的种类?

阅读器Cache,代办署理Cache,网关Cache。

后端还有 disk cache ,server cache,php cache,不过不属于我们今天讨论范围。

Cache如何工作的?

1.如果响应头奉告cache别缓存它,cache不对它做缓存;

2.如果请求需要验证的或是需要平安性的,它将不被缓存;

3.如果响应头里没有ETag或Last-Modifed header这类元素,并且也没有任何显式的信息奉告如何对数据保鲜,则它被认为不成缓存。

4.在下面情况下,一个缓存项被认为是新鲜的(即,不需到原server上查抄便可直接发送给client):

它设置了一个过时时间或age-controlling响应头,并且现在仍未过时。

如果阅读器cache里有某个数据项,并且被被设置为每个会话(session)过程中只查抄一次;

如果一个代办署理cache里能找个某个数据项,并且它是在相对较长时间之前更新过的。

以上情况会认为数据是新鲜的,就直接走cache,不再查询源server。

5.如果有一项过时了,它将会让原server去更新它,或奉告cache这个拷贝是否仍是可用的。

怎么节制你的Cache?

Meta tags :在html页面中指定,这个别例只被少数阅读器支持,Proxy一般不会读你html的具体内容然后再做cache决定计划的。

Pragma: no-cache : 一般被年夜家误用在http响应头中,这不会产生任何效果。而实际它仅仅应该用在请求头中。 不过谷歌的Server: GFE/1.3 响应中却这样用,难道人家也误用了呢。

Date: 当前主机GMT时间。

Last-Modified : 文件更新GMT时间,我在响应头中带上这个元素的时候,通常阅读器在cache时间内再发请求城市稍带上If-Modified-Since,让我们判断需要重新传输文件内容,仍是仅仅返回个304奉告阅读器资源还没更新,需要缓存策略的办事器必定都得支持的。有了这个请求,head请求在根基没太多用处了,除非在telnet上调试还能用上。

If-Modified-Since : 用在请求头里,见Last-Modified 。

Etag: 标识资源是否产生转变,etag的生成算法各是各样,通常是用文件的inode+size+LastModified进行Hash后取得的,可以按照应用选择适合自己的。Last-Modified 只能切确到秒的更新,如果一秒内做了多次更新,etag就可以派上用场。貌似年夜家很少有这样切确的需求,华侈了http header的字节数,建议不要使用。

更正:Etag 其实在某种情况下可以很好的削减数据传输。在stonehuang的提醒下我才恍然年夜悟,转眼好几个月了也一直忘记更新。Etag应用场景。比如,数据为php的动态输出。每次请求把上一次Etag带来,跟本次计较的Etag进行比较,相等便可以避免一次数据传输。(最后修改时间 2009.12.07)

Expires : 指定缓存到期GMT的绝对时间,这个是http 1.0里就有的。 这个元素有些缺点,一,办事器和阅读器端时间不一致时会有问题。 二,一旦失效后如果忘记重新设置新的过时时间会致使cache失效。三,办事器端需要按照当前Date时间 + 应该cache的相对时间去计较这个值,需要cpu开消。 我不推荐使用。

Cache-Control:

这个是http 1.1中为了弥补 Expires 缺陷新插手的,现在不支持http 1.1的阅读器已经很少了。

max-age: 指定缓存过时的相对时间秒数,max-ag=0或是负值,阅读器会在对应的缓存中把Expires设置为1970-01-01 08:00:00 ,虽然语义不敷透明,但却是我最推荐使用的。

分享到:

网友评论

热门建站经验