Categories
Archives
New posts
centos安装nginx+php+mysql
经典dos命令
关于两年前那个论坛
寻找更简单、快速的模板处理办法...
wordpress之慢之我的解决办法(性能明显提升)
New Commets
2012-01-18:Various fields of life demand different specialist…
2012-01-16: I think it's alluring, because it expand a very a…
2012-01-16:Essays writing services create a lot of free essay…
2012-01-14:Do you guess that you can't 2012-01-12:All in our world is not constant, however we guara…
2012-01-09:Start dominating today choosing the quality 2012-01-04:Some time ago, I really needed to buy a building f…
2011-12-02:If you want to buy real estate, you will have to g…
2010-11-02:看看我自己写的博客CMS网址是http://www.taocms.tk,希望能和你交流,呵呵,不过貌…
2010-10-03:无意中来到这里,感觉不错...关注下~
Links
然,即便种种如此这般,仍乐此不疲…
wordpress之慢之我的解决办法(性能明显提升)
Post by:admin, at:2010年05月24日. Category:web开发, Tags:Etag,If-Modified-Since,If-None-Match,浏览器缓存控制
浏览器缓存(注意区别于客户端缓存)
这一段时间都在忙着重整学校论坛(主要是论坛更换服务器以及对apache的优化)和网易观方赛的,然后这段时间又接近学校考试,所以一直没有时间写博客,甚至站点的两个图片服务器被封了也是同学通知的,尽管如此还是没能够及时的维护。如今观方站已经基本成形也稍稍松了一口气,于是趁此机会把前段时间做的主题修改了一下就放上来了,这个主题是纯css+div的,甚至没有加任何装饰图片,就连之前用css+span做的三角形都不要了,因为使用的是国外的服务器,所以我把任何没用实际意义的东西都去掉,速度是用户体验的最基本的因素,如果连速度都跟不上何谈web2.0。
回归话题,刚才也提到了,这个新的主题是前一段时间已经做出来了的,但是因为没来得及优化所以就没有放上来。优化是这样的
- 添加了一些 和标签,实现对搜索引擎友好和优化浏览器后退
- 修改wordpress的wp-blog-header.php文件(这是主要任务,所以我注明要区别于客户端缓存)
第一项就没什么说的了这事最基本的常识,重点在第二项。在每次浏览器发出请求时请求的http中都包含一段头部信息,如下图所示:
然后如果服务器首先返回的数据中包含http头如下图:
在第一个图中我们看到浏览器发出的请求中包含If-Modified-Since和If-None-Match 两个参数,第一个表示询问数据的最后修改时间是否是Thu,19 Jun 2008 16:24:01 GMT 然后服务器就会检查数据的最后修改时间,如果是该时间则返回状态码304(表示没有修改),此时当浏览器收到状态码是304时就不会下载数据而是从本地缓存中调用。然而只有本地缓存中存在着该请求资源的数据时浏览器才会发送If-Modified-Since参数并且其值为上一次服务器所返回的Last-Modified的值(并不是所有的服务器都支持If-Modified-Since和If-None-Match );If-None-Match的功能也类似,它是由服务器返回的Etag的值生成的,可以是任意值,因为其作用仅仅是使服务器检查数据的修改时间然后返回而已,只要不为none(默认值)或不为空其它的都可以。
所以我们可以在代码的最前部分设置返回给浏览的Etag为某个值,然后在这个资源被第二次请求的时候就会附带着一个If-None-Match参数,通过核实其值确实为所发出的Etag值时就可以指定服务器返回为304然后强行退出程序就行了,If-Modified-Since也是一样的做法这里就只给出etag方法的php版(Last-Modified版的太常见了如设置缓存超时等等):
if ($_SERVER[”HTTP_IF_NONE_MATCH”] == “zhaiyun.com”){
header(’Etag:’.”zhaiyun.com”,true,304);
exit();
}
else {
header(’Etag:’.”zhaiyun.com”);
}
你还可以稍微改一下:
$expires=date(”Ymd”); //一天后缓存过期
if ($_SERVER[”HTTP_IF_NONE_MATCH”] == $expires){
header(’Etag:’.$expires,true,304);
exit();
}
else {
header(’Etag:’.$expires);
}
注意在此之前没有任何输出就可以了(“<?php”前面有空格是最常见的疏忽),否则apache会报错,如果你也用wordpress,你就可以在wp-blog-header.php文件的头部加上这段代码来优化浏览器缓存了。如果你觉得还不够用,那就建议使用浏览器内建缓存机制了(客户端缓存的核心)。




