加快WordPress的页面生成和载入速度

前一阵,此blog的页面打开速度慢的要命,我每次打开都需要大约10秒钟的时间。而通过Google Analytics的数据看到,70%+用户在这个blog的停留时间还不到十秒:(。所以我决定加速一下我的blog,后来看起来似乎有些效果。下面是我用的一些方法,希望对后来人有些用处。

1.安装WP-Cache 2.0

WP-Cache 2.0可以将页面缓存,在短时间内(默认为1个小时,可以在后台设置)的再次浏览,将直接发送缓存的页面,相当于将WordPress给静态化了。

好处是显然的。而且这个版本的WP-Cache 2.0在缓存的时候根据页面URL+Cookie进行缓存的,所以它不会影响COOKIE的使用。注意,WP-Cache 2.0只读取Cookie中的email地址,然后根据email地址判定是否属于同一个用户。由于大多数人都没有留下Email,所以我修改成根据Cookie中的用户名来判断,将插件目录下的wp-cache-phase1.php的第67行改成:

//if (preg_match("/^wordpress|^comment_author_email_/", $key)) {
if (preg_match("/^wordpress|^comment_author_/", $key)) {

由于大部浏览者的cookie都是空的,所以这个插件会加快这大部分的浏览速度。另外,这个插件还会侦测文章更新,实时更新缓存等。

但是缺点也是显然的。首先,在页面还没有生成的时候,就进行COOKIE的读取和交换,将降低速度,某种程度上来说,它使得头次浏览的速度更慢。再者,这个插件在运行的时候,还是得先把其他插件初始化,所以它只是减少了页面生成的函数调用的时间。

效果:不明显。事实上,这个插件主要是用来降低系统CPU占用量的,对页面载入速度影响有限。

2.改善插件

我并没有安装太多插件,而且都是些小型的插件,从来不装像UTW那样的巨无霸插件。但是我还是把那些非插件必须的文件(大部分是我修改插件的时候新加的)都移出插件目录。以免WP错把它们当成插件文件进行初始化处理。

效果不明。因为经过处理的文件不多也不大,想必影响有限。

3.页面静态化

一个不变的事实是:html页面永远要比php页面快的多,而且几乎不占用CPU资源。所以将页面静态化是一个好主意。但将所有页面静态化,没有这个必要。所以我选择了将blog主页进行静态化处理——各位如果不信的话,直接页面刷新,然后看一下右边的随机文章变了没有:)。

我同学告诉我页面静态化有很多种方法,但我决定采用最土的一种方法:

首先,在根目录下建立一个cron.sh文件,里面的内容是:

wget -O /home/aaaa/zhiqiang.org/blog/index.html http://zhiqiang.org/blog/index.php

上面的/home/aaaa是我的根目录,其中aaaa是用户名。再使用Fterm SSH登录远程主机,输入

crontab -e

在出来的编辑界面中输入

*/10 * * * * /home/aaaa/cron.sh

再保存就OK了。这样,系统会自动地每10分钟一次将blog的动态主页index.php转成静态的index.html,以后访问主页的时候就会直接访问index.html,从而实现了blog主页面的html静态化。

缺点:COOKIE失效。不过山人自有妙计,使用javascript本地读取COOKIE然后填入表格即可。

效果:明显

4.合并JS和CSS文件

浏览页面的时候,把页面保存下来,便能看到这个页面含有的文件。文件太多,会大大降低浏览速度。而WordPress的插件系统使得JS和CSS文件很多,所以,应当合并一下JS和CSS文件。

手动合并是一个方法,但是容易弄错,而且不太好修改。另一个方法是建立一个新的all.js.php文件,内容是:

<?php
require_once('目录/wp-blog-header.php' ) ;
include ("/blog/a.js" ) ;
include ("/b.js" ) ;
?>

就是将header.php里面的那些js文件都include到all.js.php,然后在header里面包含all.js.php文件即可:

<script xsrc="all.js.php" type="text/javascript"/>

另外还要做的一件事情是需要把原来那些js文件从head里面去掉。通常这些js文件都是通过add_action('wp_head','fun' ) ;这样的钩子添加到head里面的。在fun函数的定义处去掉对应的代码,或者直接把这条语句删除即可。

对CSS文件也可以用同样的处理方式。CSS文件一般都不多,这时候可以直接手动把它们都贴到一起。

另外js文件的载入位置也很重要,放在越后面越好,让浏览器先下载html代码。像Google Analytics的js代码最好放在文件最后。

效果:非常明显

另外,太多的图片也会降低载入速度,而我这个模板的图片就比较多,而且我已经把能不用的图片去掉了。想着是不是该换模板了。

Q.E.D., ©zhiqiang, 2006.08.26。请参考右边的相关文章列表。


  1. 启用wp-cache后,我的maxthon有时候打开blog就显示打开完成.但是是个空白界面,需要刷新才行.所以我已经停止使用这个插件了.今天访问你的blog也出现了这样的情况.是为什么呢?插件的原因,还是浏览器的原因?

  2. 我现在已经把WP-Cache卸载了。但是我以前用的时候也没有出现你说的那种情况。你今天在我这里碰到这种情况,可能恰好是后台在进行每10分钟一次静态页面更新。

  3. 用过这插件,可不知道哪出了毛病,一用页面就错误了.后来重装了wordpress,也没再试过.

  4. 呵呵,我一直用这个插件的,不果没有测试过效果

  5. 一直用这个插件呢~~ 看了帖子有点想动手的欲望 有空试试~

  6. wokao,你真有耐心,这些东西也搞。
    倒是把内容简化一点才是永久之计,orz

  7. 点了这篇文章的trackback, 出现 Warning: include(/home/.durante/mathzqy/xiaoqiang.org/blog//wp-trackback.php) [function.include]: failed to open stream: No such file or directory in /home/.durante/mathzqy/xiaoqiang.org/blog/wp-includes/template-loader.php on line 8 的提示

  8. 对不起,最近的trackback spam实在太多了,而且akismet也没有太大的作用,所以我暂时把trackback关闭了,通过将wp-trackback文件改名的方式。

    如果需要的话,请手动添加trackback。

  9. 这是个不错的解决方案,不过一定有响应的主机权限才行。

  10. 能不能说一下具体合并的方法,有很多js不是单独包含的.像这样

    /js/livesearch.js.php">

    有php条件函数,那怎么办,
    还有请问css的怎样合并....

  11. 不知道你说的单独包含是啥意思?你给的livesearch.js.php可以同样include进取。all.js.php会解析执行包含php文件的。

    具体的合并方法我更新在文章里面。这些方法都需要一定的php基础,如果啥都不懂的话,还是先学习一下php再用吧。

  12. 是这样的,我的wp皮肤内置有选项,例如是否使用livesearch功能,然后在head.php就有条件函数判断是否包含liveseacher.js.php , 有几个这样的选项判断是否包含相应功能的js 文件,如果按照你的方法全部include就没有选项的功能. 应该怎么办?

  13. 难道这个插件需要手动修改head.php吗?这样的话,直接把手动修改的代码,包含哪些判别语句添加到all.js.php即可。

  14. 能够说说wp-cache的安装吗。很不好安装,我的wordpress版本是2.03

  15. 安装方法在它的官方主页http://mnm.uib.es/gallir/wp-cache-2/ 上有说明,就我所知,WP-Cache的安装没有什么特别的地方。

    但我听说有人装了这个之后每次打开页面都是空白,必须强行刷新一次之后才能显示,这个我没有碰到过,也不知道具体什么原因造成的。

  16. 试用过wp-cache这个插件,感觉虽然是静下来了。但是对于别的浏览者第一次打开就慢了。而且开了这个cache很多动态东西就不会更新。所以还是卸载掉了。

  17. Pingback: 一切为了速度 at iVan.dOo

  18. Pingback: 一切为了速度 at iVan.dOo

  19. 我也采用了Blog静态化的方式来加速。WP-Cache启动后打开页面总是白屏,只有强制刷新。

  20. Pingback: iVan.dOo » Blog Archive » 一切为了速度

  21. 我今天按照你说的把js和css给合并了。
    效果很不错!

  22. 累啊累,不过效果还不错,支持下。
    Loading js文件的位置的确很重要

  23. Pingback: 徘徊在玻璃之城 » Wordpress 终极优化手册

  24. Pingback: 优化Wordpress博客加载速度 | Ge Xiaofei

  25. Pingback: TechPush » 清理主题文件,加速Wordpress

  26. Pingback: 清理主题文件,加速Wordpress

  27. Pingback: 优化Wordpress–给网站大提速 | Crescent

  28. 你好 我按照你说的方法把所有js合并成一个all.js.php了 在首页引用后怎么找不到路径是的呢
    这是我的all.js.php

    还有就是我想把all.js.php再次处理下如下:

    应该怎么弄,这段代码中是引用$file="all.js"; all.js啊

  29. 你写的代码我看不到,不知道你在说啥。

    不过如果找不到路径这样的问题你都无法解决,还是想让速度快一些的话,你还是先把你网页上多余的功能(其实根本没多少人会用)去掉吧。

    痛苦的根源多半因为欲望大于能力。

  30. 我的effects.js 等三个文件都是放在myfiles文件夹下的
    我现在 在head.php中

    
    

    这样写 说明路径是对的啊
    同样我包含在这个目录想的all.js.php也应该没问题
    问题是在这个文件中应该怎么包含那三个文件呢?

    
    

    我是这样写的 可就是加载错误。。。。
    先不说绝对路径和相对路径的问题

  31. Pingback: 优化Wordpress-wp终极优化手册 at 星娱乐快报

  32. Pingback: WordPress爱好者 - wordpress优化

  33. Pingback: iweb » Wordpress终极优化手册

  34. Pingback: Wordpress终极优化手册 - 五福管理區

  35. Pingback: [转]Wordpress终极优化手册 - wzhy's blog - 我博客~我作主~~

  36. 我想请问一下,
    我那时安装后没有效果,不是即时生效的,对吧???
    试了几次,但我没有等待,不超过5分钟就已经XXX了

  37. 你说什么东西安装后没有效果?

    cache插件如果流量不大的话效果不明显的,某种程度上来说会更慢。

    静态话可能好一点,你可以这里站内或者Google 静态化

  38. Pingback: 优化Wordpress-wp终极优化手册 « 徘徊在玻璃之城

  39. Pingback: 520ava外挂网

  40. 以前使用了一个什么miniy插件,使用之后东西都不显示了,现在不敢再合并了。。。

  • 评论由多说提供支持。该系统支持使用微薄、人人网和QQ的账户登陆,由各自网站直接认证,不会泄露你的密码。
  • 登陆后可选择分享评论到所绑定的社交网络,如微薄、人人和QQ空间。
  • 评论无法修改。如需修改,请删除原评论重新提交。
  • 评论支持LaTeX代码,行内公式请用\(a+b=c\),行间公式请用\[a+b=c\]。公式只支持英文字符。
Loading...
Loading...
Loading...