我在搞乱基准站点jfprefs并在http://jsperf.com/prefix-or-postfix-increment/9创建了我自己的基准。
基准是 Javascript for 循环的变体,使用前缀和后缀增量器以及不使用就地增量器的 Crockford jslint 样式。
for (var index = 0, len = data.length; index < len; ++index) {
data[index] = data[index] * 2;
}
for (var index = 0, len = data.length; index < len; index++) {
data[index] = data[index] * 2;
}
for (var index = 0, len = data.length; index < len; index += 1) {
data[index] = data[index] * 2;
}
在从几次基准测试中获得数据后,我注意到 Firefox 平均每秒执行大约 15 次操作,而 Chrome 大约每秒执行 300 次。
我认为 JaegerMonkey 和 v8 在速度方面相当可比?我的基准测试是否存在某种缺陷,Firefox 是否在这里进行了某种节流,或者 Javascript 解释器的性能之间的差距真的那么大吗?
更新:感谢jfriend00,我已经得出结论,性能差异并不完全是由于循环迭代,正如在这个版本的测试用例中看到的那样。如您所见,Firefox 速度较慢,但没有我们在初始测试用例中看到的差距那么大。
那么为什么是这样的说法,
data[index] = data[index] * 2;
Firefox 这么慢?