【发布时间】:2010-02-09 11:46:18
【问题描述】:
我正在对这个函数进行微优化,并且在循环内部检查循环外部的值是否为 0 时遇到了一点问题,如果是,则调用函数,类似地在它调用的函数中。我将如何重构它,以便在这些循环中没有条件逻辑(这很慢)。
foreach($this->layer[$l]->objs as $obj)
{
//Horrific code to save 20ms :(
($l===0) ? $obj->myfunc_clean($var,$var2) : $obj->myfunc($var,$var2);
}
我需要摆脱条件$l===0,因为在数千个对象的循环中这种条件会大大减慢它的速度。此外,我有需要正常处理的函数,但另一个需要在完成时取消设置临时变量(基于 l 为 0)。 myfunc 函数还有一个对更多对象的循环,因此我必须调用单独的函数来保存更多的条件逻辑。
注意:这可能看起来像过早的优化,但相信我,对于我的应用程序,节省一毫秒可以节省宝贵的时间(如果不是更多,可能大约 10,000 次迭代)。因此,请不要回答有关过早优化是万恶之源之类的问题。这当然不会为时过早。
【问题讨论】:
-
虽然我觉得优化这个没有意义,phpbench.com 可能会给你一些其他的想法。
标签: php optimization loops conditional