WordPress 6.0 提升了分类模式的性能

作者 : StarSky.Ltd 本文共2593个字,预计阅读时间需要7分钟 发布时间: 2022-05-28 共1.01K人阅读

WordPress 昨天发布了 6.0 版本,主要是改进了古腾堡编辑器和全站编辑的能力,当然也有性能方面的提升,我们今天开始就讲讲一些具体改进的地方,今天介绍一下 WordPress 6.0 缓存功能的改进。

WordPress 完善缓存批量操作方法

我们知道 Memcached 等缓存服务都支持一次请求获取多个数据,这样意味着无须多次连接外部对象缓存服务,可以显著的提升网站的效率。

 

 

WordPress 在 5.5 版本的时候,就引入了wp_cache_get_multiple()函数,实现一次缓存调用就可以批量获取一组缓存。

Memcached 也支持一次请求设置多个数据,以及一次请求也可以删除多个缓存数据,所以 WordPress 6.0 版本完善了缓存的批量操作方法,通过实现了下面这三个函数支持完整的缓存的批量的 CRUD 操作,这样就可以一次缓存调用就能创建、编辑和删除多个缓存对象:

  • wp_cache_add_multiple

  • wp_cache_set_multiple

  • wp_cache_delete_multiple

下面分别简单介绍一下这三个函数:

wp_cache_add_multiple( $data, $group = '', $expire = 0 )

  • $data: 要添加到缓存中的键值对数组。

  • $group: 可选, 缓存的组名,默认为空字符串

  • $expire: 可选,多少秒后过期,单位为秒,默认为0,即永不过期。

wp_cache_add_multiple( ['foo1' => 'value1', 'foo2' => 'value2'], 'group1' );

wp_cache_set_multiple( $data, $group = '', $expire = 0 )

$data: 要设置到缓存中的键值对数组。
$group: 可选, 缓存的组名,默认为空字符串
$expire: 可选,多少秒后过期,单位为秒,默认为0,即永不过期。

wp_cache_set_multiple( ['foo1' => 'value1', 'foo2' => 'value2'], 'group1' );

wp_cache_delete_multiple( $keys, $group = '' )

$keys: 缓存中要被删除的键名数组。
$group: 可选, 缓存的组名,默认为空字符串

wp_cache_delete_multiple( ['foo1', 'foo2'], 'group1' );

object-cache.php 实现

这三个函数是需要插件开发者在 object-cache.php 中去实现,没有的话,WordPress 6.0 会兼容处理,就是循环调用 wp_cache_add()wp_cache_set() 和 wp_cache_delete() 中来处理,但是这样就完全无法体现 Memcached 的高效率。

新版的 WPJAM Basic 中内置的 object-cache.php 已经实现 wp_cache_set_multiple() 和 wp_cache_delete_multiple() 函数,因为Memcached 没有批量添加的接口, 所以 wp_cache_add_multi() 就没有实现,让 WordPress 使用默认的循环调用 wp_cache_add() 实现即可。

下载 WPJAM Basic 之后,需要重新将 wpjam-basic/template/ 目录下的 object-cache.php 文件复制到 wp-content 目录下,这样才可以实现一次缓存调用就能创建、编辑和删除多个缓存对象,提高站点的效率。


WordPress 6.0 对性能提升还是做了很多工作的,比如昨天文章介绍的新增了批量添加、设置和删除一组缓存的函数,对分类模式下各种查询也进行提升。

分类查询缓存改进

从 WordPress 4.6 版开始,WP_Term_Query 的查询就可以缓存,WordPress 6.0 改进了这些缓存的准备和处理方式。

移除缓存过期事件

WordPress 6.0 之前,如果使用 Memcached 这类外部缓存,分类模式查询的缓存最长24小时,现在这个限制被移除了,所以如果缓存没有失效,那么分类模式查询就会被缓存更长的时间,这样会显著提高站点性能。

查询缓存只缓存 Term ID

分类模式查询的缓存修改成只缓存 Term ID 而不是整个 Term 对象,这样存储在缓存中的对象将会更加的小,如果使用 Memcached 这类外部缓存,可以更省空间。

因为只缓存 Term ID,那么下次从缓存中获取所有 ID 的时候,WordPress 会调用 _prime_term_cache 函数,检测对应 Term 是不是在缓存中,如果不在,它会一次把所有 Term 加载到缓存中,如果已经在了,则不会重复加载。

这些改进都会对性能的提升有好处,因为 WordPress 很多函数的调用都会多次请求一个 Term 的数据,比如标签页,就会一开始通过 get_term_by 函数准备好 Term 缓存,还有其他的函数比如 get_the_terms 也会在内存中准备好 Term 缓存,所以在大多数情况下,这些优化都会减少分类模式相关数据表的查询。

改进查询缓存 key 生成规则

如上所述,现在所有查询只获取 Term ID,所以很多相似的查询,它们缓存的内容都是相同的,比如使用 get_terms 去获取所有分类信息,第一次获取 slug 字段,第二次获取名称,两次查询应该会命中相同的缓存。

另外对传递给 WP_Term_Query 的查询参数的处理也进行了优化,比如 slug 字段可能是字符串,也可能是数组,现在统一转换成数组,这样无论你传递什么类型的参数,缓存的 keys 相同的可能性更高,缓存命中率也提高了。

提高导航菜单的性能

在获取导航菜单的 wp_get_nav_menu_items 函数中,首先使用简单的 taxonomy query 代替 get_objects_in_term 函数,这个替换首先可以把两次数据库查询降低到一次,这样每次获取菜单都能节省一次 SQL 请求,并且还能保持数据的一致性。

此外如果菜单中含有分类和文章的数据,wp_get_nav_menu_items 会改成使用 _prime_term_cache 和 _prime_post_cache 来准备 term 和 post 的缓存,这两个函数的使用会使得获取菜单的数据库请求变得更少,效率更高。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 80040890

星空资源网 » WordPress 6.0 提升了分类模式的性能

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

细心甄别、精心筛选,只为提供优质的源码资源

网站介绍 联系我们
Copyright © 2024 - 2024 星空资源网 PYNET.CN All rights reserved. 渝ICP备19012302号
开通VIP 享更多特权,建议使用QQ登录