使用for(;;)而不是while()循环有什么性能优势?

时间:2012-09-13 17:13:23

标签: php for-loop

我正在浏览一个php包,发现了一些有趣的代码,我希望能有一些亮点。所有写的都不是将表达式传递给for循环参数,而是两个分号。

for (;;) {  // This is the line in question
  $this->output .= $this->a;
  $this->a       = $this->get();

  if ($this->a === $this->b) {
    break;
  }

  if (ord($this->a) <= self::ORD_LF) {
    throw new JSMinException('Unterminated string literal.');
  }

  if ($this->a === '\\') {
    $this->output .= $this->a;
    $this->a       = $this->get();
  }
}

我知道for循环通常包含由分号分隔的3个表达式。所以这显然只是运行一个没有表达式的for循环,并依赖于break(第6行)来退出循环。

我想知道的是,这种方法是否比传统方法具有性能优势?我看到它的方式,可以很容易地重写为while循环:

while($this->a !== $this->b){
  // Loop Contents
}

3 个答案:

答案 0 :(得分:3)

即使它确实如此,即使没有,我也不会因为轻微的性能提升而牺牲可读性。除非你的应用程序是谷歌或Facebook的流量水平。

答案 1 :(得分:1)

根据基准测试结果,foreach和while之间可以得出结论,在更多情况下需要更好的表现。看看这个链接。它可能有帮助:

benchmark

答案 2 :(得分:-1)

我认为这是一个非常糟糕的做法!我会像这样将CPU使用率提高到100%。我认为一段时间更具可读性,你应该为此而努力。

总是像这样循环,该机器上的其他任务也有机会:

while($this->a !== $this->b){
  // Loop Contents
  sleep( $sometime );
}