我在玩一些JavaScript性能優化,發現了一些有趣的東西。下面是代碼:性能:在對象命名空間vs本地數組中使用數組
function gObject() {
this.obj = [];
this.LIMIT = 100000;
this.doLoopLocal = function() {
var o = [];
for (var i=0;i<this.LIMIT;i+=1) {
o.push(i);
}
return o;
};
this.doLoopObject = function() {
this.obj = [];
for (var i=0;i<this.LIMIT;i+=1) {
this.obj.push(i);
}
};
};
var g = new gObject();
console.time('Using Local array');
g.doLoopLocal();
console.timeEnd('Using Local array');
console.time('Using Object array');
g.doLoopObject();
console.timeEnd('Using Object array');
當我運行它,日誌告訴我,使用本地陣列比使用的對象命名空間中定義數組慢。差異是顯着的 - 8至10倍! (FF 18.0.1)
Using Local array: 16ms
Using Object array: 2ms
截圖:
我總是假設使用函數內局部定義的對象比較快,但是這個實驗表明我錯了。爲什麼會發生這種情況?
更新:我試過的腳本在當地的Firefox的控制檯和數字的東西,我希望在首位:使用本地陣列使用對象數組勝過。所以真正的原因是Firebug出於某種原因歪曲了數字並顯示不正確的結果。要記住的事情。
我將這段代碼粘貼到我的控制檯中,並且本地數組耗時2毫秒,對象數組耗時3毫秒..有趣。如果您交換訂單,運行當地第二? –
我也在Chrome中運行了這個功能,第一次使用「使用本地數組:1.675ms 使用對象數組:3.585ms」。在重複相同的代碼三次後,我得到「使用本地數組:2.316ms 使用對象數組:1.673ms」。更有趣... –
本地陣列耗時1ms,對象陣列在我的Chrome中耗時6ms。 –