[英]Why is using a loop to iterate from start of array to end faster than iterating both start to end and end to start?
[英]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.