【发布时间】:2014-07-02 15:20:14
【问题描述】:
我有这个包含 10,000 条记录的提要和一个循环来获取所有产品,然后使用这些列创建一个产品数组。
该地图针对每个零售商创建的方式不同,因此产品名称可以是产品名称,也可以是 Feed 的两列。下面是一个例子。
我面临的问题是,在执行 eval、eval、eval 之后的每个循环......它开始疯狂地增加时间。即使根本没有任何功能。
Eval 正在创建引用?职能 ?临时变量?有没有办法重置所有这些?
调试时间
[2014-05-14 10:21:08][DEBUG] 在 0.48338389396667 中转换了 500 个产品内存使用量:247750752 读取/总计:500 / 108640
(...)
[2014-05-14 10:26:06][DEBUG] 在 6.9182150363922 中转换了 500 个产品内存使用量:247751288 读取/总计:50000 / 108640
(...)
[2014-05-14 10:28:03][DEBUG] 在 7.5416939258575 中转换了 500 个产品内存使用量:247749704 读取/总计:60000 / 108640
示例
对于商家 A,我通过这个 php 函数获取产品名称:
array_explode(",",str_replace(" ","",$NAME))[0];
所以我的映射 $v 将有一个索引“f”,其值如下:
array_explode(",",str_replace(" ","",$NAME))[0];
在我对该地图进行评估后
foreach($map as $k=>$v) {
(...)
$value = eval('return ' . $v["f"] . ";");
(...)
}
这很好用,我的所有产品数组都很好,但这会疯狂地增加我的脚本的执行时间。如果我把它拿走,脚本运行罚款为每 500 行/产品 0.4 秒。
我需要 eval,因为我正在使用 php 代码来解析/设置提要样式。
帮助? :)
【问题讨论】:
-
给出的代码不足以说明内存分配的位置以及它可能开始变慢的位置。但我们可以说的是,您可以在没有 eval 和适当的资源管理的情况下实施更清洁的解决方案。
-
能不能麻烦把整个循环的源代码贴出来?!
-
大家好,我已经编辑过了。你不需要整个循环。我已经测试了所有的循环都很好 eval 不是。谢谢!
标签: php performance time eval