这一直困扰着我,比如说我有一个函数:
public function addItem($item) {
$this->items[] = $item;
return $this;
}
然后我有另一个功能,比如:
public function addItems($items) {
foreach($items as $item) {
$this->addItem($item); //IS THIS FASTER OR
$this->items[] = $item;//THIS?
}
return $this;
}
基本上,我总是在循环中执行选项1$this->addItem($item)
,但另一方面,在我看来这是多余的,我可以将项附加到数组中,本质上它做的是相同的事情。只是想知道如果性能有任何差异,哪一个更快。
此
$this->items[] = $item;
将永远比快(分钟)
$this->addItem($item);
因为第二个版本增加了调用函数的开销,而第一个版本没有。这与您应该为一个元素使用第一个版本而不是array_push()
的原因相同。引用手册:
注意:如果使用array_push()向数组中添加一个元素最好使用$array[]=,因为这样就没有调用函数。
函数调用需要一些处理器时间。因此,更少的函数调用->更高的性能。
无论如何
要点是您的代码保持清晰和安全。这样的代码比任何性能都重要得多。
永远记住:
清除中的代码、变量和函数名称您的代码将为您节省大量的时间和健康。
您的案例:addItem()
函数提供了一个非常好的抽象。保留它。
在函数addItem()
中,您可以进行一些验证和调试。此外,它可以返回指示成功的true
或false
。
函数跳转原则上比直接访问慢(即1更快)。话虽如此:
- 不要担心微观优化。比起快速代码,更喜欢清晰、干净、简洁和/或灵活的代码
- 如果您使用一些PHP操作码优化器,那么这些访问很可能是内联的。在这种情况下,没有什么区别
关于基准测试,我学到的最重要的东西是
永远不要相信任何人告诉你什么更快或更慢,直到你自己证明为止
从那以后,我写了几十个基准,并多次证明公众舆论是错误的。