【发布时间】:2015-06-03 23:14:10
【问题描述】:
在研究数组分配性能时,我偶然发现了这个jsperf,据称它显示for 形式的循环的速度非常显着:
var i, j = 0;
for (i = 0; i < n; i++) {
myArray[j++] = i;
}
... 在当前浏览器中。这种“双增量”形式对我来说完全陌生,而且看起来很奇怪。我找不到任何关于它的讨论。
Many people 多年来一直警告说,由于编译器优化越来越聪明,来自微基准的误导性数据。这是其中一种情况吗?为什么或者为什么不?如果 jsperf 写错了,我希望看到一个正确的、经过修订的 jsperf,它更准确地反映了现实世界的情况。
【问题讨论】:
-
我真的不知道你在问什么。你是在问为什么使用
myArray[j++] = i而不是myArray[i] = i?如果是这样,请在您的问题中说出来。 -
是的,那些测试用例是有缺陷的。每个循环前面都应该有 `myArray = [];
, otherwise they measure totally different things depending on how the globalmyArray` 被修改。 -
@Bergi 这不是问题所在。 “准备”代码在每次测试之前运行。
-
@Mark:不,它没有。它只在每个测试循环之前运行一次。
-
@Bergi 我没有关注。测试是循环。它应该在每个测试循环之前运行一次。有什么问题?
标签: javascript arrays performance benchmarking