WordPress 6.1 WP_Query缓存优化提升性能技巧
在 WordPress 6.1 中,WP_Query 数据库查询功能迎来重大优化,引入了内置缓存机制,显著提升了网站性能和用户体验。这一改进意味着当您多次执行相同的数据库查询时,结果将直接从缓存中加载,无需重复查询数据库。对于采用持久对象缓存的站点,这一变化将大幅减少数据库查询次数,从而降低服务器负载并加快响应速度。即便使用内存缓存的站点,也能从中受益,尽管性能提升幅度可能不如持久缓存明显。
对于开发者而言,建议优先使用核心函数如 wp_insert_post 来管理数据库操作。这些经过精心维护的函数能确保缓存机制正常工作。若您需直接操作数据库,务必在更新数据后调用 clean_post_cache 函数,以刷新缓存并保持数据一致性。这一变化对缓存管理提出了更高要求,但能有效避免潜在的性能问题。
默认情况下,所有 WP_Query 调用都将被缓存。若需禁用缓存,可通过设置 cache_results 参数为 false 来实现。例如:
“`php
$args = array( ‘posts_per_page’ => 50, ‘cache_results’ => false );
$query = new WP_Query( $args );
“`
另一种方法是使用过滤器全局禁用缓存:
“`php
function disable_caching( $wp_query ) {
$wp_query->query_vars[‘cache_results’] = false;
}
add_action( ‘parse_query’, ‘disable_caching’ );
“`
但请注意,禁用缓存仅适用于特殊场景,建议在大多数情况下保持缓存启用,并通过 clean_post_cache 函数进行缓存失效管理,以获取最佳性能。
WP_Query 缓存键由传递给类实例的参数生成,但某些参数将被忽略,包括:suppress_filters、cache_results、fields、update_post_meta_cache、update_post_term_cache、update_menu_item_cachelazy_load_term_meta。这些参数不影响实际查询执行。值得注意的是,fields 参数被忽略后,无论您设置 fields 为 ids 或 all,查询都将请求所有字段数据,确保缓存有效性。这一调整后,限制 fields 为 ids 时的性能提升可能不如前代 WordPress 版本明显。
此外,该更新还强化了 update_post_meta_cache 和 update_post_term_cache 的缓存机制,确保数据一致性。若您的站点已安装 advanced-post-cache、Enhanced Post Cache 或 Cache WP_Query 等缓存插件,建议禁用并移除这些插件,因为 WordPress 6.1 已内置更高效的缓存功能。
WordPress 6.1 还引入了 update_post_author_caches 新功能,优化了多作者站点的性能。此前版本中,加载作者信息需要多个数据库查询,而新机制通过在循环开始时调用 update_post_author_caches,将所有作者信息在单次查询中加载完毕,大幅减少数据库调用次数。此函数接受帖子对象数组并初始化用户缓存,关键代码段已添加以提高整体性能。详情请参考 Trac 票证 #55716。
同时,WP_Query 增加了 update_menu_item_cache 参数,配合同名函数实现菜单项缓存优化。该机制为菜单项引用的帖子或术语提供缓存支持,当设置为 true 时,将自动调用 update_menu_item_cache,通过两次数据库查询(一次获取帖子,一次获取术语)初始化菜单项缓存。这一改进显著减少了重复查询,提升了菜单加载速度。更多信息请查阅 Trac 票证 #55620。
此外,get_page_by_title 函数现已整合 WP_Query 机制,替代了原有的直接数据库查询方式。新机制确保缓存生效,同时支持 WP_Query 中的所有过滤器,进一步优化了页面检索效率。具体细节可参考 Trac 票证 #36905。