我不得不优化运行缓慢的大型数据集的代码,这些代码看起来不错。在测试和记录执行时间后,我发现循环中几乎没有两个整数的 max() 比较。然后在快速浏览文档后,我看到了以下评论:“我有几次使用 max 比使用 if/then/else 构造要慢得多。一定要在你的例程中检查这个!”
所以我用三元运算符替换它,执行时间快了大约 2/3。
然后我开始好奇为什么 max() 的工作速度比一个简单的语句慢得多,以及这个函数的背后是什么。但到目前为止我找不到任何解释。
同样在过去,我在 array_search() 中遇到了类似的问题,它的工作速度比 foreach with 语句慢得多。
我在 PHP 7.1 上运行了测试。
$firstLoop = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$testOne = max($i, 1000000);
}
error_log(microtime(true) - $firstLoop);
$secondLoop = microtime(true); // 1.3123650550842
for ($i = 0; $i < 1000000; $i++) {
$testTwo = $i > 1000000 ? $i : 1000000;
}
error_log(microtime(true) - $secondLoop); // 0.090374946594238
海绵宝宝撒
交互式爱情
天涯尽头无女友