1

我正在浏览一个 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
}
4

3 回答 3

3

即使有,即使没有,我也不会为了轻微的性能提升而牺牲可读性。除非您的应用程序接近 Google 或 Facebook 的流量水平。

于 2012-09-13T17:15:31.943 回答
1

根据 for、foreach 和 while 之间的基准测试结果,可以得出结论,在更多情况下具有更好的性能。看看这个链接。它可能会有所帮助:

基准

于 2012-09-13T17:20:58.073 回答
-1

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

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

while($this->a !== $this->b){
  // Loop Contents
  sleep( $sometime );
}
于 2012-09-13T17:17:56.897 回答