Javascript foreach循环性能

时间:2015-01-22 09:19:45

标签: javascript performance-testing

我正在考虑为每个循环改进一些,并创建一个测试基准来比较我们使用它们的不同方式。测试可以是found here

我很惊讶地发现这段代码:

function add(val) {
   sum += val;
}
values.forEach(add);

比这更好。

 values.forEach(function(val) {
   sum += val;
  });

阿伦这些完全一样吗?是什么让第一个代码片段比第二个代码片段更快?

1 个答案:

答案 0 :(得分:6)

这是您测试的问题。你的测试是:

values.forEach(add);

values.forEach(function(val) {
  sum += val;
});

在第二个测试中,您将计算函数的创建时间以及forEach的执行时间。在第一个测试中,您没有计算功能的创建时间;这是在测试的设置阶段完成的,没有定时。

Davin Tryon创建了a test that creates the functions in both cases

function add(val) {
 sum += val;
}
values.forEach(add);

VS

values.forEach(function(val) {
  sum += val;
});

...其中性能上的差异在某些引擎上消失,而另一方面(声明更慢)则在某些引擎上消失。 (后者可能是引擎在测试过程中发现它可以内联函数,或者至少跳过一些无法通过声明跳过的步骤。)

enter image description here