簡體   English   中英

為什么要按大小更快地迭代數組

[英]Why iterate by array with size faster

在第一個例子中,我創建了長度為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)[]之間的性能差異消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM