让代码更简单

WordPress缓存提速优化进阶学习目标0sql查询

重要:本文最后更新于2018-12-25 20:27:33,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

这是今年第二篇关于WordPress提速性能优化的文章了,第一篇WordPress性能优化——提升网站速度飞起来教程在当时看来能将WordPress网站从5秒左右提速到1秒已是极限,我还沾沾自喜,如今看来那只能算是初级教程,今天给大家带来高级教程,别问我为什么不按初级中级高级的顺序写,因为我的博客想怎样写就怎样写!

大家以为WordPress的速度极限是多少秒?我见过最快的WordPress网站就是我爱水煮鱼的博客,号称0.0006秒生成页面,虽然生成速度很快,但在用户体验上的实际访问速度(这里指输入网址到浏览器展示出来的时间,即DOM解析速度)还是在300ms左右(实测与访客网络有关,在下渣渣移动3G网络)。当然,在第一次访问之后打开其它页面的速度几乎可以说是无缝切换。

WordPress缓存提速优化进阶学习实现0sql查询

WordPress缓存提速优化进阶学习实现0sql查询

目前代码狗博客的访问速度可以在500ms左右展现为了提升WordPress访问速度,站内页面间的切换可以说几乎做到了无缝切换,但相比于优化大神我爱水煮鱼来说还有许多不足之处,等我再研究一阵应该可以写出一篇终极优化教程来,这次WordPress性能提速优化我做了如下更改。

服务器方面

  • Centos7.2 64位系统升级至Centos7.4 64位系统。
  • Nginx1.11升级至Nginx1.12。
  • PHP5.6升级至PHP7.2。
  • MySQL5.4升级至MySQL5.6。
  • Memcached1.3升级至Memcached3.0。
  • 新增PHPOpcode字节码缓存。
  • 新增Redis缓存。

WordPress缓存插件

  • Batcache缓存插件,它能将整个页面静态化,右键查看网页源码可以在网页底部看到绿色的缓存信息。下载好后取出其中advanced-cache.php文件放入wp-content/目录下,注意wp-content目录下,batcache.php文件放入wp-content/plugins/目录下,然后后台开启插件。下载地址:https://wordpress.org/plugins/batcache/

  • Memcached Object Cache缓存插件,取出其中object-cache.php文件放入wp-content/目录下,默认开启,无后台启动选项。下载地址:https://wordpress.org/plugins/memcached/

做好上面的部分再修改wp-config.php文件中的配置,如下(没有就直接添加即可)

复制
define('ENABLE_CACHE', true);//开启memcached缓存
define('WP_CACHE', true);//开启默认缓存

好了,到这里再看看你的WordPress网站打开速度如何?一般来说如果上面的步骤都做了,你的WordPress网站打开速度应该在1秒以内,一般只需0.X秒即可打开网站,如果有图片等大资源,配上CDN会更快哟。到此sql查询次数也会降低至20次以内(各主题代码优化不一致,听说有的甚至能降低至2个sql查询,不知道他是怎么做到的很好奇,有知道身边有这样的朋友麻烦告诉他,他又多了一个粉丝)。

高级加速

上面部分应该可以算是WordPress性能优化提速的中级教程了,下面才是高级教程,学习下面的教程需要你的服务器支持memcached内存缓存,并且个人对WordPress函数有一定理解,否则改坏了程序,网站跑不起来别赖我,再提醒一句,一定要提前快照,切记!

在进入高级教程前我们需要先了解3个WordPress函数,它们分别是:

  1. wp_cache_set() 把数据写到缓存中。
  2. wp_cache_get() 读取缓存数据。
  3. wp_cache_delete() 删除缓存。

它们需要用到如下四个参数

这些函数会涉及到的四个参数:

  • $key: 对象的 key。
  • $data: 要存的值。
  • $group: 分组,可选参数,用来把缓存对象就行分组。
  • $expire: 过期时间,可选参数,如果是默认缓存,这个函数没用,如果是内存缓存,是设置缓存的时间,单位是秒,默认为0(0的意思就是永远,不会自动过期)。

基本使用

复制
$data = wp_cache_get("缓存key",'缓存分组');
if(false === $data ){
	$data = wp_get_related_posts();//缓存数据获取
	wp_cache_set('缓存key',$data ,'缓存分组',3600);
}
echo $data ;

上面的代码意思是,当我们加载网页时会调用WordPress函数获取数据,遇到加载数据就先从缓存中取我们需要的数据,然后判断有没有从缓存中取出数据,没有就再通过查询获取数据,有就直接使用缓存数据,这样就避免了多次sql查询,减少查询次数,降低页面生成时间。

如果需要更新缓存,只需要删除原来的缓存数据,再次访问时会自动生成新缓存。

复制
wp_cache_delete('缓存key','缓存分组');

好了,学会如何使用WordPress的缓存函数后,我们还需要对我们的主题进行调试DEBUG,上面的操作已经让我们的主题查询次数大大降低,比如我的大前端主题首页就从2200+查询降低至11次查询。怎么找到WordPress没有缓存的函数位置这里就不多讲了,我不是为了讲主题调试的。我在大前端主题header文件中找到5处不会自动生成缓存的地方,为了降低sql查询,我们就为这几处修改代码,实现缓存。

大前端dux主题中加载body标签的class时使用了body_class(_bodyclass())这个函数,这个代码不会被缓存,因为它会根据每个页面不同生成不同的class属性,应该就是这个原因导致WordPress没有对它进行缓存(我猜的),我们自己写上判断页面,然后使用上面的代码进行缓存与调用即可,原来查询11次,现在效果如下:

WordPress缓存提速优化进阶学习实现0sql查询

WordPress缓存提速优化进阶学习实现0sql查询

在修改主题时要注意一个问题,WordPress很多函数并不是以return形式返回数据,而是直接使用echo进行打印,因此,我们在对数据做如下操作时是错误的。

复制
$data=body_class(_bodyclass());

body_class函数原型大家可以查一查,它就是使用echo直接输出的,当我们使用上面的代码赋值时是错误的,因为该函数没有给我们返回值,所以我们可以使用下面的方法:

复制
ob_start();//打开一个缓冲区,打开之后下面的输出将会暂缓输出。
body_class(_bodyclass());//输出class,但在前面打开缓冲区之后,它会暂缓输出
$data=ob_get_contents();//取出数据缓冲区的值,赋值给我们的变量。
ob_end_clean();//关闭并清理缓冲区,这时我们的缓存已经写入了,因此关闭缓冲区并清理。
//WordPress的内存缓存写入。

优化完整个页面后,页面生成时间可以减低至0.02秒左右,不知为何我纯输出静态HTML首页都有6个查询,他们分别查询了options、posts、term_taxonomy、postmeta表。这是为何?难道0sql只有把整个网站静态化,根本不走数据库?希望有知道的大神指点。以上内容部分参考优化大神我爱水煮鱼,喜欢的话点个赞呗。

注意:如果做了缓存后查询次数仍然没有下降,请重启memcached缓存服务,最好直接重启服务器,我重启后首页查询次数直接降到了0,文章页2次。

感觉很棒!可以赞赏支持我哟~

8 打赏

评论 (10)

登录后评论
我也开启了memcached,感觉比其他的缓存插件都好用
我已经实现0sql,不侵入。https://github.com/midoks/wp-cache-db
干得漂亮
用过好几个缓存插件,但效果都大同小异,可能是虚拟主机的原因吧~
缓存插件都差不多
你现在是不是没有用Batcache缓存,我看你页面还有57次查询,能告分享下为什么停用吗?我一直想降低查询数,但一直没有实现你说的2次查询,你是不是缓存数据库了?我测试过Batcache感觉速度上没有比wp super cache快,所以给停用了。
没用呀,它的作用和wp super cache相似,只是将页面存在了内存中,后者存在磁盘中。有登录,怕串号。57次?有没有搞错,我这里只有2次或者4次呀。
你回复好神速。我用谷歌浏览器看的查询次数,Network最下面一行显示查询次数,这次刷新了下变成了61次,我不知道你是怎么看的,可能是方法不同。不过你网站打开速度很快,体验很好,用不着关心查询次数了,我感觉查询次数就是心理安慰,如果流量特别大时可能会影响负载,但流量大到那种程度就该升级服务器了。我不懂技术,纯粹是来学习的。
浏览器network上看到的是网页资源的请求数量,就是为了给你展示这个网页,总共请求了多少资源,并不是查询次数,查询次数是mysql执行的,可以通过PHP操作memcached缓存查询,减少查询次数,你可以看看这篇文章https://www.daimadog.com/3287.html
感谢博主的分享
QQ咨询 邮件咨询 狗哥推荐