WordPress 优化宝典

添加评论 2009年2月19日

此 WordPress 优化指南收集了许多有效的技巧和教程,来加快 WordPress 站点的访问速度。

如果你经历过 WordPress 管理面板的蜗牛速度,或遇到过“MySQL server has gone away” 的错误信息,或者打不开你的网页,或者想要提升博客的访问量,那么这个教程正是你之所需。

1. 检查网站状态

网站载入速度过慢主要都是因为网页的大小。典型网页加载包括载入图片,flash动画,视频以及 javascripts 脚本等,没想都占一定的流量。

如果想要认真解决这个问题,你最好装个 Firefox 浏览器,Firebug 扩展以及 Yslow 插件。

Yslow 模块会给你一个性能评分,评分范围是 0-100。你网站的评分目标应该是80+。

最好将你的网页大小控制在 100KB 之内。如果有可能,最好小于 50kb 。如果你的网页有太多的多媒体内容,你最好学着使用 YSlow。

学习加快网页载入速度的办法。

2. 检查(Vista)操作系统

载入你自己的网站和别人的网站速度过慢,少数情况可能是因为你的 Vista 操作系统。

如果你使用的是 Windows Vista 系统,阅读这篇文章查看诊断原因,寻求解决方案。

3. 检查你的插件

插件是导致网站速度下降的主要原因。如果你使用了太多的 WordPress 插件,而其中某个插件没有经过优化,可能就会导致速度减慢。

比如像 Popularity contests , alinks@Feed 这样的插件,都可能会导致网站速度下降。

要检查插件,先禁用全部插件,查看网站是否正常运行。如果没有问题,再逐个启用插件,查找问题所在。

找到问题所在后,你可以给插件作者写信并请他修复插件,或者寻找一个替代的方案。

4. 检查你的主题

检查网站速度过慢,如果不是插件的原因,那你应该换一个主题看看。

主题里的 function.php 也包含有与插件功能相同的代码,因此插件里可能存在的问题,主题里同样可能存在。

同时,主题里也可能带有 JavaScript 脚本或图片文件,也回导致网页速度变慢。

如果你怀疑你的主题导致网站性能下降,WordPress 自带的默认主题很适合做比较测试。

如果你发现主题导致速度下降,你可以使用 Firefox 浏览器的 Firebug 插件来进行调试。学习使用你最好的朋友,Firebug

你也可以使用这个网站来获取网站的基本信息。

5. 优化数据库表

数据库表可以定期优化,如果必要也可以修复,来进行性能优化。

我推荐使用 WP-DBManager 插件,此插件提供了数据库的全部操作功能,包括数据库的备份等。

WP-DBManager 也允许执行定时任务,可以自动完成全部工作。

此外也可以使用类似 phpmyadmin 的工具来手动优化和修复你的数据表。

6. 关闭文章版本管理

从 WordPress 2.6 开始,文章版本管理机制加入到了 WordPress 中来。比如,每次你“保存” 文章,就会在数据库保存一个版本。如果不需要这个功能,可以在 wp-config.php 文件里添加一行,此文件在 WordPress 安装目录内:

define(’WP_POST_REVISIONS’, false);

如果你已经使用这个功能一段时间,那么很可能数据库里已经保留文章的许多版本。如果你希望移除这些版本,只需执行(比如使用 WP-DBManager 插件)此代码:

DELETE FROM wp_posts WHERE post_type = “revision”;

这将会移除数据库里所有“版本”的文章,处理起来更为简单。

注意:务必小心。如果你不确定你所执行的操作,一定要保留最新数据库的备份,或者请专业人士帮你搞定。

7. 实现缓存

所谓缓存,是将每次用户请求访问的相同的信息,提前准备好。使用缓存可以加快获取信息的速度,是许多现代应用程序推荐使用的办法。

7.1 WordPress 缓存

最简单的实现缓存功能(如果你使用的是虚拟主机而不是独立服务器,这也是唯一的办法)的途径是使用缓存插件:

经常推荐使用的是 WP Super Cache 插件,很容易安装和设置

如果你使用自己的独立服务器,还有其他途径可供选择。

7.2 MySQL 优化

MySQL 可以使用自己的缓存机制来保存结果。启用和编辑 MySQL 的配置文件(通常在 /etc/my.cnf),编辑如下行代码:

query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M

重新启动你的 MySQL 服务器,将会创建16M的缓存。

要检查缓存机制是否正常运行,执行查询:

SHOW STATUS LIKE ‘Qcache%’;

执行结果举例:

Qcache_free_blocks
718

Qcache_free_memory
13004008

Qcache_hits
780759

