为什么要更快地按大小的数组进行迭代



在第一个例子中,我创建了长度为 1000 的空数组:

var arr = new Array(1000);
for (var i = 0; i < arr.length; i++)
  arr[i] = i;

在第二个示例中创建了长度为 0 的空数组:

var arr = [];
for (var i = 0; i < 1000; i++)
  arr.push(i);

在 OS X 10.10.3 上的 Chrome 41.0.2272.118 中进行测试,第一个块运行得更快。为什么?因为 JavaScript 引擎知道数组大小?

基准测试在这里 http://jsperf.com/poerttest/2。

如果不指定数组大小,它将不得不继续分配更多空间。但是,如果在开头指定大小,则只会分配一次。

是的。当你分配大小时,解释器知道它只分配了1000个元素的内存/空间。因此,当您插入元素时,它只是一个操作。但是当你声明动态数组时,第二种情况是,解释器必须增加数组的大小,然后推送元素。这是2个操作

另一种可能性是push()比分配给固定位置更昂贵。但测试表明情况并非如此。

发生的情况是,空数组的起始容量相对较小(哈希池或实际数组),并且增加该池的成本很高。通过尝试使用较小的尺寸可以看到这一点:在 100 个元素时,Array(100)[]之间的性能差异消失了。

相关内容

  • 没有找到相关文章

最新更新