WordPress 6.0 提升了分类模式的性能
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号码 254953832
小码精品资源网 » WordPress 6.0 提升了分类模式的性能
常见问题FAQ
- 关于资源售价和售后服务的说明?