WordPress性能优化
也许,随着您的博客逐渐走上正轨,访问量越来越大,您便会遭遇某种“幸福的烦恼”:博客的访问速度越来越慢,等上半天网页也显示不出来或不能完全显 示,甚至动辄出现“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自身有点距离,不多赘述了。