Home Contact Sitemap

ZhaiYun

一个web developer的博客.

Categories

Archives

New posts

经典dos命令
关于两年前那个论坛
寻找更简单、快速的模板处理办法...
wordpress之慢之我的解决办法(性能明显提升)

New Commets

2010-07-15:感觉如何,这是国外的免费虚拟主机,专门用来测试的,逛两天上海世博回去即可开源...…
2010-07-15:测试下债云
2010-07-13:升级版本已经写好了,这段时间在上海有些事,等回武汉立即开源…
2010-07-13:后生可畏啊
2010-07-09:摘云博客 什么时候开源? :)
2010-06-26:ezxcqzqkaqgetsehcrljozuqkdbtxr
2010-05-24:博客挂了以后,很多数据都丢失了,幸好部分数据还在网上流传,这篇博文就是搜出来,应该还有不少,再去找找…

Links

摘云博客

写了很久、很多,零零散散的东西多的连自己都已记不清了,而完整且完美的东西却屈指可数,没完没了的修改、重来,着魔般的敲代码于无数寂静的黑夜和不见阳光的白昼,周而复始,只为敲出无可挑剔的代码。
然,即便种种如此这般,仍乐此不疲…

寻找更简单、快速的模板处理办法...

Post by:admin, at:2010年05月24日

(这篇也是在网上找回来的,发现好几个地方不但没有著名出处,更有自拥版权者,虽然本文价值不大,但咱还是觉得有保存下来的必要,纪念下咱在这条路上留下的痕迹... 记得本文似乎也是08年写的,当时在研究phpwind的源码,所以此文思路与phpwind的模板处理方式相似,是咱当时为抛砖引玉所做的简化版,目前已有较其更为完善方案,所以贴出来仅供留念...)

对于像现在的网站来说速度和效率无疑仍是最重要的,对于模板本人通常是这样来处理的:

模板文件./tempalet/index.htm 如下:

<!--
<?
echo <<<EOT
-->
<html>
<head>
<title>追求简单快速的模板处理方式</title>
</head>
<body>
<div>$replaceText</div>
</body>
</html>
<!--
EOT;
?>
-->

处理文件./lib/index.php 如下:

<?
/*缓存输出可视情况而定*/
ob_start();
/*逻辑处理以得到$replaceText的值*/
$replaceText='这是逻辑处理后得到的替换文本';
/*直接include模板文件*/
include('../tempalet/index.htm');
/*刷新、送出缓存*/
ob_flush();
?>

[阅读全文»]

Category:web开发 Tags:模板,简单快捷 Comments (3)

wordpress之慢之我的解决办法(性能明显提升)

Post by:admin, at:2010年05月24日

浏览器缓存(注意区别于客户端缓存)

这一段时间都在忙着重整学校论坛(主要是论坛更换服务器以及对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