若谷学院
互联网公司技术架构分享

2.WordPress建站系列之性能优化(页面缓存/CDN篇-WP Super Cache)

关于Page Cache

WordPress每次加载页面,有大量的SQL语句访问数据库,可以参考如何监测MySQL的数据库查询。特别是在安装的插件比较多,内容比较多的时候,数据库访问频繁,系统性能越来越慢。这个时候页面缓存非常关键,启用页面缓存后,在缓存已经建立的情况下,WordPress直接把缓存中的内容返回到浏览器,不再访问数据库,性能飞快。经过测试,我的页面响应实际从4s优化到了0.4s不到,速度提升10倍。

页面缓存的插件很多,WP Super Cache是其中的佼佼者。测试过W3 Total Cache, WP Fastest Cache, Redis Page Cache,都没什么效果。

WP Super Cache也不是一次就用好的,尝试了好几次, 最后发现有一些细节要留意,觉得这个插件里面应该是有一些bug。但整体而言是可以使用的一个插件,而且效果巨好。

不论大小网站,建议都启用Page Cache。

性能测试

事先的优化是万恶之源。性能好好的情况下,千万别去做什么性能优化,往往带来的问题比好处更多。

确实要优化的话,我们先评估测量一下性能如何,然后再做工作,优化之后也好对比工作的成效。

我们可以使用ab命令对网站做性能测试。ab是 apache benchmark的简称,是一个命令行的测试工具,可以用来并发请求一个网站,常用于压力测试。 ab的用法参考:超实用压力测试工具ab

比如20个并发,200个请求对百度首页进行压力测试。 可以把百度URL改成您的博客做压力测试。

$ab -n 200 -c 20  https://www.baidu.com
如下是本站20个并发请求时的压力测试结果,这里可以看到20个并发,平均响应时间是2.3秒。2.3秒已经是很长的时间了,一般网站页面响应时间超过1s,大量的用户会流失
若谷性能测试结果

性能测试-用户感知性能

可以使用页面前端测试工具对网站进行测试,测试页面的所有资源加载的性能。 国外的工具比较多,可以用这几个:
https://tools.pingdom.com/
https://developers.google.com/speed/
https://developers.google.com/speed/pagespeed/insights/
https://gtmetrix.com/
 
国内的网站用国外的工具测试非常慢, 可以用国内的工具做前端页面性能测试:
17ce页面性能测试:  https://www.17ce.com/
据说360也有工具可以用: http://ce.cloud.360.cn/
360的测试工具我没有成功用起来,这几天每次点击测试都反应页面404,问题已经反馈到360,希望早日修复。
 
如下是RuoguSchool在优化前的性能,页面加载4.977s,Oh My GOD,我自己都不愿意开网站了:
网站性能优化前的评测报告

启用WP Super Cache中的页面缓存(Page Cache)

按照如下步骤开启WP Super Cache中的 Page Cache:

1).启用缓存,使用简单模式;
2).不对已知用户使用缓存;   
3).压缩页面以便让来访者更快浏览。
4).缓存重建。当新缓存生成时调用缓存文件给匿名用户。 (推荐)
5).304未修改浏览器缓存。表示网页自从它最后一次请求后未被修改。 (推荐)
6).开启预缓存,缓存全部文章。设置定期刷新全部缓存,手动点击“立即预加载缓存”;这一条是关键动作。
 
开启之后,记得检查Page Cache是否生效。确保在打开页面时,没有相应的SQL请求落到数据库,且页面打开很快,说明页面Cache生效。可以通过检查页面源码的末尾(浏览器里面右键菜单-查看页面源码)有没有如下的字样,来确保WP Super Cache是否生效:
<!– Dynamic page generated in 2.183 seconds. –>
<!– Cached page generated by WP-Super-Cache on 2018-04-21 02:01:06 –>
这里两行日志是WP Super Cache追加到页面上的,说明了生成页面话费多久,以及什么时候缓存的。
 
同时缓存开启后,可以使用17ce, PageSpeed, Pingdom之类的工具做性能测试。这里是若谷优化后性能,0.419s的响应时间。 比早先的4.97s的速度快了10倍。
 

在WP Super Cache中开启CDN

WP-Super-Cache里面CDN配置的部分比较坑,中文翻译不清楚,我尝试了好几次才把CDN配置好。

实际上要把Off-site URL配置为CDN服务器地址,就可以启用CDN。参考下图:

How To Enable CDN in WP Super Cache

这里的cdn.ruoguschool.com在我的域名中cdn的cname是指向七牛云存储的,七牛云里面CDN指向的我的服务器IP,跟www.ruoguschool.com指向的同一个站点。 就是说wp-content, wp-includes, assets目录下面的文件走CDN域名,这个域名的解析由CDN服务商(七牛)来做的。最后访问的页面内容截图部分如下:

CDN Enabled wordpress website

一般情况下,对于几百篇文章的个人博客,其实没有太大必要使用CDN。 那么什么情况下有必要开启CDN呢?

1).如果希望不同城市的用户访问速度都足够快;

2).如果有大量用户访问;

3).如果主机的流量费用高,建议使用CDN。可以使用七牛CDN,又拍云,或者阿里云,腾讯云,华为云的CDN。

 

什么是CDN

CDN是内容分发网络(Content Delivery Network)的简称。 简而言之,是通过在各个城市缓存网站的内容(静态资源),使得分布在全国/全球各地的用户都能够取到离ta位置最近的城市的缓存数据,从而提升网站的性能。

那么CDN的原理是什么呢? 实际上是把域名解析交到CDN服务商来做,CDN服务商在做域名解析时,自动根据用户的IP信息,获得就近的城市所在的IP地址作为网站内容的服务器,快速服务器上已经缓存的内容,来达到网站加速的目的。 往往加速的效果能够使得网站快上10倍以上,CDN对于大量用户访问的网站来说至关重要。

更多关于CDN的原理,以及如何配置域名,如何配置CDN服务器,请Google/Baidu搜索相关内容。

 

关于对象缓存

看到网上很多建议开启WordPress的对象缓存,使用磁盘或者Memcached/Redis之类的内存缓存, 比如使用Redis Object Cache, 启用Redis对象缓存。但实际我测试下来,开启对象缓存对系统性能没太大帮助。因此不建议使用这个。
 
使用Redis Object Cache以后,可以按照下面的命令来监控redis的请求情况(虽然有请求,实际并无多大性能改善):
$redis-cli monitor
$redis-cli
>keys *  
redis-cli里面的keys * 命令查看有哪些已经缓存的key。

 

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

全球互联网技术架构,前沿架构参考

联系我们博客/网站内容提交