WordPress缓存之一,无痛Object Cache与Batcache
听说最近很多人对WordPress的缓存插件感兴趣,那么今天开始说说这些名号里有“缓存”的插件。实际上除了这些缓存外,还有很多优化插件都有缓存机制,比如上次说的Autoptimize。缓存插件的用途一般来说有二,一是降低服务器的负载,不管是CPU占用率还是数据库查询次数,二是提高访客访问站点的速度。对于WordPress这样的几乎没什么是静态的东西来说,使用一种或多种缓存插件可能是最简单的提升访问速度和降低负载的方法。
我们经常听到或用到的缓存插件有二,WP Super Cache和Hyper Cache,它们的功能都是将你的动态页面静态化,将经常调用的页面以静态的html文件展示,而不是来一个访客“动态”生成一次页面。这种机制可以极大地降低服务器负载,特别是对于访问量很大的站点来说。这种缓存方式称之为“全内容HTML缓存”。但是这种缓存方式有一个小问题,对于页面上“必须”动态生成或实时联络的内容而言(比如侧边栏的某些挂件),静态页面意味着它们的功能失效。由此带来的问题是有些内容无法实时显示,广告无法显示等等。那有没有比较温柔的“无痛”缓存既能缓存一些内容降低负载,又能够和这些插件和平共处没准还能让我们赚点小钱呢?Object Cache是个不错的选择,当然如果你喜欢插件形式的,BatCache也可以。
把它俩放到一起说的原因是这两个小东西都基于服务器的Memcache扩展,所以如果你想使用这种缓存机制,先咨询下你的服务商是否在服务器上启用了它。国内的主机不太清楚了,至少某人的那神奇主机号称“我们的主机充分超级无敌强力秒蛋蛋推基总卡拉赞绝对毕业,所以根本不用这东西所以用啥Memcache”,国外的主机这东西一般是标配。有了Memcache这个前提,Object Cache那就是直接就用啊。
什么是Object Cache或对象缓存?它和一般生成静态HTML页面的缓存(比如WP Super Cache或Hyper Cache)有什么不同?
一般的缓存是将服务器生成的完整HTML响应进行存档,将之保存为静态的文件保存在硬盘上以供下次调用,一般来说这样的机制都会给静态文件一个有效期,在特定时间或特定动作之后,当前缓存过期并重新生成。
Object Cache则是另一种形式的缓存。它只缓存那些服务器生成上面的响应过程中创建的“数据”或对象。举个例子来说,如果一个Blog的首页有一个列表,比如最新的5个文章,友情链接,指向最新5个评论的链接等等; 服务器可以“单独”地以原始数据格式(raw data format)缓存它们,所以在未来的调用请求中,这些内容可以被一个接一个地取回。
简单来说,一般的缓存是将生成的“结果”保存起来供下次相同请求时调用,而对象缓存是将生成过程中的零件们进行缓存,下次有相同请求时无须现找零件而是即时拼装,所以也降低了服务器负载(特别是数据库请求次数)。
对象缓存比全内容HTML缓存要更灵活,因为它允许当缓存内容发生改变时,只使部分缓存时效。比如当一条新评论在你的博客上发表时,完全没必要更新最新文章列表。另外,它还可以更容易地从以往请求内容的缓存数据中拼凑出新的请求,(比如,博客“单文章”页可能也包含最新评论列表)。
所以你基本可以认为Object Cache是一个有条件的话一定必须肯定绝对要启用的东西,尽管它在WordPress 2.5及以上版本中没有默认开启,需要我们自己往里面添加点内容启用它。据我自己的测试,它和任何其他的缓存插件,不管是Hyper Cache还是WP Super Cache还是DB Cache或是Autoptimize都能够和平相处,所以,既然无痛而且确实有效,让我们都启用它吧。
原本Object Cache是WordPress内建的一个东西,但是由于种种原因在WP 2.5及以后版本中就取消了,或者说不再内建了。但是相关的API调用还在并且都能正常工作,所以我们要做的就是用一个小文件启用它。
这个小程序全称File-Based Caching for WordPress,作者是Neosmart的Mahmoud H. Al-Qudsi,文件请访问这个页面下载。WOPUS之前的一篇文章也对Object Cache做过简单的介绍。
使用方法很简单,上传object-cache.php文件到你的WordPress的\wp-content\目录下(不是Plugins目录啊~),然后同样还在wp-content\目录下新建一个名为cache的文件夹并确保文件夹可写。然后,修改你的wp-config.php文件,在define (‘WPLANG’, ‘zh_CN’); 这行后加上:
// Enable the WordPress Object Cache:
define(ENABLE_CACHE, true);
然后保存文件即可。
接下来你要做的就是多刷新几次你的博客,看看cache文件夹中是否多了些东西,那就是Object Cache的缓存文件了。另外,如果你留意你的数据库查询次数和时间的话会发现,这两个值都有非常明显的下降,这表明你的Object Cache已经正常工作了。
BatCache和Object Cache类似,同样基于Memcache扩展,但是它是以插件的形式存在的,适用于那些由于各种原因无法使用WP Super Cache等常用缓存插件的用户,大家可以到WordPress的BatCache插件页查看。我个人建议还是用上面的Object Cache,简单又省事。
Object Cache对于降低数据库查询次数的效果可以说立竿见影,如果你没有做过其他方面的优化的话,单独使用这个应该能看到非常显著的查询数下降。如果搭配另一个数据库插件DB Cache,数据库查询次数还会进一步降低。推荐大家在服务器支持的情况下都启用Object Cache。
本人严正声明:Cuptool分类/WordPress分类/COMODO分类文章均为原创,在全世界只有一个作者。本人是该分类文章的唯一合法代表。自古以来本人一直对该分类文章行使主权。该分类文章的标题出处是文章正文不可分割的一部分,任何企图转载此分类文章不留出处,或恶意采集修改该分类文章的行为,都必将遭到包括中国人民在内的全世界人民的反对!各族人民反对文章标题出处与正文分裂、维护原文统一、维护原文稳定的决心是坚定不移的,任何破坏原文完整性、恶意采集转载的图谋都是不得人心的,是注定要失败的。
如需转载请按照 署名-非商业性使用-禁止演绎方式,并请注明: 转载自作甚@ZUOSHEN.COM

