也许,随着您的博客逐渐走上正轨,访问量越来越大,您便会遭遇某种“幸福的烦恼”:博客的访问速度越来越慢,等上半天网页也显示不出来或不能完全显示,甚至动辄出现“WordPress Datebase Error”,或者接到主机商的警告诸如CPU、内存等服务器资源“Exceeded Usage”等,这时,您便需要对使用的博客系统进行相应的系统优化了。
本文介绍WordPress的性能优化基本操作。
注1:从严格意义上说,首先应确定系统瓶颈出在何处,是网络带宽限制还是服务器响应到达极限,在此基础上才能有的放矢地加以优化。本文主要针对WordPress系统自身。
注2:显然,要从根本上解决这一问题,最简单的办法是将自己使用的主机升级到更高规格更高档次,毕竟,硬件与服务器自身的优化是决定网站性能的根本,比如我们之前介绍的不同档次主机在性能上的巨大差异。不过,恰当地对WordPress进行优化,则可在当前条件下最大程度地压榨出最佳的性能,以求物尽其用。
禁用不必要的WordPress插件
WordPress平台丰富的插件资源为Blogger提供了很大的方便,扩充各类功能轻而易举。但是,必须清楚的是,过多的插件会耗费相当的系统资源,同时,也必须注意到,很多插件的代码事实上执行效率极其低下。因此,在决定是否启用某个插件前,最好先问自己几个问题:
- 这个功能是必需的么?对访问用户有意义么?
- 这个功能可能通过其他方式比如说简单地修改几行代码便可实现么?
- 这个插件是实现所需功能的最佳插件么?
- 等等……
使用WP-Cache 插件与GZip
禁用不必要的插件并不意味着不使用插件
,当您的博客访问量大到一定程度,特别是存在大量的对同一页面的多次访问时, WP-Cache 插件便成为理想的解决方案。
WP-Cache 的原理简单说来便是其通过缓存机制,将相应网页中的内容保存在静态文件中,这样,当其他用户再次访问时即可直接提取缓存文件,免除了WordPress重新编译PHP代码、频繁读取数据库带来的效率低下问题,即实现类似于静态网页的效果。其对WordPress性能的提升是相当明显的。——当然,如果您的博客访问量不大,使用它反而会无端多耗费一定的服务器资源:弄不好每个用户访问时网页都要重建缓存,那就纯属画蛇添足,有点得不偿失了。
如果仅使用 WP-cache 插件仍不能有效地解决性能瓶颈,那么,不妨考虑同时启用 GZip 。理论上说, GZip 不仅可以压缩text/html,如果您的Apache支持 mod_deflate module ,所有的CSS与JavaScript文件也可同时压缩。
尽管从文档上看, WP-Cache 不能与 GZip 同时使用,不过,许多人找到了让 WP-Cache 与GZip共存的办法,在此简单介绍一下修改步骤:
- 首先在WordPress => Options => Reading 中关闭 GZip;
-
在 wp-cache-phase1.php 中找到如下行:
foreach ($meta->headers as $header) {
header($header);在其前加入:
if ( extension_loaded(’zlib’) ) ob_start(’ob_gzhandler’); -
在 /wp-content/advanced-cache.php 中找到如下内容:
foreach ($meta->headers as $header) {在其前加入:
if ( extension_loaded(’zlib’) ) ob_start(’ob_gzhandler’); - 激活 wp-cache 插件,这样,wp-cache 在工作中将自动启用 GZip 。——注:不要再至压缩Options => Reading 中将 GZip 启用,不然运行中将出现问题。
优化WordPress模板,剔除不必要的 PHP 运算
一般而言,WordPress模板开发者为适用于不同的博客,往往在模板中以最“兼容”的方式撰写代码,以一系列的 PHP 函数来调用相应的设置,但对我们自己特定的博客而言,完全没有必要执行这类函数,平白无故地让服务器进行无谓的运算。
不妨让我们用具体的例子来说明,拿WordPress自带的 Default 模板来说,打开其 header.php 文件,随处可见诸如下方的WordPress模板函数:
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats -->
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" />
这些都是固定的吧?——当然,如果您不清楚,打开自己的博客网页查看一下源代码即可——有必要让服务器在每次用户访问时还要重新执行相应的函数?不纯粹没事找事么
?
简单的解决方案便是修改模板,直接代之以相应的字符串。当然,类似的情况不仅仅存在于 header.php 文件,其他模板文件中也都有类似的部分,比如说 single.php 中,以博客学堂为例,显示的文章作者均为 BlogsDiy , 干么还非要执行 <?php the_author(); ?> 呢?
很多时候,这样简单的修改,带来的性能提升甚至不亚于启用 Wp-Cache的效果。
缩减不必要的 HTTP 请求
尽管这看起来与WordPress无关,不过,鉴于WordPress模板设计者可能更多地关注界面显示效果,很多模板在这方面存在的问题很大,特别对那些比较花哨使用图片较多的模板而言。
- 需要清楚的是,网页中所使用的哪怕极小的一张图片,在网页加载时都要进行相应的 HTTP 请求,需要服务器耗去一定的资源与时间给予响应,当网页中这类 HTTP 请求过多时,当访问量增加到一定程度,形成的集腋成裘效应不可小视。因此,尽管缩减网页中使用的图片数量或使用精简的模板。
- 对于多个网页中共同存在的JavaScript代码,不妨将其外置以提高代码复用率,建议将多个 JS 文件合并到一起,除非那样太大。
- 如果使用多个CSS文件,也不妨将其合并到一个文件。
这样,结合上述的GZip功能,会大大加速网页的显示速度。
除此之外,其他方法还包括对使用的图片进行适当的压缩等,不过,因那些与WordPress自身有点距离,不多赘述了。






当前共计13 回复 ↓
1 Cloudream | 2007/12/10 9:00 am
WP的低效还是出自结构问题,访问任何一个页面查询数据库次数都不会少于15次。
另外WP-CACHE自2.2版开始就不再兼容了。可以启用WP内置缓存 config里加入 define(’ENABLE_CACHE’, true); (其实普通模板里用处不大,自定义查询越多越好用,不过需要自己将查询结果缓存起来,这样写模板需要了解WP的运作流程)。
有兴趣讨论WP的问题的话可以联系我,WP的codex文档大部分都读过了,对起运作方式也比较了解了 ^^
我用WP做的一个站:http://www.concertogate.com.cn 很多页面用了内置缓存,不过每个页面的数据库请求还是不会少于20次。
也许唯一的王道是真静态化,其实也损失不了什么,只要插件支持AJAX就好,嘿嘿。
2 BlogsDiy | 2007/12/10 3:20 pm
To Cloudream : Wordpress内置的缓存效率不敢恭维,至于说Wp-Cache与2.3版本不兼容的问题,可以有很多解决办法啊,比如说花儿开了这篇,当然,具体如何没有试过。不过,WP-cache在2.2版上用一直是没什么问题的,这也是我没敢升级到2.3的一个原因。
至于说纯粹的静态化,是不是“损失不了什么”,恐怕很难说,也许只有当玩的网站多了各种复杂情况都遇到后才能得出客观的结论。不过,在我的潜意识中,过份强调静态化的优势似乎一直是国内编程界所推崇的,鬼子们则没这么强烈,虽然不敢评论对错,但有时确有类似于“汉语编程”那样的胡说八道之说。
3 akuii | 2007/12/10 10:49 pm
我经常郁闷了…跟他们一样是DH的服务器..可就是慢得想哭…
4 david chen | 2008/01/18 9:38 pm
发现你的主题风格很不错,参考了。
5 moon | 2008/01/19 12:40 pm
过来学习,受益了
6 大家好 | 2008/02/2 11:17 pm
好东西,用上了
7 Jone Li | 2008/02/18 11:17 pm
学习了,不错的文章
TrackBacks ↓
留下您的评论