优化Wordpress-wp终极优化手册
更新:关于wp-cache的优化,请参见本站新作:
优化WP-Cache:Wordprss优化手册(2)
Wordpress的功能非常强大,诸多的插件、花哨的界面,使得它的读取速度也大大降低。因此,如何优化以加快访问者的浏览速度便成了wper们思考的问题。我将诸多高手的方法整理总结了一下,汇成此文,希望能对大家有所帮助。 (建议将WP系统更新至2.1.2 以上)
- 优化所有的图片(images):
图片其实是影响网页读取速度的关键,稍大一些的图片就可能达到100K;因此,在上传自己的图片之前,务必用Photoshop的"保存至网页"(save for web)功能,对图片进行优化。(例如,保存成GIF, PNG格式等等) - 关闭一切不必要的插件(plugins):
在安装插件之前,首先问一下自己,你是否必须要此插件。不要安装UTW之类的超大插件,尽可能的降低插件数量。 - 开启WP自带的缓存(Cache)功能:
- 打开WP根目录下的wp-config.php文件,在最后一行之前添加 define('ENABLE_CACHE',true);
- 将WP-content目录下的cache目录属性改为777,以保证系统能够写入cache。
- 如果您的blog日访问量在200以上,建议安装WP-Cache插件,否则不推荐使用。
-
让WP-Cache也用上Gzip:如果你安装了WP-Cache,一定知道WP-Cache要求必须关闭WP的内置GZip功能,但是我们可以在wp-cache-phase1.php中添加代码来实现Gzip压缩功能。
打开wp-cache-phase1.php,大概在35行左右找到如下代码:foreach ($meta->headers as $header) {
header($header);在此代码前添加下面的代码:
if ( extension_loaded('zlib') ) ob_start('ob_gzhandler');
-
合并JS和CSS文件:不少插件都有自己的JS文件,系统在读取这些文件时候会产生大量的http requests,产生的延迟约为0.2秒/个。因此将所有的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代码最好放在文件最后。 - 压缩代码:
- 在管理界面的 Options->Reading选项中,开启WP自带的压缩功能(WordPress should compress articles (gzip) if browsers ask for them)
- 利用CSS Tweak压缩CSS代码,注意。为了方便自己编辑,最好保留一份未经过压缩的代码。
- 利用Shrinksafe 压缩JS代码,同样的,最好保留未经过压缩的JS代码,以便将来更改时候便于阅读。
- 静态化处理:因为首页被浏览的几率大,所以我这里只对首页做初始化。其实这个想法和用WP-Cache差不多,所不同的是 WP-Cache生成缓存页面是靠浏览完成,而我说的方法却是由服务器来完成。具体见我自己写的插件。首先,你需要安装WP-Cron插件,该插件的作用是可以定时让服务器自动运行。具体的配置方法见它的说明文件。你所要做的是让系统每15分钟自动运行如下的程序:
<?php
function wwwcopy($link,$file)
{
$fp = @fopen($link,"r");
while(!feof($fp))
{
$cont.= fread($fp,1024);
}
fclose($fp);
$fp2 = @fopen($file,"w");
fwrite($fp2,$cont);
fclose($fp2);
}
//Example on using this function
wwwcopy("您的动态网页(如http://blog.znsunimage.com/index.php)", "放置静态网页的绝对地址(如/home/znsunima/public_html/wordpress/index.html)");
?>记住要把index.html的属性设置成666,该程序的作用是每15分钟自动读取index.php并将其写入到index.html中,这样结果就是别人访问你的网站时候,会直接先读取静态的首页,大大加快了速度。
-
利用Gzip对css、js还有html文件进行压缩:
这步其实和第五步有些重复,因为gzip的压缩比很好,以至于我们可以不用预先压缩css和js代码就可以达到很好的压缩比。
首先建立一个文件style.css.php,放在自己的theme目录里面。然后在header.php文件中把读取style.css改为读取style.css.php。
随后在style.css.php文件添加如下代码:<?php
$file = "css文件绝对路径(请自行更改)";
if(extension_loaded('zlib')){ob_start('ob_gzhandler');}
header("Content-type: text/css");
# echo the file’s contents
echo implode(", file($file));
if(extension_loaded('zlib')){ob_end_flush();} ?>js文件的压缩方法相同,把all.js改名all.js.php,然后将上面要添加的代码中的text/css改成text/javascript即可。
而html文件,可以用rewrite的方法,比方说我的index.html事实上是利用php读取的index2.html规则,请在.htaccess文件中添加如下代码:
RewriteRule index.html /readhtml.php?fn=index2.html [L]
readhtml.php文件的内容如下:<?php
if(extension_loaded('zlib')){ob_start('ob_gzhandler');} header("Content-type: text/plain");
$file = "安装wp的绝对路径".$_REQUEST['fn'];
# echo the file’s contents
echo implode(", file($file));
if(extension_loaded('zlib')){ob_end_flush();}
?> -
利用Image Map减少meta部分的image读取量:
这个在Paul的网站上有详细的叙述。把一些常用的meta部分的image用一个大的image来代替,并且在css文件中设置为背景。然后利用div的控制实现鼠标的悬停指向。
这里以我siderbar下方的meta图标为例。我使用的Two Columns的模版,因此,除了index.php文件外,还会有一个siderbar.php文件,meta信息都会放在这个文件中。一般我们在 meta部分会添加不少图标,所以我们可以截图后粘贴到photoshop,然后利用Slice Tools对图片进行分割,分割完成可在每个Slice上右击鼠标,读取Slice的属性,记下 下图中的X,Y,W,H坐标值。

接着建立了一个menu_meta:#menu_meta {
background-image: url("http://www.znsunimage.com/images/gif/meta.gif");
height: 141px;
margin-left:-2px !important;
position: relative !important;
padding-top: 0px;
width: 118px;
border: 0px !important;
} /* 请注意其中的position属性不要修改。 */然后,定义一个 a.rss,这个class用来定义鼠标在RSS2.0图标上方的操作。
a.rss {
position: relative;
display: block;
background: transparent;
left: 0px; /* 填入Photoshop中所读取的X值 */
top: 0px; /* 填入Photoshop中所读取的Y值 */
width: 85px; /* 填入Photoshop中所读取的W值 */
height: 20px; /* 填入Photoshop中所读取的H值 */
cursor: pointer;
border: 0px;
text-indent: -9900px; /* 将文字隐藏*/
}随后,我们就可以在sidebar.php添加如下的信息,注意其中不同的class,如sitemap,sitemeter都要如上面所述,在css文件中一一定义。
<div id="menu_meta">
<a class="rss" href="<?php bloginfo('rss2_url'); ?>" title="<?php _e('Syndicate this site using RSS'); ?>">RSS</a>
<a href="http://s22.sitemeter.com/stats.asp?site=s22zhenning" class="sitemeter" title="Site Meter">sitemeter</a>
<a href="http://blog.znsunimage.com/sitemap.xml" class="sitemap" title="Site Map">sitemap</a>
<a href="http://www.spreadfirefox.com/?q=affiliates&id=154085&t=206″ class="firefox" title="Firefox Flicks!">firefox</a>
<a title="Creative Commons License" rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/" class="cc">cc</a>
<a href="http://wordpress.org/" class="wp" title="<?php _e('Powered by WordPress, state-of-the-art semantic personal publishing platform.'); ?>">wp</a>
</div>大功告成。上传更改过的所有文件,重新读取,会发现原来meta的诸多图标被一个大图标所代替,但功能效果和原来类似。按照每个image所产生的http requests约为0.2s计算,这样的方法可以节约1s的时间。
阅微堂还给出了一个全站静态化的绝好方法,值得借鉴,尤其是java读取cookie的方法,相信对不少人都会有用。
还有一些方法或需要服务器根目录的读写权限,或者需要数据库的root权限,不具有普遍性,就不列出了。
参考资料:
1. 阅微堂:加快WordPress的页面生成和载入速度
2. 4+1 Ways to Speed Up Wordpress With Caching
3. 5 Ways to Speed Up Your Site
At 2007.03.14 22:15, Zhang said:
把WordPress全部静态化是最好的,像我现在一样,所有文章比如525.html是真是存在的,而不是一个伪静态URL。
SUN
[Reply]
At 2007.03.15 14:04, 阅微堂 » WordPress全站静态化 said:
[...] 这次系统升级是看到关于本站缓存机制的说明这篇文章后做出的,不过所用方法不同。另外还有一篇WordPress的优化手册也值得一看,特别是最后的image meta部分。 [...]
[Reply]
At 2007.03.16 14:06, Angelivedt said:
你好,对于你说的的第三种办法我不大懂,麻烦你能联系下我么?邮箱联系,谢谢
[Reply]
At 2007.03.16 17:37, SUN said:
http://blog.znsunimage.com/2007/03/16/509
我给出了自己做的plugin,你可以试试。
[Reply]
At 2007.03.19 11:38, wp-cache插件让你的blog提速 at SilverFox’s Blog said:
[...] > WordPress...全站静态化 徘徊在玻璃之城 > 加速Wordpress-终极优化手册 Weblog > [...]
[Reply]
At 2007.03.27 14:49, 网站申请 said:
菜鸟学习中,^_^
[Reply]
At 2007.03.31 13:54, Shall We Zen » links for 2007-03-28 said:
[...] 加速Wordpress-终极优化手册 « 徘徊在玻璃之城 (tags: wordpress 缓存 cache) [...]
[Reply]
At 2007.04.16 16:35, 周易 said:
[Reply]
At 2007.05.07 08:29, links for 2007-05-07 | Temple said:
[...] 优化Wordpress-wp终极优化手册 « 徘徊在玻璃之城 (tags: Wordpress 静态化 优化) [...]
[Reply]
At 2007.05.09 16:16, 5dig.net said:
这篇文章不错,
[Reply]
At 2007.06.14 14:40, 显示WordPress页面提交SQL查询语句和时间 ∈ 泊客Myheimu said:
[...] 效果果然明显!查询次数立即降到16次,而Cold/Warm/Miss:38/864/0,太棒了!哥哥yskin说自己榨干了,也只不过是18次查询11个miss罢了。可是我的查询时间仍然没有减少!依然在1.75s左右,可是通过前面的方法,把所有项加起来也不过0.15s,不知道究竟是怎么回事。这里的“优化WP攻略”中要合并压缩js和css的做法有点“骨灰”,虽然K2那么乱七八糟的五六个Js经常招人骂,但是还是可以承受的,而css压缩我比较赞同,但仍不可以过火,如果希望把所有css都放在一起,那么就对修改和更新十分不利,除非你的网站一年内不会改变一点点的样式。而我前几天把date-stamp插件的css放到trueblue的custom.css里(当然要在插件的php文件里去掉在页首加入css声明的语句),一共才十几行嘛,后来觉得那个date-stamp插件实在有点小题大做,索性在theloop.php里直接写了段类似的php代码代替之。还有coolcode和pagepost几个插件的css全部给我合并到了custom.css里,不过千万注意其中引用图片的相对链接需要修改。 [...]
[Reply]
At 2007.06.22 19:05, 合并css和js文件,加快浏览速度 - Ks Home said:
[...] 虽然现在本站首页、独立文章页等都已经静态化,但由于服务器在美国的DH上,所以有的时候响应速度还是有点让人受不了。在网上搜了很多关于Wp优化的文章,这里推荐一篇优化合集:优化Wordpress-wp终极优化手册。其实很早就看了这篇文章,但是一直懒得动手。 [...]
[Reply]
At 2007.08.14 17:12, 优化WP-Cache said:
[...] 加载WP-Cache插 件是wordpress中最为常用的一种优化方式,同时,php程序本身也提供了一种非常强大的优化方式,也就是Gzip压缩传输。非常遗憾的是,WP- Cache插件要求关闭wordpress的内置gzip压缩功能。因此,我们要实现的就是在WP-Cache中使用Gzip的功能。这一思路的实现,我 在终极优化手册中已经提到: [...]
[Reply]
At 2007.08.17 06:28, WordPress插件精简调用(推荐) at E-space said:
[...] WordPress之所以这么受欢迎,这和它模板和插件资源众多是离不开的。一般的WordPress用户基本上都至少会装4,5个插件,而像老用户则有可能会装10多个甚至20之多。其中的某些插件会在Blog页面的head部分加入自己的js或者是css代码来实现特有的功能。以前曾经有人写过方法来合并JS和CSS文件来加快调用速度,1, 2, 3。 [...]
[Reply]
At 2007.08.17 14:13, WordPress插件精简调用(推荐) at 小末|有标题文档 said:
[...] WordPress之所以这么受欢迎,这和它模板和插件资源众多是离不开的。一般的WordPress用户基本上都至少会装4,5个插件,而像老用户则有可能会装10多个甚至20之多。其中的某些插件会在Blog页面的head部分加入自己的js或者是css代码来实现特有的功能。以前曾经有人写过方法来合并JS和CSS文件来加快调用速度,1, 2, 3。 [...]
[Reply]
At 2007.08.26 23:27, 菠萝艾蔻 » 优化WP-Cache said:
[...] 本文是加速Wordpress-终极优化手册一文的补充,强烈建议您先参考终极优化手册后再看此文。 ♣ [...]
[Reply]
At 2007.09.10 06:26, p268.com said:
利用Gzip对css、js还有html文件进行压缩,学习了
[Reply]
At 2007.09.14 13:17, Chenta’s Scrapbook » links for 2007-09-14 said:
[...] 优化Wordpress-wp终极优化手册 « 徘徊在玻璃之城 (tags: WordPress blog tips) [...]
[Reply]
At 2007.09.22 08:49, 优化WP-Cache:Wordperss优化手册(2) at RedFoxC said:
[...] 加载WP-Cache插件是wordpress中最为常用的一种优化方式,同时,php程序本身也提供了一种非常强大的优化方式,也就是Gzip压缩传输。非常遗憾的是,WP-Cache插件要求关闭wordpress的内置gzip压缩功能。因此,我们要实现的就是在WP-Cache中使用Gzip的功能。这一思路的实现,我在终极优化手册中已经提到: [...]
[Reply]
At 2007.09.28 16:05, 有田 李 said:
呵呵,整理得不错!
[Reply]
At 2007.10.06 22:14, 外汇人博客 said:
我的博客SEO差不多搞定
[Reply]
At 2007.10.08 17:00, Wordpress插件:WP-Cache_缓存插件 | 帕兰的口袋 said:
[...] 优化WP终极优化手册-徘徊在玻璃之城 [...]
[Reply]
At 2007.10.12 08:37, xiaonei said:
我发布文章时感觉很慢...真晕...

[Reply]
At 2007.10.15 21:50, 快乐 said:
不错,学习了,
[Reply]
At 2007.10.16 17:18, caocao said:
不错,试试你的做法。
[Reply]
At 2007.12.11 05:02, 月光博客的网摘 » Blog Archive » links for 2007-12-10 said:
[...] 优化Wordpress-wp终极优化手册 Wordpress的功能非常强大,诸多的插件、花哨的界面,使得它的读取速度也大大降低。因此,如何优化以加快访问者的浏览速度便成了wper们思考的问题。我将诸多高手的方法整理总结了一下,汇 (tags: wordpress tips) Explore posts in the same categories: 网摘 [...]
[Reply]
At 2007.12.11 06:01, links for 2007-12-10 « williamlong’s blog said:
[...] 优化Wordpress-wp终极优化手册 Wordpress的功能非常强大,诸多的插件、花哨的界面,使得它的读取速度也大大降低。因此,如何优化以加快访问者的浏览速度便成了wper们思考的问题。我将诸多高手的方法整理总结了一下,汇 (tags: wordpress tips) [...]
[Reply]
At 2007.12.20 20:43, hiswing said:
总结的非常好。
学习了。
[Reply]
At 2008.01.29 13:32, Burwood » 清理主题文件,加速Wordpress said:
[...] 想进一步优化Wordpress的朋友还可以参考下面两篇文章介绍的方法 : 《优化Wordpress-wp终极优化手册》、《加快WordPress的页面生成和载入速度》。 [...]
[Reply]
At 2008.03.07 17:24, Jone Li said:
利用Image Map减少meta部分的image读取量:
谢谢提醒,马上去掉
[Reply]
At 2008.03.30 21:06, 优化Wordpress-wp终极优化手册 at 星娱乐快报 said:
[...] 优化Wordpress-wp终极优化手册 [...]
[Reply]