Javascript在类似条件下函数调用开销方面的差异

Javascript differences in the expense of function calls under similar conditions

本文关键字:方面 开销 函数调用 条件下 Javascript      更新时间:2023-09-26

我一直在努力研究最近组合的两个jsperf的结果,并试图理解其中一个对另一个的影响。两者都处理函数调用与内联操作。

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

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

这里的性能差异在镀铬方面相当小。我上一次跑步是601(内联)vs 555(函数)。这不是我会失眠的事情。

但是,我在这个jsperf中放入了一个奇怪的循环情况:http://jsperf.com/array-traversal-loop-vs-foreach/6

在这里,我只对比较情况1(这是一个原始的for循环)和第三种情况(这是"自己的foreach")感兴趣。在情况1中,我们循环N次并完成我们的工作(简单地陈述变量)。在情况2中,我们循环N次并调用一个函数来完成我们的工作。

但在这里,性能差异是相当大的。1717348(内联)vs 214878(函数)。

我错过了什么?

第一个问题是没有函数调用,因为在这种情况下它是内联的。第二个问题是,即使您使函数不可内联(在chrome中),它的代码也只是位于指令缓存中,并且命中率很高,所以很难看出区别。

对于您的第二个jsperf,分配一个新的函数对象与调用一个函数是完全不同的任务,它比较的是苹果和桔子。