Javascript foreach 循环性能

标签 javascript performance-testing

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

我惊讶地发现这段代码:

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

比这个表现更好。

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

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

最佳答案

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

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);

对比

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

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

enter image description here

关于Javascript foreach 循环性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28085021/

相关文章:

javascript - 我可以让 <button> 不提交表单吗?

javascript - 如何设置 Ext.button.Split 在菜单为空时不显示箭头?

php - 雅虎联系人 API

javascript - AngularJS从文本区域保存html

javascript - 奇怪的 JavaScript 表示法,全是圆括号和方括号

regex - 如何在Jmeter中使用正则表达式提取多个值

python - 如何衡量覆盖率(在生产系统中)?

database - PostgreSQL性能测试——注意事项?

c - AES 192、AES-256 的段错误,不适用于 AES-128 位

java - 如何配置 jmeter 来测试安全的 java Rest api