Qcache_inserts
56292

Qcache_lowmem_prunes
0

Qcache_not_cached
3711

Qcache_queries_in_cache
1715

Qcache_total_blocks
4344

技巧 #1:如果你期望文章出现在 Digg 首页,MySQL 当前最大链接限制是导致 Digg 效应瘫痪的首要原因。

你可以在配置文件里增大这个数字到大约200左右。

max_connections = 200

这里有进一步的 MySQL 优化指南,这里还有一个。你也可以安装 mytop ,工作于 MySQL 下的 ‘top’ 命令克隆。

7.3 PHP Opcode 缓存

PHP 是解释型语言,这意味着每次 PHP 代码开始运行,都要编译成为所谓的机器码,然后由系统运行。编译过程可以通过安装所谓的机器码缓存,比如 eAccelerator ,来实现缓存。此外还有一些其他的缓存解决方案。

要安装 eAccelerator,解压缩文件,然后进入 eAccelerator 文件夹。然后输入:

phpize
./configure
make
make install

这将安装 eAccelerrator。

然后创建用于存放的临时文件夹:

mkdir /var/cache/eaccelerator

chmod 0777 /var/cache/eaccelerator

最后启用,添加到 php.ini 文件的最后(通常是 /etc/php.ini/usr/lib/php.ini):

extension=”eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/var/cache/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=””
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”0″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

这些更改会立即生效,也就是说 PHP 不需要“重新启动”。

注意 #1:WP Super Cache 和 eAccelerator 可以一起使用,来进一步改善行性能。

注意 #2:如果你想要更为顶级的性能,查看超酷的 WP Super Cache 和 eAccelerator 插件

注意 #3:你可以从命令行进行测试,查看配置文件的修改

ab -t30 -c5 http://www.mysite.com/

并比较结果。我的 VPS 服务器结果大约是 200 req/s (每秒200次请求)。

注意 #4:Apache 优化已经超过了本文的范畴,你可以在这里寻求更多的信息。深度的 apache 优化技巧在这里这里还有 vps 的技巧,以及这里 keep alives 的技巧。

注意 #5:你也可以在 Elliot Back 的网站看到更多的诀窍和诡计(同时他也玩 DOTA,多酷啊)。

注意 #6:不幸的是,如果 PHP 运行于 CGI 模式,eAccelerator 无法工作。你可以尝试使用 fasgcgi,可以与 suExec 和 eAccelerator 一起工作。

8.”MySQL server has gone away” 问题

This WordPress database error appears on certain configurations and
it manifests in very slow and no response, usually on your admin pages.

这个 WordPress 数据库错误在使用某些数据库配置时出现,该配置导致加载速度变慢,服务器失去响应,经常出现在管理页面。

MySQL 所引起的相关问题已经在这篇文章里有详细阐述。

这个问题早已存在,但只有升级 WordPress 才能修复这个问题。希望能够得到进一步的研究,在 WordPress 的核心代码里解决这个问题。

9. 修复无法发布文章的问题

如果你遇到过 WordPress 管理面板打开一半,不能发布或者更新文章,你可能是遇到了 mod_security 的阻碍。

ModSecurity 是 Apache 增强网站安全性,防止系统入侵的模块。然而,它会将 WordPress 正常的 MySQL 操作当作入侵,并将之加入到黑名单,这将会导致网站非常慢或者网站失去响应。

要测试是否存在着重情况,查看 Apache 的错误日志,例如:

tail -f /usr/local/apache/logs/error_log

并查找类似的代码:

