PHP中的FOR循环性能

And*_*gan 12 php performance loops for-loop

正如我的研究让我相信for循环是PHP中最快的迭代构造...为了使它更清晰,你认为下面的哪一个会更快?

例子一

for ($i = 0; $i < count($myLargeArray); $i++ ) {
    echo myLargeArray[$i];
}
Run Code Online (Sandbox Code Playgroud)

例子二

$count = count($myLargeArray);
for ($i = 0; $i < $count; $i++ ) {
    echo myLargeArray[$i];
}
Run Code Online (Sandbox Code Playgroud)

我的逻辑是,在每个迭代中,在每个迭代中,在每次迭代中访问myLargeArray的长度比在示例2中访问简单的整数值计算成本更高.那是对的吗?

sla*_*pon 14

第一种方法较慢,因为count()必须在循环的每次迭代中调用该函数.该count()方法本身非常快,但在调用该函数时仍然存在一些开销.通过将其移动到循环外部,您将执行所谓的" 循环不变代码运动 ",或者有时"提升".

这样的一系列优化都很有趣,值得学习.

说了这么多之后,很少有人对这一点施加压力.在您的示例中,回显输出的I/O可能是您通过"优化"保存的10倍.如果你在循环中做任何其他事情,你的优化意味着越来越少.

我讨厌做一个湿毯子,但是对于超过90%的代码,性能都不是问题.特别是当您谈论Web应用程序时,这些应用程序开始时的I/O超过90%.

不过,当你认为你的代码应该受到指责时,你应该:

  1. 确定您需要优化的用例
  2. 衡量您的代码性能
  3. 找到瓶颈
  4. 确定您可以改进的领域,并决定是否值得您改进它们.
  5. 进行代码更改
  6. 回到第2步

您几乎总会发现您需要改进缓存策略和数据库优化(这只是通过其他方式进行I/O优化),而不是繁琐的代码.