Javascript Object.keys执行时间

Javascript Object.keys执行时间,javascript,node.js,object,Javascript,Node.js,Object,我使用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"); var foo={}; 对于(变量i=

我使用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");
var foo={};
对于(变量i=0;i<600000;i++){
foo[i]=真;
}
控制台时间(“foobar”);
var keys=Object.keys(foo);
控制台。时间结束(“foobar”);
我用不同的值替换了xxx,从10000开始,一直到1000000。当我达到400k时,执行时间约为121ms,500k~130ms。但在600k时,它跳到了250ms。它为什么会这样做?

您可以检查对象foo的使用情况

  • i=600000=>foo对象占用大约2.4MB的空间时

  • i=500000=>foo对象占用2MB左右时


  • 因此,您的CPU缓存大小可能在2MB左右,当您需要的内存超过其处理能力时,性能会非线性下降(因为它是线性的,内存消耗小于2MB)

    啊,我明白了。非常感谢。