ModSecurity: Access denied with code 500 (phase 2) … [id “300013”] [rev “1”] [msg “Generic SQL injection protection“] [severity “CRITICAL”] [hostname  www.prelovac.com”] [uri “/vladimir/wp-admin/page.php”

这是告诉你因为触犯了安全规则 300013 而拒绝访问此页面。 修复的办法是将这个页面添加到网站的白名单中。

办法是,编辑 apache 配置文件(比如 /usr/local/apache/conf/modsec2/exclude.conf)并添加如下代码:

<LocationMatch “/vladimir/wp-admin/page.php”>
SecRuleRemoveById 300013
</LocationMatch>

这样就将你的站点添加到此安全规则的白名单中,你的网站也就会继续正常工作了。

10. RSS Pings 和 Pingbacks

WordPress 变慢也可能是因为文章中包含的 rss ping 和  pingback 超出时间。

WordPress 默认将会在你的 Ping list (在 设置 –> 撰写 面板里)中的 ping 服务器,如果其中一个超出响应时间,就会降低整个过程。

第二个原因是文章的 pingbacks ,WordPress 机制会通知文章里所有链接到的站点。你可以在 设置-> 讨论 里取消选择“尝试通知文章中链接到的其它博客(会降低文章发表的速度)”。

试试清除 ping list 并禁止 pingbacks 看看是否有助于提高发表文章的速度。

以下优化页面载入速度的常规法则

11. 使用子域名分担负载

大多数浏览器都会同时同一个域名下载 2-4 个文件。如果你将文件挪到不同的域名(子域名也可以),浏览器同时下载的文件就不止是 2-4 个。

将你主题里的图片放到子域名里是个很不错的主意。我已经创建了 demo.prelovac.com/images 并将我的主题文件放在那里。我修改了主题里的 style.css 并使用主题文件新的完整网址。搞定!

12. 减少 HTTP 请求次数

你可以减少图片数目(或将所有的图片都放在一个大的图片中,并通过css来进行定位)、减少 javascripts 脚本、减少 css 文件(通常意味着减少插件数目)等途径,来降低 HTTP 请求的次数。

使用 PHP speedy plugin 插件可以有明显的改善,该插件可以将所有的 Javascript 脚本和所有的 css 文件合并为一个大文件,将降低 HTTP 请求的次数。PHP Speedy 插件的最大缺点是并不一定与所有插件 100% 兼容。

你也可以看看 CSS Sprite generator 将你的图片和放到统一恶搞图片上,然后使用 CSS 定位显示图片。这样也将明显减少 http 请求的次数。

13. 使用 apache .htaccess 压缩内容

如果你有自己的服务器,你可以选择使用 gzip 压缩内容传给浏览器。这样将会明显降低载入时间,因为大部分 html 都有很好的压缩效果。

添加以下代码到 .htaccess 文件

<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/x-httpd-php application/rss+xml application/atom_xml text/javascrip</IfModule>

14. 创建有效期限页眉

有效期限页眉告诉浏览器它的内容将在缓存里保存多久。大部分网站的图片永远不会修改的,因此告诉浏览器在本地缓存是一个很好的办法。

这里是一份推荐的设置

Header unset PragmaFileETag NoneHeader unset ETag   # 1 YEAR<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">Header set Cache-Control "public"Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"Header unset Last-Modified</FilesMatch>   # 2 HOURS<FilesMatch ".(html|htm|xml|txt|xsl)$">Header set Cache-Control "max-age=7200, must-revalidate"</FilesMatch>   # CACHED FOREVER# MOD_REWRITE TO RENAME EVERY CHANGE<FilesMatch ".(js|css)$">Header set Cache-Control "public"Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"Header unset Last-Modified</FilesMatch>

使用 缓存性能引擎 来检查你的缓存配置。

15. 使用头像缓存

许多博客使用头像功能,这个小图片显示在评论旁。然而头像有两个不易于站点优化的缺点:

  • 每个头像图片都是一个 HTTP 请求,即使是相同的图片(如果页面包含有100条评论,那就有100此额外的HTTP请求)
  • 头像图片不能包含在有效期限页眉中。

我们能做的是创建本地头像缓存,这样图片可以缓存在我们网站上。将头像图片缓存到一个独立的子域名是个聪明的选择(参考第11条)。

我使用 Zenpax.com 插件,可用来本地缓存头像。

16. 使用 smush.it 优化图片

优化图片(使用小图)可以明显地减少加载网页时间,是许多人容易忽略的。

如果你打开一个网站,点击浏览器的一个按钮就可以获得优化到一个独立 zip 文件内的的所有图片,想想看是不是很棒?感谢 smush.it 和它的 Firefox 插件让这一切变成现实。它的效果实在令人惊讶!

17. CSS 在前,JavaScript 在后

将 CSS 文件放在网页顶部确保他们可以优先载入是一条黄金定律。JavaScript 文件应该放在网页顶部(如果可能的话)。我开发了一个简单的插件,可以将正确注册的 JavaScript 文件移到网页底部。这个插件叫做 Footer javaScript

结论

基于各种因素,现代网络服务器和网站都已经迅猛发展。

本文介绍的优化办法,覆盖了从系统级的 apache, PHP, MySQL 的修改到 WordPress 设置等多个方面。

我希望这些优化指南可以帮助你建立一个迅速快捷的 WordPress 站点。


欢迎转载,转载请注明: 转载自 网贝WebBeta

本文链接地址: WordPress 优化宝典

  1. 2009年2月23日 at 21:01 | #1
    111

    翻译得不错!

  2. 2009年6月10日 at 10:11 | #2

    学习了。

  1. 还没有 trackbacks
订阅评论