当前位置:首页 > 电脑常识 > 正文

杨建:网站加速Cache为王篇 8090安全门户

11-21 电脑常识

--提升性能的同时为你节约10倍以上本钱
From:

一,Cache, 王道也
二,Cache 基来源根底理介绍
三,我划分的3个刷新级别
四,我对HTTP协议做的一点创新(?maxage=6000000)
五,Yslow优化网站性能的14条军规点评
六,上线了 !=  Finished
七,提速度同时节约本钱要领汇总
-----------------------------------------------------------------------------------------

一,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响应头中,这不会孕育产生任何效果。而实际它仅仅应该用在请求头中。不过google的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的字节数,建议不要使用。

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 ,虽然语义不够透明,但倒是我最保举使用的。
s-maxage: 类似于max-age,只用在共享缓存上,好比proxy.
public: 凡是情况下需要http身份验证的情况,响应是不成cahce的,加上public可以使它被cache。
no-cache: 强制浏览器在使用cache拷贝之前先提交一个http请求到源处事器进行确认。这对身份验证来说长短常有用的,能对照好的遵守 (可以结合public进行考虑)。它对维持一个资源总是最新的也很有用,与此同时还不完全丧掉cache带来的好处,因为它在本地是有拷贝的,但是在用之前都进行了确认,这样http请求并未减少,但可能会减少一个响应体。
no-store:  报告浏览器在任何情况下都不要进行cache,不在本地保存拷贝。
must-revalidate: 强制浏览器严格遵守你设置的cache法则。
proxy-revalidate: 强制proxy严格遵守你设置的cache法则。
用法举例:  Cache-Control: max-age=3600, must-revalidate

温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/pc/13103.html

博客主人杰米WWW
杰米博客,为大家提供seo以及it方面技巧喜欢的朋友收藏哦!
  • 11365文章总数
  • 1378074访问次数
  • 建站天数
  •