提高WordPress性能:慎用插件

发表于2010年1月10日, 星期日此文属于 技术体会

最近Google的站长(WebMaster)工具提供了站点性能(Site Performance)功能,我上去看了一下我这个博客的性能,结果让我震惊:

On average, pages in your site take 8.5 seconds to load (updated on Jan 7, 2010). This is slower than 90% of sites.

网页的平均装载时间居然有8.5秒,比90%的网站都要慢,太可怕了,太丢人了!

image

使用Firebug可以清晰地看到网页装载各个资源花费的时间,检查了几个网页之后,发现了主要问题,不少JavaScript文件每次网页装载都要下载,没有缓存(Cache)在浏览器中。

修改.js.php文件

一般来说JavaScript文件是静态文件,在服务器上就存在一个.js为扩展名的文件中,服务器在将这些静态文件通过HTTP协议送到浏览器端的时候,会加上适当的HTTP Headers,告诉浏览器这些静态文件不会有改变,可以缓存这些内容,下次不用再发请求来要了,这个原理可参见我之前关于Cache的博客文章

但是,有时候JavaScript文件中有些内容还是需要动态产生的,常用的方式就是用PHP来产生JavaScript文件,这样的文件一般扩展名为“.js.php”,其实中间那个“.js”没什么总用,只是方便让人看清楚这个文件产生的是JavaScript,后面那个“.php”是让服务器把这个文件当作PHP代码来解释之后的结果返还给客户端。

我这个博客使用WordPress引擎,使用了几个WordPress插件(有一个插件还是我写的),都使用PHP来产生JavaScript文件,而这些JavaScript文件不会被浏览器缓存(Cache),所以每次装载网页都要到服务器端拿一次这些文件,这样自然就慢了。

用PHP产生JavaScript文件,这本来是个很巧妙的方法,但是客户端访问这些.js.php文件获得的HTTP Response中不会有让这个资源缓存的Headers,实际上,WordPress还让PHP返回的结果包含no-cache的Header,这下糟糕了,即使这些JavaScript文件永远不会变,每次网页装载都会重新去拿一次这些.js.php文件。

解决这个问题的一个快速办法,就是在这些.js.php文件中通过PHP的header函数来操纵HTTP Response的Headers,比我是这么修改我的插件的.js.php文件的。

<?php

require '../../../wp-blog-header.php';

// cache for javascript file. 

// This must be after "require wp-blog-header.php" to make it take effects.

header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");

header("Cache-Control: max-age=315360000");

header("content-type: text/javascript");

header("pragma:");

include 'wp-simple-todo.js';

?>

将这些.js.php有问题的插件修改过之后,网页装载时间大幅度提高。

忍痛干掉WordPress.com Stats插件

重新用FireBug检查一下网页资源,发现有一个从http://stats.wordpress.com来的e-201001.js文件依然是每次网页刷新都要下载一次,推迟了DomCotentLoaded事件的时间。如下图,蓝色竖线为DomContentLoaded时间点,本来网页HTML1.6秒就下载完了,但是被这个http://stat.wordpress.com/e-201001.js给堵着,到3秒之后才触发DomContentLoaded。

image

这个http://stat.wordpress.com/e-201001.jsWordPress.com Stats插件装载的,这个插件的功能是统计WordPress博客的访问量。和其他大部分插件不一样,这个插件的安装包里面没有JavaScript文件,它使用的JavaScript文件都是从站点http://stat.wordpress.com获得的,这其实挺好,所有使用这个插件的博客都共享一个JavaScript资源,相当于CDN的效果。但不幸的的是,http://stat.wordpress.com返回的JavaScript文件HTTP Response里面没有包含Cache Headers,所以非但没有提高性能,反而降低了性能。

对于这样的插件,没有好办法,我们也不能控制http://stat.wordpress.com服务器,只能将其停用了,虽然这个插件功能上还是不错,为了性能,我只能寻找其他的网站访问统计工具了。停用WordPress.com Stats这个插件之后,网页装载速度明显提高了。

image

谨慎使用WordPress插件

WordPress有超强Extensibility,所以有很多人贡献了很多的插件(Plugin),提供了很多丰富多彩的功能,但是也有不少插件在提供功能的同时,有可能伤害你网站的性能,所以,一定要谨慎选择插件,启用之前要测试一下是否对性能有严重影响。

提高网站性能,这只是一个开始,通过YSlowPage Speed可以看到这个博客的性能还是有很多可提高之处,我将在今后进一步探讨WordPress性能优化这个话题。

相关文章:

  1. 微博不等于“短小的博客”
  2. WordPress 2.9 发布
  3. WordPress插件性能优化的效果
  4. Globally Recognized Avatar:全球通阿凡达
  5. 你的浏览器能能同时保持对一个域名的多少连接?

分享到: 开心网 豆瓣网 人人网 Google书签 Del.icio.us

 

目前已有一篇评论,还有板凳可坐

  1. WordPress插件性能优化的效果 | 巴别塔上的雇工说:

    [...] 前几天发现这个博客性能很差,做了一些WordPress插件上的调整,今天再次通过Google的站长工具查看了一下,效果还是挺明显的,现在网页平均装载时间下降到2.7秒,比世界上54%的网站要快。 [...]

我来评论两句