【问题标题】:PHP: Which is faster: do while, while, or for loop [closed]PHP:哪个更快:执行while、while或for循环[关闭]
【发布时间】:2012-06-23 08:19:21
【问题描述】:

我目前正在用 PHP 创建一个套接字服务器,我想知道在整个过程中使用哪一个会更快。我听说 for 循环比 while 循环快,但我不知道 do while。

谢谢

【问题讨论】:

  • 您是否正在尝试使用 PHP 编写操作系统?
  • 您正在编写一个主要处理网络的程序。与此相比,循环执行的开销要低几个数量级。不要为此感到压力。

标签: php loops micro-optimization


【解决方案1】:

本质上没有区别,因为它们基本上只是编写循环的不同方式,直接取自 C。

唯一可能会影响的是评估条件的次数,但您可以自己计算。

所以使用最简洁易读的。

【讨论】:

  • 在这一点上,它们总是在博客上产生非常糟糕的基准,当然也没有得出任何结论,因为组装的差异是如此之小,你无法在真正的高水平上对其进行测量程序。
  • 是的,但是“没有可测量的差异”这句话在科学上是不正确的。有区别,而且是可以衡量的。是否足够在乎完全是另一回事。你把那个词删掉了,好电话。 :)
  • 如果您参考我的回答,您会发现我在实践中与您是一致的。但是,理论上确实可以隔离和比较各种控制语句的执行时间差异。例如,可以将时钟速度降低一个已知百分比,然后运行空循环并将时间差与减速的比率进行比较。只是说......“没有可衡量的差异”是过度的。没有这个词,我们就同意了。
【解决方案2】:

使用任何适合您的目的。 for 循环和 while 循环用于循环首先检查条件。 do-whiles 保证代码至少运行一次。

因此,您可以根据此约束立即将选择范围缩小到 for/while 或 do-while。尝试使用不适当的结构会导致代码非常丑陋,而且很可能会变慢。

在一段时间之间,我认为没有任何区别。即使您正在编写一个科学图书馆,这也几乎不会引起注意(如果有的话)。一般准则是:for 循环用于迭代事物,while 循环用作其他通用循环。

【讨论】:

    【解决方案3】:

    如果您非常关心代码的速度,profile 它。无论您阅读到有关特定代码 sn-ps 性能的任何信息(例如在 this 之类的地方),在您的特定情况下都可能会出错 - 因为一些奇怪的 PHP 解释器怪癖或其他原因。

    有大量可供 PHP 程序员使用的分析工具 - 从简单的 microtime 开始,到完整的分析器工具包(如 XDebug)结束。我建议阅读 this topic 了解基本的分析指南。

    【讨论】:

      【解决方案4】:

      根据您使用的基准,do 循环已被证明稍微快一些:

      http://www.ebrueggeman.com/blog/php_benchmarking_loops

      Test            Avg Execution Time  
      for loop        23.44 ms
      while loop      24.65 ms
      do while loop   22.96 ms
      

      在这个benchmark 中,foreach 的表现优于其他循环类型,while 的表现优于for。我提出这个是因为你会注意到这与我引用的第一个测试相矛盾。

      最后,this benchmark 支持第一个结论,即whilefor 稍快。

      结论?没有基准能够模拟您的用例,以至于您应该根据它做出决定,这可能是一个不会实质性地改进您的程序的微优化。使用适合情况的语句,然后编写测试以使用变体对您自己的应用程序进行基准测试。交换whilefor 是非常简单的——试试它们,看看你会得到什么。然后在您的下一个项目中忘掉这一课,因为它将是独一无二的,再次值得单独测试。

      文档

      【讨论】: