Home Contact Sitemap

ZhaiYun

一个web developer的博客.

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。

回归话题,刚才也提到了,这个新的主题是前一段时间已经做出来了的,但是因为没来得及优化所以就没有放上来。优化是这样的

  1. 添加了一些 标签,实现对搜索引擎友好和优化浏览器后退
  2. 修改wordpress的wp-blog-header.php文件(这是主要任务,所以我注明要区别于客户端缓存)

一项就没什么说的了这事最基本的常识,重点在第二项。在每次浏览器发出请求时请求的http中都包含一段头部信息,如下图所示:

sendhttpheaer1.jpg(新系统,图片丢失,稍后补上)

然后如果服务器首先返回的数据中包含http头如下图:

httpheaer.jpg(新系统,图片丢失,稍后补上)

在第一个图中我们看到浏览器发出的请求中包含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文件的头部加上这段代码来优化浏览器缓存了。如果你觉得还不够用,那就建议使用浏览器内建缓存机制了(客户端缓存的核心)。

转载请保留出处:http://www.zhaiyun.com/html/2008/61.html

Comments (6)
#1 admin2010年05月24日17时48分22秒写道:
博客挂了以后,很多数据都丢失了,幸好部分数据还在网上流传,这篇博文就是搜出来,应该还有不少,再去找找看...

#2 lostworld2010年07月09日23时16分13秒写道:
摘云博客 什么时候开源? :)

#3 shiny2010年07月13日18时16分23秒写道:
后生可畏啊

#4 renwuxun2010年07月13日20时28分40秒写道:
升级版本已经写好了,这段时间在上海有些事,等回武汉立即开源

#5 toobull2010年10月03日11时08分24秒写道:
无意中来到这里,感觉不错...关注下~

#6 YATESOra272012年01月16日10时09分42秒写道:
Essays writing services create a lot of free essays every day. Only professionals are able to do this. Thence, if you want to get quality social issues essays paper, you would have to look for the essays writing service.


用户名:
(必填,由字母、数字、下划线“_”组成)
邮箱:
(必填,不公开)
内容:
(必填,不多于500字)