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

站长资源综合门户

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

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

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

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

其他一些使用cache需要注意的东西,不要使用post,不要使用ssl,因为他们不成被cache,别的保持url一致。只在需要的处所,通常是动态页面使用cookie,因为coolie很难cache。至于apache如何支持cache和php怎么用header函数设置cache,暂不做介绍,网上资料比较多。

如何设置公道的cache时间 ?

http://image2.sinajs/newchart/min/n/sz000609.gif?1230015976759

拿我分时图举例,我们需要的更新频率是1分钟。但为了每次都拿到最新的资源,我们在后面加了个随机数,这个数在同一秒内的多次刷新城市转变。我们的js虽然能够很好的节制,一分钟只请求一次,可是如果用户点了刷新按纽呢?这样的挪用是完全cache无关的,连返回304的机缘都没有。

试想,如果很多人通过同一个代办署理出去的,那么所有的请求城市穿透代办署理,弄欠好被网管封失落了。如果我们做只做一秒的cache,对直接拜候源办事器的用户没太多影响,但对代办署理办事器来讲,他的请求可能会从10000 req/min 削减为 60 req/min ,这是160倍。

对我们行情图片这样的情况,刷新频率为1分钟,比较好的做法是把后面的随机数(num)修改成 num=t-t%60 其中t是当前时间戳 ,这样你一分钟内刷这个url是不变的,下一分钟会增加1,会再次产生一个新请求。而我的max-age设置为默认59秒,即便设置120秒其实也没什么影响。可能你会说万一遇上临界点可能拿不到最新的数据,其实对用户来讲,用那个多变的随即数和我这个分钟级的随即数,看到的效果是相同的下面我给你阐发一下: 如果用户打开了我们的分时间页面,当前随即数对他来讲是新的,所以他会拿到一个当前最新的图片,然后他点了刷新按纽,用户会产生http请求,即便url没变,办事器有最新图片也一定会返回,不然返回304,一分钟后js刷新图片,分钟数加了1,会取得全新资源。这和那个随时转变的随即数效果有区别吗?都拿到了最新的数据,可是却别的收益了cache带来的益处,对后端削减很多压力。

三.我划分的3个刷新级别

名词诠释 全新请求: url产生了转变,阅读器会把他当一个新的资源(倡议新的请求中不带If-Modified-Since)。

更正:在firefox后来的版本中对此做了改进,倾向于更多的使用cache,曾经拜候过的城市尽可能捎带If-Modified-Since头。这些表示和IE一致。修改部分用红色标出。(最后修改时间 2009.12.07)

注: sports.sinajs 在IE下的表示存在一个小bug,由于不是使用的strncpy,致使IE下难以返回304,

需要修改一行代码,把比较字符串长度设置为29便可解决。不过目前本人已不在职,难以修改。

情况一 FF 捎带的头: If-Modified-Since Mon, 07 Dec 2009 10:54:43 GMT

情况二 IE 捎带的头: If-Modified-Since Mon, 07 Dec 2009 10:54:43 GMT; length=6

1,在地址栏中输入http://sports.sinajs/today.js?maxage=11地址按回车。重复n次,直到cache时间11秒曩昔后,才倡议请求,这个请求会带If-Modified-Since。

2,按F5刷新。 在你倡议一个全新的请求以后,然后多次按F5城市产生一个带If-Modified-Since的请求。

3, ctrl+F5 ,总会倡议一个全新的请求。

下面是按F5刷新的例子演示: http://sports.sinajs/today.js?maxage=11

( 如果这个值年夜于阅读器最年夜cache时间maxage,将以阅读器最年夜cache为准)

倡议一个全新请求

GET /today.js?maxage=11 HTTP/1.1

Host: sports.sinajs

Connection: keep-alive

HTTP/1.x 200 OK

Server: Cloudia

分享到:

网友评论

热门建站经验