Javascript在类似条件下的函数调用费用差异

时间:2014-11-07 15:07:08

标签: javascript performance closures

我一直在努力解决我最近整理的两个jsperf的结果,并试图了解一个人对另一个人的影响。两者都解决了函数调用与内联函数的关系。

第一个jsperf如果简单:http://jsperf.com/bool-exp-vs-func-call

在第一种情况下,我们循环并调用一个函数来计算每次调用后随机旋转的布尔表达式。在第二种情况下,我们循环,但我们直接在循环中评估相同的布尔表达式。

这里的性能差异非常小。我的最后一次运行是601(内联)vs 555(功能)。不是我会失眠的东西。

但是有一个奇怪的循环问题,我把它放到了这个jsperf中:http://jsperf.com/array-traversal-loop-vs-foreach/6

在这里,我只对比较案例1感兴趣 - 案例1 - 原始for循环与第3个案例,即自己的foreach'。在案例1中,我们循环N次并完成我们的工作(简单地说明变量)。在案例2中,我们循环N次并调用函数来完成我们的工作。

但在这里,性能差异相当大。 1,717,348(内联)vs 214,878(功能)。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

第一个问题是没有函数调用,因为在这种情况下它是内联的。第二个问题是即使你使用函数non-inlineable(在chrome中),它的代码只是位于指令缓存中并且打得非常好,所以差别很难看出来。

对于你的第二个jsperf,分配一个新的函数对象与调用一个函数完全不同,它正在比较苹果和橙子。