首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止wordpress wp_insert_term内存泄漏和速度减慢?

如何防止wordpress wp_insert_term内存泄漏和速度减慢?
EN

Stack Overflow用户
提问于 2014-08-01 23:22:19
回答 1查看 722关注 0票数 2

我已经为此纠结了两天多了。我需要你的帮助。

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

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

代码语言:javascript
复制
<?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分析它,但没有成功。

EN

回答 1

Stack Overflow用户

发布于 2015-04-16 22:08:54

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

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

如果你的分类中有大量(1000秒)的术语(在你的例子中是‘genres’),这会导致高内存使用率(根据PHP和WordPress的相关限制,甚至可能是由于内存耗尽而导致的致命错误),那么缓存的大小就会急剧增加。

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

例如,您可以在循环中的某个位置包含以下内容:

代码语言:javascript
复制
if ( $i % 500 == 0 ) {
    wp_cache_flush();
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25083509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档