Javascript foreach循环性能

GET*_*Tah 5 javascript performance-testing

我正在考虑改进每个循环的一些,并创建一个测试基准来比较我们使用它们的不同方式.测试可以在这里找到.

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

function add(val) {
   sum += val;
}
values.forEach(add);
Run Code Online (Sandbox Code Playgroud)

比这个表现更好.

 values.forEach(function(val) {
   sum += val;
  });
Run Code Online (Sandbox Code Playgroud)

这些不一样吗?是什么让第一个代码段比第二个更快?

T.J*_*der 6

这是你的测试的问题.你的测试是:

values.forEach(add);
Run Code Online (Sandbox Code Playgroud)

values.forEach(function(val) {
  sum += val;
});
Run Code Online (Sandbox Code Playgroud)

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

Davin Tryon创建了一个在两种情况下都能创建函数的测试:

function add(val) {
 sum += val;
}
values.forEach(add);
Run Code Online (Sandbox Code Playgroud)

values.forEach(function(val) {
  sum += val;
});
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述