gpt4 book ai didi

php - 如何防止 wordpress wp_insert_term 泄漏内存和变慢?

转载 作者:行者123 更新时间:2023-12-04 20:57:29 25 4
gpt4 key购买 nike

我已经为这个问题困扰了 2 天多了。我需要你的帮助。

我有一个从 1 到 5000 的简单循环来插入 wordpress 术语。似乎 wp_insert_term 正在以某种方式泄漏内存并且脚本速度变慢。

考虑下面的脚本(如果你要运行它,你需要把它放在根 wordpress 目录中):

<?php

$full_start = microtime(true);

include_once 'wp-load.php';



for($i=1;$i<5000;$i++) {

$sub_start = microtime(true);

wp_insert_term('Some Genre Name '.$i, 'genres', array('description' => "Description"));

echo "AT: ".$i." Mem: ".memory_get_usage();

$sub_end = microtime(true);
echo " In: ".($sub_end - $sub_start)." seconds Golabls: ".count($GLOBALS)."\n";

}

$full_end = microtime(true);

echo "Total time: ".($full_end - $full_start)." seconds\n";

您会注意到,随着术语的添加,脚本速度变慢,因为它需要更长的时间来插入。此外,内存使用量呈天文数字增长。我想知道可以做些什么来防止内存泄漏,以及速度变慢的原因是否是内存使用。我确实调试了 wp 查询,但它们似乎不是速度下降的原因。

如有任何帮助,我们将不胜感激。我尝试使用 xhprof 对其进行概要分析,但没有成功。

最佳答案

这可能已经很久了,也许你现在已经弄明白了,但我最近遇到了这个问题,所以事情是这样的:

wp_insert_posts(),在其执行路径的某个点,执行对 get_terms() 的调用,检索您正在处理的分类法的所有术语 ID .这些 ID 也缓存在 WordPress 的缓存中。

如果您的分类法(在您的情况下为“流派”)中有大量(1000 多个)术语,则缓存的大小会急剧增加,这会导致内存使用率过高(甚至可能由于内存耗尽而导致 fatal error ,具体取决于 PHP 和 WordPress 的相关限制)。

我能够实现的唯一解决方法是计算已插入的术语数量,并在每次插入时明确清除 WordPress 的缓存(大约 100 秒)。

您可以通过调用wp_cache_flush()来清除缓存。

例如,您可以在循环中的某处包含它:

if ( $i % 500 == 0 ) {
wp_cache_flush();
}

关于php - 如何防止 wordpress wp_insert_term 泄漏内存和变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083509/

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