自建php缓存加快WordPress博客打开速度
2008-5-25 WordPress是一款优秀的博客程序,然而由于每次显示一个网页,都要查询数据库,加重了主机负载,降低了显示速度。本文介绍一种技术,给php网页建立缓存,生成html文件,从而加速博客的打开速度。
缺省情况下,每显示一个页面,php是都会查询数据库,动态生成一个页面,但是大部分页面在一段时间内都是不会发生太大变化的,我们完全可以生成一个html文件,这样当访客访问时,直接显示给他html,非常迅速。
生成html缓存文件的php代码如下:
<?php
// start the output buffer
ob_start(); ?>
//在此调用php脚本,输出结果将会被保存到下面的文件(A)
<?php
$cachefile = “cache/home.html”;
// open the cache file “cache/home.html” for writing
$fp = fopen($cachefile, ‘w’);
// save the contents of output buffer to the file
fwrite($fp, ob_get_contents());
// close the file
fclose($fp);
// Send the output to the browser
ob_end_flush();
?>
现在,我们就建立了一个缓存文件:cache/home.html,如果你打开home.html查看的话,会发现其内容,和直接调用(A)处的脚本显示,是一样的。
接下来,我们需要判断一个缓存文件是否存在,如果存在是否已经过期,来确定是否需要重新生成html缓存文件。假设缓存有效期为五分钟,那么php完整代码如下:
<?php
$cachefile = “cache/”.$reqfilename.”.html”;
$cachetime = 5 * 60; // 5 minutes
// Serve from the cache if it is younger than $cachetime
if (file_exists($cachefile) && (time() - $cachetime
< filemtime($cachefile)))
{
include($cachefile);
echo “<!– Cached “.date(’jS F Y H:i’, filemtime($cachefile)).”
–>\n”;
exit;
}
ob_start(); // start the output buffer
?>
.. Your usual PHP script and HTML here …
<?php // open the cache file for writing $fp = fopen($cachefile, ‘w’);
// save the contents of output buffer to the file fwrite($fp, ob_get_contents());
// close the file
fclose($fp);
// Send the output to the browser
ob_end_flush(); ?>
BTW,我的侧边栏的最新评论,和最新文章,就是使用了html缓存文件,使用之后,感觉效率明显变高了。当然,你也可以使用以上代码把缓存内容输出到一个js的javascript脚本文件,然后在侧边栏调用,效果差不多。
(英文全文地址:http://www.theukwebdesigncompany.com/articles/php-caching.php)
补充一下,我的博客已经使用了wp-cache实现了缓存,见装上了WordPress的缓存插件,实现了网页静态化,然而缺省状态下,当有新文章或新评论的时候,要更新已经缓存的日志的侧边栏上的“最新评论”和“最新文章”,就必须对所有日志重新缓存,这显然不够灵活。所以我把侧边栏的“最新评论”和“最新文章”分开来了,这样就不需要更新每篇日志了,只需要更新这两个页面即可。目前我这两个页面使用的是iframe嵌入的,前几天试过调用javascript嵌入,发现调用javascript后,http请求并没有减少,而且由于javascript代码必须写成一行,我遇到一些问题,部分评论被截取的时候,末尾有了“0D”的十六进制字符,非常麻烦,而且部分wordpress的部分php函数生成的代码,必须进行转换,把”单引号转为”"双引号,才能正确调用。此外还不知道会有什么其它麻烦,所以我就没用javascript脚本。
其实许多博客,比如月光博客,首页体积很大,全部装载要200多K(包括图片等资源),而且http请求数也很多,但是打开却很快,因为他用的是独立主机,而且带宽大,首页也实现了静态化。所以我觉得,提高速度的关键还是要好的服务器,然后加上静态化。单纯的依靠一些小技巧,比如减少http请求数,合并css文件里的图片成一个文件,都没有太大作用(图片等资源会缓存,第二次打开时会快很多,不知道同一个页面里嵌入一个iframe,iframe再调用和父页面一样的css,这个css会不会用缓存的那个?我感觉好像会的)。再比如积水成渊博客,第一次访问他的主页,装载全部资源,也比我的博客要多,但是速度却比我的快,就是因为积水成渊兄把部分图片放在了国内速度比较快的主机上,所以大大提高了速度。
2008-5-26 11:50 am
老兄这里的速度提升很明显,让我们也想尝试一下了。。这篇文章很有参考意义,谢谢!
2008-5-26 1:01 pm
把图片,视频,电子书等建议不要放在自己的空间中,选择Youtube、flickr等平台存放,加载速度还会快一些
2008-5-27 10:58 am
请问如何添加这些代码?
2008-5-27 11:11 am
第一次来这里。这个看的云里雾里.blog静态化对于我真的有点复杂…
继续关注吧。
2008-5-27 12:36 pm
谢谢大家的补充。
不好意思文章确实写得不好,给大家困扰了,这篇文章确切的说,应该是给WordPress的侧边栏添加缓存,文章页和目录页的缓存还是用一下http://blog.yiyidu.com/2008_297.html文章里提到的wp-cache插件比较好。
侧边栏的静态化,是拖一个文本widget到侧边栏上,然后调用侧边栏的文件,侧边栏的文件里添加这些代码。象月光博客的侧边栏,就是静态化的,与文章页分开的,他用的是javascript载入侧边栏内容(不过他的博客是zblog的,不是wordpress的,原理和作用都是一样的)
2008-5-30 12:39 am
[...] 自建php缓存加快WordPress博客打开速度 (tags: wordpress) [...]
2008-5-30 12:39 am
[...] 自建php缓存加快WordPress博客打开速度 (tags: wordpress) Posted by dupola Filed in bookmarks [...]