“我的主题”运行一个循环,不需要post术语来显示。然而,Wordpress core在每次迭代中都会运行wp\\u get\\u object\\u terms函数。
这会导致不必要的DB查询,例如:
SELECT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON tt.term_id = t.term_id
INNER JOIN wp_term_relationships AS tr
ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy IN (\'category\')
AND tr.object_id IN (81595)
ORDER BY t.name ASC
是否有办法防止/减少或优化仅在绝对必要时才调用wp\\u get\\u object\\u terms()?
我一直在跟踪它,以获取在循环中调用的\\u permalink()。我们的网站使用包含类别的永久链接,这解释了为什么它会为每个帖子搜索类别。有什么方法可以优化这一点吗?
SO网友:Rarst
由于您已经缩小了范围,因为您的帖子permalinks包括类别,所以WP正在尝试找出如何为每个帖子将它们放在一起。
对象缓存的主要方法是优化整体设置的效率,而不是对一代又一代的位和块进行微观管理。如果为站点设置持久对象缓存,则类别信息将透明地缓存在内存中,而不是每次都从数据库中检索。
短链接(Shortlinks)
如果这不是一个选项,或者您生成的链接的规模甚至会给对象缓存带来问题,那么有一个稍微有点黑的替代方案。虽然您启用了“漂亮”链接,但这并不意味着“不漂亮”链接停止工作。
您可以使用wp_get_shortlink()
函数生成后一种链接(/?p=id
), 这将大大减少资源消耗。
它们在源代码中看起来并不好看,但当被访问时,WP会透明地将它们重定向到“漂亮”版本。当然,过多的重定向也不是一件好事,但这取决于你的权衡是否对你的环境有意义。