Mat*_*chu 2 php performance foreach
PHPBench.com在每个页面加载上运行快速基准脚本.在foreach测试中,当我加载它时,foreach运行时间比第三个例子长4到10倍.
为什么本地语言结构显然比执行逻辑更慢?
也许它与foreach在数组副本上工作的事实有关?
或者它可能与以下事实有关:当使用foreach循环时,在每次迭代时,内部数组指针被更改,指向下一个元素?
引用foreach手册页的相关部分:
注意:除非引用了数组,否则foreach将对指定数组的副本进行操作,而不是数组本身.foreach对数组指针有一些副作用.
据我所知,你链接到的第三个测试没有做这两件事 - 这意味着两个测试都没有做同样的事情 - 这意味着你没有比较两种编写相同代码的方式.
(我也会说这种微优化在实际应用中根本不重要 - 但我想你已经知道了,只是出于好奇而被问到)
在这个测试中还有一件事感觉不对:它只进行一次测试; 对于"更好"的测试,不止一次测试所有这些测试可能是有用的 - 时间大约为100微秒,不需要太多就可以产生巨大的差异.
(考虑到第一次测试在几次刷新后在300%到500%之间变化......)
对于那些不想点击的人来说,这是第一次测试(我得到了3xx%,443%和529%):
foreach($aHash as $key=>$val) {
$aHash[$key] .= "a";
}
Run Code Online (Sandbox Code Playgroud)
第三个(100%):
$key = array_keys($aHash);
$size = sizeOf($key);
for ($i=0; $i<$size; $i++) {
$aHash[$key[$i]] .= "a";
}
Run Code Online (Sandbox Code Playgroud)