Object Cache + WP Widget Cache 飘过
高射炮 ,准备,放!
除了Object Cache哪个也不能用的飘过…
偶什么都没用感觉速度就不错 人品好没办法
哈哈,强悍的RP不需要缓存~
看不懂,只会激活插件的飘过。
其实很简单的,下载一个文件上传到wp-content目录,然后再在你的wp-config.文件里加一行字就行了
我流量很小,基本不用缓存。
胡扯,我那主机也没那么说过
我就不用了哈,反正流量不大,安尔乐足够了!
用上了
生成了很多文件夹,文件夹里一大堆php和tmp文件,tag、link、mate貌似都缓存了
php和tmp怎么缓存呢?多拿的你来我这里看看速度是不是能快点?我也不知道起作用没
嗯,经鉴定,已经起作用了…你为服务器的稳定做出了自己的贡献,嗯…
Object Cache是非常强力的。。话说我用了后首页查询次数从19次降到了2次。。。
我一直很纳闷,为啥我接触过的主机都不能用wp super cache和hyper cache。。。。
=.=WP Super Cache和Hyper Cache还挑主机啊?我只知道这俩插件有可能挑主题,还没准挑有些奇怪的插件,哈哈。
准备启用下看看,阿东的主机应该支持。
好似我如今没什么缓存插件,不过生成的缓存大么?空间没那么大啊
流星天空@博客赚钱´s last blog ..Wopus的WordPress翻译错别字
真ox,直接复制你代码进去,没留神,结果刷新时候报错,再打开一看,居然复制时候还带了一行你隐藏的内容。
查询次数从0.918将为0.902,恩恩
研究下DB Cache
0.902那是速度,不是次数吧…啧啧
不大,都是点零碎东西。估计是适用性最广的缓存机制了…
启用了db cache,次数下降了,速度上升了,打开缓慢了,于是暂停了
流星天空@博客赚钱´s last blog ..Wopus的WordPress翻译错别字
这个非常好,前两天也用上了。
你的意思是说 可以与DB Cache 同时启用?
每次需要添加新鲜的小玩意我都得弄上一两天。。
我得好好研究,要知道我启用的那些大大小小插件25个。。然后又手工 别说模版了 WP的源文件我都改的面目全非,有时候连我自己都不知道哪个改了啥
查询次数从32降到了24,刷新了8次。但是未曾见到cache文件夹见到什么东西!!
嫌麻烦 不用缓存