WordPress 各种缓存插件介绍和应用

大家可能都有这样的经验,使用 WordPress 一段时间,装了一些的插件之后,博客的速度会变慢,甚至很慢,如果服器不够强劲,比如你使用的是一些 Oversell 的主机,而非阿里云Linode这样的 VPS,并且流量很大,那么你可能会噩梦相随,你会经常因为 CPU 超标,而被停掉服务。如果你的预算不够不能更换服务器,那你应该使用 WordPress 缓存插件来降低 WordPress 对服务器的资源占用。

WordPress 缓存插件有很多种,这里只给大家介绍介绍几种情况下典型缓存插件,你可以根据自己的服务器的特点给自己的 WordPress 博客选择相应的缓存插件:

WordPress 对象缓存

WordPress Object Cache(WordPress 对象缓存)是 WordPress 的默认缓存机制,它的主要目的是把负责查询或者运算的结果存储到一个对象里面,下次进行同样操作的时候,可以让直接从这个对象中取出数据,不用重复到数据库中或者其他外部网站获取数据。

文件缓存

在 WordPress 2.5 版本之前 WordPress 可以使用文件缓存,在 wp-config.php 文件添加 define('ENABLE_CACHE','true'); 即可启用。2.5 版本之后,WordPress 取消了文件缓存和 ENABLE_CACHE 这个全局常量。

但是如果你还想继续使用文件缓存,可以安装这个插件:File-Based Extension to the WordPress Object Cache。把下载下来的文件上传到 wp-content 目录下,注意不是 plugins 目录下。

文件缓存其实把 WordPress 默认的对象缓存的对象存储为文件。这样就会有一个问题,就是每次访问页面的时候,要读取多个缓存的文件,如果你服务器的硬盘速度不是很快,这样就会造成你的服务器的 I/O 拥塞问题,所以 WordPress 2.1 默认就没有开启文件缓存,2.5 更是直接取消了。

内存缓存

从 2.5 版本开始,WordPress 建议使用内存缓存,什么是内存缓存,就是把 WordPress 默认的对象缓存的对象保存到内存中去,下一次访问的时候,直接到内存中获取内容,这样就没有上面所介绍文件缓存的 I/O 操作,并且 SQL 查询也减少了很多,整个系统都变的快很多。

不过内存缓存需要你的服务器支持(一般的虚拟主机都是不支持的),目前支持内存缓存的插件有:

选择什么内存缓存插件,需要你根据你自己的服务器的配置,比如你的服务器配置了 Memcached 的 PHP 扩展,你就可以使用 Memecached 的插件。我的服务器含有 Memcached 的 PHP 扩展,这里有安装 Memecached 缓存插件的详细介绍

内存缓存和文件缓存一个相同的地方也是网站的动态内容根据功能分成很多个部分,分别对每个部分缓存,而不是把这个页面当作一个整体缓存了,所以访问一个页面还是需要从内存中读取多个内容,所有就有人开发了 Batcache 插件,Batcache 在内存中缓存整个页面,这样再次访问 WordPress 页面的时候,则直接获从内存中获取这个内存文件即可。这样就减少了程序的运行,再次降低了 CPU 使用率,也进一步加速了速度,特别是对一些流量非常高的日志来说,效果特别好。

HTML 静态缓存

但是绝大部分 blogger 使用的服务器都不支持内存缓存所需的这些 PHP 扩展或者服务端,所以我们需要用到 HTML 静态化缓存插件,这类型的插件可以把 WordPress 页面缓存一个静态的 HTML 页面存到服务器上,下次访问该页面的时候,不需要再次运行 PHP 代码,直接从服务器返回这个 HTML 文件即可,这样就大大降低了 CPU 的占用率,但是使用 HTML 静态化缓存插件,也有一个不好的地方,比如日志流量,最新日志,这些动态的内容不会时时更新,虽然我们可以通过 Javascript 等方法解决这个问题,但是对于普通用户来说还是太麻烦了。这方面插件用的最多的是 WordPress Super Cache

WP Super Cache 是目前最好用的全静态缓存插件,设置非常灵活,可以区分普通浏览用户和注册用户,并且还支持手机浏览等。这里是我对 WP Super Cache 插件的详细介绍

最新版本的 WP Super Cache 也支持内存缓存了,这样系统同时安装了 Memcached + WP Super Cache,WordPress 首先把默认对象缓存的对象存储到内存中去,并生成静态 HTML 文件,已登陆的用户从内存中获取各个缓存对象,未登录的用户直接访问静态 HTML,这样效率非常高。

总结

那么你应该如何缓存你的 WordPress,下面是我总结的经验:

  1. 选择性能优秀的 VPS,比如阿里云Linode
  2. 只使用必要的插件。
  3. 对 WordPress 进行优化
  4. 根据你自己博客的实际静态化你的 WordPress。
  5. 如果服务器支持,尽可能使用内存缓存。