时间:2024-03-17
WordPress因为本身是一款为博客设计的程序,在文章数量增多以后,数据库体积会指数级直线扩大。这时如果你依然要求你的网站有十分优秀的打开速度和访问体验,那肯定就离不了用Redis或Memcached 来对高频的数据库查询做一下缓存。
然而WordPress 在6.1 的版本更新中,改进了 WP_Query 类中数据库查询的执行方式,实现 SQL 查询缓存,如果多次运行同一条 SQL 查询,查询结果将从缓存中加载。这意味着对于使用持久对象缓存服务(比如 Memcached)的站点来说,在缓存失效之前,相同的数据库查询就不会再次运行。
这次从而显著降低站点的数据库查询次数,从而真正实现了站点的 0SQL。看来在6.1版本以后,WordPress官方已经集成了WP_Query的SQL 查询数据缓存,我们可以彻底和WordPress数据库优化的那些插件说再见了!
值得注意的是,在默认情况下,WP_Query
的所有数据库查询都将被缓存,如果想不缓存,只需在传入WP_Query参数数组的时候,将 cache_results
参数设置为 false
即可:
$query = new WP_Query(array( 'posts_per_page' => 50, 'cache_results' => false));
也可以通过 filter 全局禁用缓存:
add_action('parse_query', function($wp_query){ $wp_query->query_vars['cache_results'] = false;});
为了获得最佳性能,UTHEME强烈建议您保持WP_Query缓存开启,如果清理缓存使用 clean_post_cache
函数,非一些极端情况下不要禁用WP_Query缓存。
缓存的键是使用 WP_Query
的查询参数生成的,但是会忽略以下参数:
suppress_filters
cache_results
fields
update_post_meta_cache
update_post_term_cache
update_menu_item_cache
lazy_load_term_meta
因为这些忽略的参数不会影响生成的 SQL 语句,其中特别要注意下 fields
参数:
$query2 = new WP_Query(array( 'posts_per_page' => 50, 'fields' => 'ids'));$query3 = new WP_Query(array( 'posts_per_page' => 50, 'fields' => 'all'));
上面这两种情况,无论是否使用了 fields
参数或者什么参数,生成的 SQL语句都是一样的,然后查询结果都会被缓存起来,这样就能够更加高效的使用缓存,而无需存储多份缓存数据。
相信WordPress6.1版本正式发售以后,WordPress的主题、插件开发作者都会及时跟进,第一时间集成WP_Query的SQL 查询缓存功能。让大家卸载那些WordPress数据库优化插件。
Copyright © 2019-2024 jsp.hk