WP Super Cache是优秀的WordPress静态缓存插件,它为WordPress站点生成静态的HTML文件。当浏览者访问网站的某个页面时,服务器可以直接将预先缓存好的HTML页面显示给他,而不需要费时费力地运行PHP来即时生成HTML文件,既加快了页面访问速度,又减少了服务器CPU占用。
页面访问速度的加快,不仅有助于提高用户体验,也有助于提高网站的SEO排名。因此:如无特殊原因,所有的WordPress网站都应该开启静态缓存。
本篇就来介绍一下WordPress生态中最优秀的页面静态缓存插件:WP Super Cache。
想搭建自己的内容网站?来看看这些「内容产品案例」吧~
1. WP Super Cache安装与启用
1.1 安装
WP Super Cache是免费插件,直接在WordPress站点后台“插件-安装插件”页面,搜索“WP Super Cache”进行安装即可。
1.2 启用前准备
启用WP Super Cache插件前,需要保证WordPress站点使用了“固定链接”。
(在WordPress站点后台“Setting-固定链接”页面可以查看固定链接是否开启)
1.3 启用
点击“启用”启用插件,然后进入“Setting-WP Super Cache”页面进行插件设置:
(1) 选择“通用(Easy)”选项卡;
(2) 在“缓存功能(Caching)”中,选择“启用缓存功能(Caching On)”;
(3) 点击“更新(Update Status)”保存设置。
1.4 测试
(1) 点击“缓存测试(Cache Tester)”中的“测试缓存(Test Cache)”按钮,这将会多次抓取网站首页并比较每次的时间戳;
(2) 等待测试完成,若显示“两个页面的时间戳相符!(The timestamps on both pages match!)”,则说明缓存已成功启用。
2. WP Super Cache缓存模式
最新版本的WP Super Cache实现页面缓存有2种方式,区别主要在于将页面访问请求转向(Redirect)缓存文件的原理不同:
简单模式
这是作者推荐使用的模式,当有页面访问请求时,需要运行WP Super Cache插件将页面访问请求转向对应的缓存文件。此模式需要运行WordPress插件,即运行PHP脚本。
- 基本接近“专家模式”的缓存速度
- 使用PHP实现静态HTML文件
- 这种模式可以保持部分页面仍显示动态文件
专家模式
这种模式下,WP Super Cache插件预先将页面转向规则写入Apache服务器的.htaccess文件,当服务器收到页面访问请求时,直接转向对应的缓存文件(绕过WordPress程序,即不需要运行任何PHP脚本),因此速度较快。
- 速度最快的页面缓存模式
- 使用Apache mod_rewrite模块(或其他类似模块)实现静态HTML文件,完全绕过PHP
- 需要修改WordPress根目录的.htaccess文件(此文件若修改不当会造成网站严重问题)
3. WP Super Cache缓存工作机制与自定义配置
WP Super Cache插件的缓存工作机制是先为网站页面生成缓存文件,并通过PHP脚本(简单模式)或.htaccess文件(专家模式)将页面访问请求转向缓存文件,从而实现页面的静态化。
同时,通过在适当的时机删除和重新生成缓存文件,来实现页面内容的更新。
3.1 缓存文件的生成
默认情况下,WP Super Cache并不会为网站的所有页面都生成缓存文件,缓存文件的默认生成机制是:
当某个网页被浏览时,若该网页没有缓存文件,则为其生成缓存文件。
也就是说,当某个网页第一次被浏览时,页面仍然是由服务器即时生成的。与此同时,服务器会生成该页面的缓存文件,之后,再有浏览者访问该网页,则会转向缓存文件,直至缓存文件被删除。
3.1.1 已被接受的文件名和拒绝的URI(Accepted Filenames & Rejected URIs)
这部分设置用来指定网站不想被缓存的页面,可以:
- 勾选不想被缓存的页面类型(如Feeds、搜索页面等)
- 指定不想被缓存的页面的URL关键词
- 指定虽然符合上述规则,但仍允许缓存的页面的文件名
此功能主要用于购物车、结账、帐户信息等页面,一些主流的插件可能已经有相关设置阻止WP Super Cache缓存某些页面。比如,WooCommerce和Easy Digital Downloads插件默认会阻止WP Super Cache缓存购物车、结账和账户详情页面。另外,许多购物车组件会使用Ajax实现,这样即使使用了缓存页面也可以获得动态数据。
如果网站确有不想被缓存的页面,建议站长自行检查,确保这些页面不会被缓存。在未登录状态下,使用浏览器查看这些页面的源代码,如果源码底部没有WP Super Cache相关内容,则说明网页没有被缓存(应该连续查看至少2次,确保不是因为缓存文件尚未生成)。
3.1.2 已拒绝的用户代理(Rejected User Agents)
用户代理(User Agents),简称UA,使得服务器能够识别访问服务器的客户端的信息;搜索引擎、爬虫等访问网站时,也会发送特定的UA。
此功能是指:WP Super Cache插件不会为这些UA缓存页面,即当这些UA(搜索引擎蜘蛛、爬虫等)访问网站页面时,即使该页面没有缓存文件,也不为其生成。
删除这些用户代理,可以使搜索引擎爬取网站时,也为网站生成缓存文件,这样当真实用户访问时,就可以直接使用缓存文件了。但如果网站页面较多,而实际有用户访问的页面较少时,这样做会缓存不必要的页面,反而会浪费服务器资源。站长可根据网站实际情况选择是否删除这些用户代理,或者通过反复测试找到适合网站的设置。
注意:此功能并不禁止这些UA访问缓存文件,如果某页面已有缓存文件,那么这些UA的访问请求仍然会被转向缓存文件。
3.2 缓存文件的删除(Garbage Collection)
根据插件设置的不同,WP Super Cache会在多种时机删除特定的缓存文件:
- 文章或页面被更新时,会删除该文章或页面对应的缓存文件。(默认)
- 文章被评论后(若评论需要审核,则在审核通过后),删除该文章和相关的缓存文件。(默认)
- 缓存文件到期后,被“垃圾回收器”删除。(视“垃圾回收器”设置而定)
- 被“预缓存”功能删除。(视“预缓存”功能设置而定)
- 当有新文章或页面发布,或者旧的文章或页面更新时,删除网站所有的缓存文件。(需在高级设置中开启)
某页面的缓存文件被删除后,该页面下次被访问时,又会以该页面的最新状态生成新的缓存文件,所有的更新就会体现出来。
同时,插件还有一些设置可以停止某些情况下删除缓存文件:
- 文章被评论后(若评论需要审核,则在审核通过后),只删除该文章的缓存文件,而不删除相关页面的缓存文件。(需在高级设置中开启)
- 文章被评论后,连该文章的缓存文件也不删除。(需要启用“锁定(Lock Down)”功能,主要用于网站流量高峰降低服务器压力)
3.3 垃圾回收器(Garbage Collection)
WP Super Cache可以设置缓存文件的到期时间(缓存超时时间),缓存文件到期后,会被定期运行的“垃圾回收器”删除。
缓存超时时间(Cache Timeout)可以自定义,以秒(s)为单位,数值应该根据网站的具体情况来设定,过短则总是需要重新生成,相当于没有缓存;过长则可能占用大量服务器空间。一般来说:
- 如果网站页面较多(1000以上),且流量较大,可设定较短的到期时间。因为网站流量较大,比如10分钟内同一个页面有100次访问,即使设置10分钟的到期时间,那么除了第1个访问页面的浏览者外,之后99个浏览者的访问请求都会被转向缓存文件。而且10分钟就清除一次缓存文件,也不会导致过高的服务器空间占用。
- 如果网站页面不多(1000以下),或流量不大,可设定较长的到期时间。这样可以最大化利用缓存文件,且因为网站页面不多(或页面多但流量不大),虽然到期时间较长,也不至于生成过多的缓存文件占用服务器空间。
除了“缓存超时时间”外,垃圾回收器还需要设置运行计划,以删除到期的缓存文件。可以设置定时运行(Timer),也可以指定运行时间(Clock),还可以勾选运行时邮件通知。站长在理解各项参数后,可根据自己网站和服务器情况进行设置。
总之,垃圾回收器用于平衡“缓存文件使用效率”和“服务器空间占用”之间的矛盾,站长可根据网站和服务器的情况设置各项参数,以达到最优状态。
注意:缓存文件到期后,在被“垃圾回收器”删除之前,仍然会被浏览者访问。只有在被删除后,缓存文件才有可能重新生成。
3.4 预缓存
预缓存功能,是指不依靠用户访问页面来生成缓存文件,而是直接由插件为网站页面生成缓存文件。
预缓存后,即使某页面是第一次被访问,仍然可以直接转向缓存文件,提高页面加载速度,这对于流量很小的新站非常有用。另外,因为搜索引擎抓取网站时也会被转向缓存文件,所以预缓存会有助于提升搜索引擎排名,因为网站加载速度也是影响SEO的一个因素。
3.4.1 预缓存机制
预缓存运行时,插件会为网站所有需要预缓存的页面生成缓存文件,已有的缓存文件会被删除后重新生成。定期运行预缓存,就可以为网站新增的页面生成缓存文件。
3.4.2 运行周期
运行周期的设定主要考虑网站新页面的产生速度和服务器压力之间的平衡:新页面产生后,如果没有被访问,则只有等到下次预缓存功能运行时才会生成缓存文件;鉴于此,运行周期应该与新页面的产生频率相关。但是如果网站页面数量过多,频繁预缓存会造成服务器压力增大。站长应该根据网站的情况,设定合适的运行周期。
3.4.3 预缓存模式
开启预缓存后,建议勾选“预缓存模式(Preload mode)”。勾选后,垃圾回收器功能将被停止,避免删除预缓存生成的缓存文件。
3.4.4 预缓存页面类型
预缓存功能默认只缓存已发布的文章(Posts)和页面(Pages),如果网站页面数不多,还可以选择缓存标签、分类等更多页面。
注意:
- 保存预缓存设置后,必须点击“立即预加载缓存(Preload Cache Now)”来启动功能,否则预缓存功能仍然不会启动。
- 开启预缓存功能后,文章、页面更新或产生评论时,仍然会删除相关页面的缓存文件,保证变更页面的更新。
4. WP Super Cache插件杂项&高级设置
接下来介绍WP Super Cache插件“高级(Advanced)”选项卡中的一些设置,站长可根据网站的具体情况进行设置,包括“杂项”和“高级”两部分:
4.1 杂项(Miscellaneous)
4.1.1 不要为已知用户缓存(Don’t cache pages for known users)
勾选此项,可使网站登录用户的访问请求不会被转向缓存文件,而从数据库即时生成最新版本的页面。这会使他们访问网站的速度变慢,但可以保证网站的管理员和工作人员可以看到网站文章、页面等内容的最新版本。
4.1.2 不要为GET请求缓存(Don’t cache pages with parameters)
此项是指不对带参数的页面进行缓存,类似“www.example.com/?x=y”这样的页面,就是带参数的页面。
以“www.example.com”为例:
www.example.com?x=1
www.example.com?y=2
www.example.com?x=1&y=2
www.example.com?y=2&x=1
以上URL都是同一个页面,但会产生4个缓存文件。带参数的URL的产生可能是网站功能需要,也可能是访问者访问时自己加上去的,并不完全由网站方控制。缓存带参数的页面,主要问题是会造成缓存文件数量过多,对服务器资源(储存缓存文件的硬盘空间,生成缓存文件的CPU和内存占用等)是很大的消耗。
站长应根据网站的情况选择是否勾选此项,如果网站功能不需要参数,则可以直接勾选,不对带参数页面进行缓存;如果网站功能确实需要参数,且缓存这些文件确有意义,则可以在考虑服务器资源的情况下自行选择。
如果网站固定链接类型为:http://example.com/?p=N,则勾选此项会导致无法缓存文章。
4.1.3 压缩页面以便让来访者更快浏览(Compress pages so they’re served more quickly to visitors)
若勾选此项,当访问者访问网站时,服务器不会直接返回HTML代码,而是会生成一个.gz压缩文件,并将其发送给浏览者的浏览器。从服务器资源角度来说,这会提高CPU占用降低带宽流量,站长可以根据自己的情况选择是否勾选。
更重要的是,这样做可以提高页面访问速度,进而提高SEO排名,建议勾选。
4.1.4 缓存包含页面内容的HTTP头(header)文件(Cache HTTP headers with page content)
此项的中文翻译不准确,不是缓存“包含页面内容的HTTP头”,应该是“缓存页面内容时一并缓存HTTP头”。如果网页使用插件生成额外的HTTP头(比如用于安全性或功能性的),可勾选此项,除此之外不要勾选。
勾选此项后,插件将使用旧的“wp-cache缓存”,这种缓存方式比简单模式和专家模式都要慢一些。
4.1.5 缓存重建(Cache rebuild)
缓存重建,是指:当一个页面的缓存文件到期、或页面更新(包括有新评论),新的缓存文件正在重新生成时,此时若有访问者来访,仍然向该访问者展示旧的缓存文件。
此项对于流量较大的网站,或短时间内流量较大的情况,效果显著。若不勾选此项,在新的缓存文件正在生成的几秒钟时间内,所有对该页面的访问,都将分别生成一个缓存文件,对服务器资源是很大的消耗。特别是对于经常产生新评论的网站来说,因为每发布一条新的评论都会导致重新生成缓存文件。
启发“缓存重建”功能的原帖:
Topic: WP Super Cache performance with heavy comments: ideas丨WordPress.org
4.1.6 304未修改浏览器缓存(304
Not Modified browser caching)
304状态码表示网页自上次访问后没有修改过。如果浏览者曾经访问过某网页,并且在浏览器中留有缓存,若再次访问时网页没有发生修改,服务器可以返回304状态码,这时浏览器可以直接使用缓存来显示页面。
这样做可以降低服务器CPU占用和带宽流量,更重要的是能够加快访问速度,提高用户体验。
此项在“专家模式”下无法使用,如果使用“简单模式”则建议勾选。
4.1.7 让已知用户匿名使他们浏览的内容是缓存文件(Make known users anonymous so they’re served supercached cache files)
若勾选此项,将会使已知用户匿名,这样他们浏览的也会是缓存页面。与“不要为已知用户缓存”的区别是,不勾选“不要为已知用户缓存”会为每个已知用户生成一个缓存文件,而勾选此项,则所有已知用户浏览的都是与匿名用户相同的缓存文件。
勾选后,已知用户访问网站,看起来会像是没有登录一样,但是当他们访问/wp-admin/时会发现他们仍在登录状态。
4.1.8 自豪地告诉世界Stephen Fry proof(Proudly tell the world your server is Stephen Fry proof)
此项的说明简单易懂,勾选后会在网站底部显示一行感谢作者的信息。站长可自行选择是否勾选,勾选后注意测试是否正常显示。
4.2 高级(Advanced)
4.2.1 启用动态缓存(Enable dynamic caching)
此项是指在缓存的页面中指定一部分不要缓存,一个典型的例子是广告位,整个页面使用缓存文件但是广告位部分动态更新。一般Google Adsense和大部分外部插件都使用JS来实现部分模块的动态更新,不需要站长自己处理。
但如果站长有这样的需求,可以启用此项,并根据官方FAQ进行设置。此项只能在“简单模式”下开启。
4.2.2 移动设备支持(Mobile device support)
如今,所有网站都应该针对移动设备进行优化。但如果网站不是使用自适应代码实现移动设备优化,而是使用某些插件或主题为桌面设备和移动设备分别生成不同的网页文件,则需要勾选此项,以为移动设备单独缓存网页文件。
此类插件包括但不限于:
- Jetpack’s Mobile Theme Module
- WPTouch
- WordPress Mobile Edition
- WordPress Mobile Pack(使用此插件,不能开启“不要为已知用户缓存”)
4.2.3 移除.htaccess文件中的UTF8/blog字符集(Remove UTF8/blog charset support from .htaccess file)
如果网站上出现不正确的字符,可勾选此项。
4.2.4 当有新文章或页面的发布或更新时清除之前的缓存文件(Clear all cache files when a post or page is published or updated)
此项的中文翻译不太明确,更明确的说法应该是:“当有新文章或页面的发布或更新时,清除之前所有的缓存文件”。清除缓存文件,可以使网站显示最新的内容。
小黑一直想不到这个功能的使用场景,如果网站需要保持最新状态,设置较短的到期时间就可以了;如果需要保证首页“最新文章”模块更新,手动删除首页缓存即可,没有必要清除全站缓存。但如果读者有这样的需求,勾选此项即可。
4.2.5 首页额外检查(Extra homepage checks)
此项功能是因为插件作者发现网站首页缓存有时会出现问题,比如可能会返回空白页面。
如果网站从未出现过此类问题,可不勾选,因为检查会消耗一些服务器资源;如果网站出现过此类问题,可勾选此项。
注意:极少数情况下,此功能会停止对首页的缓存,站长请注意定期自行检查。
4.2.6 当某页面有新评论时,只刷新该页面的缓存(Only refresh current page when comments made)
勾选此项后,当某篇文章产生新评论时,只删除该文章的缓存文件,而不删除首页和其他相关页面的缓存文件。如果评论需要审核,则在审核通过后删除该文章的缓存文件。
注意:此功能实际是“删除”缓存文件,而不是“刷新”,新的缓存文件仍然需要通过新的访问生成,或通过预缓存功能生成。
4.2.7 在该页列出所有最新的缓存页面(List the newest cached pages on this page)
勾选此项,可在高级(Advanced)选项卡右侧的黄色区域显示10个最新的缓存页面的URL。除此之外,站长可以在“内容(Content)”选项卡中,点击“列出所有已缓存的文件(List all cached files)”,查看所有缓存文件。
4.2.8 粗略的(Coarse)文件已锁定(Coarse file locking)
此功能很早以前被用于避免文件名冲突,但现在插件使用临时名称,所以发生文件名冲突的几率很小。建议不勾选。
4.2.9 稍后初始化(Late init)
正常情况下,在网站页面显示的过程中,WP Super Cache会在WordPress API之前进行初始化,如果由于某些原因,站长需要根据WordPress数据库的信息来调整WP Super Cache插件的功能,可勾选此项。
WordPress的插件或主题开发者可能会使用此功能,需要更多信息请查看:WP Super Cache for Developers丨Something Odd!
5. CDN
WP Super Cache插件还提供了CDN功能,这不是静态缓存的范畴,我们以后专门介绍。
6. 总结
WP Super Cache插件是最优秀的WordPress静态缓存插件,功能强大,只是很多功能不容易理解,官方文档也不能完全解释清楚,这也是本文的目的。
站长在理解这些功能后,还需要不断地测试和调整设置中的参数,以发挥插件最大的作用;而且,随着网站页面数和流量的增长,旧的参数可能已不适合网站的情况,站长也要不断地调整这些参数,以适应网站的变化。
One reply on “WordPress静态缓存插件WP Super Cache,3大模块17项配置全解析”
[…] 启用WP Super Cache,尝试从Wordpress层面生成静态页面,进一步优化TTFB。暴力地开启了预生成静态页面的功能,当爬虫/非注册用户访问的时候,直接提供已经生成的静态页面。最终优化TTFB到0.1秒左右(原来是1秒以上)。详细的非官方配置指导,请参照这里。 […]