在Chrome中進行測試時,反轉數組的簡單實現速度是Javascript中內置函數的兩倍。 V8在做什麼?下面是測試:在版本20.0.1132.47 Ubuntu的爲什麼自定義數組的反向執行速度比使用V8中的.reverse()快兩倍
var newArr = [];
var newArrDefault = [];
for(var i = 0; i < 10000000; i++){
newArr[i] = i;
newArrDefault[i] = i;
}
var startDefault = new Date();
newArrDefault.reverse();
console.log("Built in method took " + (new Date().getTime() - startDefault.getTime()));
var start = new Date();
for(var i = 0; i < newArr.length/2; i++){
var tmp = newArr[i];
newArr[i] = newArr[newArr.length-i-1];
newArr[newArr.length-i-1] = tmp;
}
console.log("Custom method took " + (new Date().getTime() - start.getTime()));
結果12.04(144678):
Built in method took 149
Custom method took 71
您的結果在Chrome的jsPerf http://jsperf.com/arrayreversecomparison中得到確認。自定義功能比內置功能更快。這裏是'.reverse()'的實現規範。http://stackoverflow.com/a/7912713/816620 – jfriend00
@ jfriend00實際上,jsperf案例的結果顯示:內置函數比自定義函數更快。 –
一個區別是符合實現測試每個索引是否存在成員。 OP沒有,所以它會創建以前沒有的成員(因此不符合ECMA-262)。每個索引(上和下)應首先用'hasOwnProperty'進行測試。 – RobG