0

这一直困扰着我,可以说我有一个功能:

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;
}

基本上我总是$this->addItem($item)在循环内执行选项 1,但另一方面,在我看来,我可以将项目附加到数组中,基本上它做同样的事情。如果性能有任何差异,只想知道哪个更快。

4

4 回答 4

4

这个

$this->items[] = $item;

总是(每分钟)快于

$this->addItem($item);

因为第二个版本会产生调用函数的开销,而第一个版本不会。这也是你应该使用第一个版本而不是array_push()一个元素的原因。引用手册:

注意:如果您使用 array_push() 向数组添加一个元素,最好使用 $array[] = 因为这样就没有调用函数的开销。

于 2013-06-28T20:01:20.903 回答
3

函数调用需要一些处理器时间。因此,更少的函数调用 -> 更高的性能。

然而

要点是您的代码保持清晰和安全。这样的代码比任何性能都重要得多。

永远记住:

代码中的清晰代码、清晰的变量和函数名称将为您节省大量时间和健康。

您的案例:addItem()函数提供了一个非常好的抽象。就留着吧。

在功能addItem()中,您可以进行一些验证和调试。此外,它可以返回truefalse指示成功。

于 2013-06-28T20:01:13.903 回答
2

函数跳转原则上比直接访问慢(即 1 更快)。话虽如此:

  1. 不要担心微优化。喜欢清晰、干净、简洁和/或灵活的代码而不是快速的代码。
  2. 如果您使用一些 PHP 操作码优化器,这些访问很可能是内联的。在那种情况下,不会有任何区别。
于 2013-06-28T20:01:31.110 回答
0

我学到的关于基准测试最重要的事情是

永远不要相信任何人告诉你什么是更快或更慢,直到你自己证明它

从那以后,我编写了数十个基准测试,并多次证明公众舆论是错误的。

于 2013-06-28T20:02:11.170 回答