我使用Object.keys方法对我的设置(i7 @ 3.07GHz,6GB ram)做了一些基准测试,并发现了一些有趣的结果。
这是我尝试过的代码:
var foo = {};
for (var i = 0; i < 600000; i++) {
foo[i] = true;
}
console.time("foobar");
var keys = Object.keys(foo);
console.timeEnd("foobar");
我用不同的值替换xxx,从10 000开始,最高达到1 000 000.当我达到400k时,执行时间大约是121ms,500k~130ms。但随后在600k时它跃升至250ms。为什么这样做?
答案 0 :(得分:1)
您可以检查对象 foo 使用的how much memory。
i = 600000 =&gt; foo 对象占用大约2.4 MB
i = 500000 =&gt; foo 对象占用2MB左右
因此,您的CPU缓存大小可能大约为2MB,当您需要的内存超出其处理能力时,性能会非线性降低(因为它与内存消耗小于2 MB呈线性关系)