gpt4 book ai didi

wordpress - 分层分类和 update_meta_cache 函数

转载 作者:行者123 更新时间:2023-12-02 22:59:13 26 4
gpt4 key购买 nike

我有一个自定义的层次分类法,最近我导入了一堆(15k+)带有自定义字段(术语元)的术语。

从那时起,管理页面,即分类法添加/编辑页面和 CPT(分配了该分类法)页面变得异常缓慢。

我将问题追溯到 update_meta_cache 函数,该函数在每次加载时都会在这些页面上触发。它每次都会从数据库中选择所有术语,这是查询监视器输出的屏幕截图:/image/RDfK5.jpg

不过,“扁平”(非分层)分类法不会发生这种情况。我有另一个包含 22 万多个术语的平面分类法,它不会减慢任何速度。知道为什么 WP 会更新每个页面加载的所有术语的元缓存吗?有没有一种巧妙的方法来控制/禁用这种行为?

更新我知道这是一件可怕的事情,但我继续编辑了/wp-includes/taxonomy.php - 我注释掉了第 1370 行,即:

return update_meta_cache( 'term', $term_ids );

现在管理中的分类页面要快得多 - /image/ggVTW.jpg

只是为了比较 - 平面分类页面要快得多 - /image/3S2AB.jpg - 但 2 秒左右的时间就足够了。

但是,CTP 页面仍然非常慢 - /image/BkwGc.jpg - 尽管数据库时间现在很小。有什么想法吗?为什么我的页面生成时间仍然是 18 秒?我的意思是,差异会导致什么?

最佳答案

是的,这是分层分类法的一个严重的性能问题。它是已知的并且应该在某个时候修复,但这取决于 WP 如何处理缓存。

问题不在于 WP 查询所有术语(正如您所说,在平面分层分类法上,它是单个查询),而是它需要对分层分类法上的每个术语进行查询为了得到“ child ”这个词。在第一种情况下,这种行为很巧妙,因为 WP 不需要在每个 get_term 调用上进行查询,但在这种情况下会产生灾难性的后果。

这种情况下有三种可能的解决方案:

  • 使用缓存插件 - 正确配置的缓存插件,如 W3 Total Cache通过拥有“永久”缓存,将有助于不在每次页面加载时缓存分类法。这并不完美,但这通常是我采用的解决方案。

  • 使用缓存参数手动禁用每个 WP_Query 请求的缓存:

    'update_post_meta_cache' => false,
    'update_post_term_cache' => false

    这主要对前端查询有帮助,所以我认为这对于您的情况不是一个好的解决方案。

  • 不要使用分层分类法:)
    不,说真的。如果您有那么多术语,您应该寻找其他解决方案来处理您的分类。例如,Woocommerce 使用一个聪明的技巧来绕过产品属性的性能问题:所有 0 级术语都是分类法,它们与一个特殊的类放在一起。这需要一些工作来设置,但它是一个很好的解决方案。

我查找了有关此性能问题的一些引用in the Wordpress core tracker ,但似乎没有为此开放的票...也许您可以用您的数据打开一张票。

关于wordpress - 分层分类和 update_meta_cache 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40746942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com