WordPress 6.3 缓存功能将大幅增强与改进
为了进一步提高 WordPress 的效率,WordPress 6.3 对缓存功能做了下面这些增强和改进:
更改所有查询的缓存组
WordPress 中很多的查询结果都会被缓存,比如所有主要的查询类 WP_Query
,WP_Comment_Query
和 WP_Term_Query
等,从 6.3 开始,首先 WP_User_Query
的查询结果也会被缓存,然后在之前版本中,查询结果缓存与之相对应的对象的的缓存组(Cache Group)是相同的,比如文章查询数据将存储在 “posts” 缓存组中,从 6.3 开始这种方式将被改变。
6.3 将针对查询结果的缓存引进新的缓存组,使开发者在处理这些缓存组的时候有更大的控制权,底层核心功能现在允许开发者为缓存组指定过期时间,例如,可以设置一天的时长。如有需要,开发者还可以使用 wp_cache_flush_group()
函数来清除特定的缓存组(如果他们的使用缓存服务已经实现支持它)。此外,此更改还允许开发者根据需要将缓存组指定为非持久性的。以下是新增加的缓存组:
- post-queries
- term-queries
- comment-queries
- network-queries(全局缓存组)
- site-queries(全局缓存组)
- user-queries(全局缓存组)
新工具函数
WordPress 6.3 引入了一个新的工具函数 wp_cache_set_last_changed()
用于更新缓存中的最后更新值,它是对在 WordPress 4.7 中添加的 wp_cache_get_last_changed()
函数的补充,核心代码中所有更新缓存最后更新值都会替换为对此新函数的调用。
此外还引入了一个相应的 action:wp_cache_set_last_changed
,该 action 提供了诸如缓存组、最新更新值和旧值等有用的信息,开发者可以利用它实现自定义的缓存失效策略。结合前面提到的新缓存组和 wp_cache_flush_group()
函数,就可以实现以编程方式清除整个缓存组,下面是一个具体的例子:
add_action( 'wp_cache_set_last_changed', function( $group ){
switch( $group ){
case 'comment':
$cache_group = 'comment-queries';
break;
case 'sites':
$cache_group = 'site-queries';
break;
case 'networks':
$cache_group = 'network-queries';
break;
case 'posts':
$cache_group = 'post-queries';
break;
case 'terms':
$cache_group = 'term-queries';
break;
case 'users':
$cache_group = 'user-queries';
break;
default:
$cache_group = false;
}
if( $cache_group ){
wp_cache_flush_group( $cache_group );
}
} );
其他增强和修改
6.3 还更新了 _get_non_cached_ids()
函数,支持验证无效 IDs,确保输入的数组是唯一并且为整数。在以前的版本中,没有对输入进行验证,可能导致验证错误甚至 PHP 致命错误,现在,此函数仅支持传递整数数组,如果传递了错误的值,将触发_doing_in_wrong
函数生成消息以通知开发者。
在 5.5 引进的 wp_cache_get_multiple
在 6.3 将会应用到更多的地方,比如用于获取所有核心站点选项的 wp_load_core_site_options
函数中,或者 WP_Comment_Query
的 fill_descendants
(填充子评论)操作中,只需要一次缓存请求就能获取所有数据。
这些更新提高了 WordPress 对缓存的利用效率,从而提高站点的响应速度和性能,特别是服务器已经安装了 Memcached 这类内存的情况下。
最后 WordPress 优化参考: