請告訴我,將值推入數組的更快方法是什麼?用法Array.push方法
我寫了一個簡單的測試來比較push
和a[a.length]=
方法:
push.js:
self.onmessage = function (event) {
var n = Number(event.data),
i,
pushAr = [],
pushStart,
pushDuration,
ar = [],
start,
duration,
message;
// Push
pushStart = new Date();
for (i = 0; i < n; i += 1) {
pushAr.push(i);
}
pushDuration = new Date() - pushStart;
// explicit
start = new Date();
for (i = 0; i < n; i += 1) {
ar[ar.length] = i;
}
duration = new Date() - start;
message = "N = " + n;
message += "\nPush duration: " + pushDuration + "; ";
message += "Length duration: " + duration;
self.postMessage(message);
};
main.js:
var worker = new Worker("push.js"),
i;
worker.onmessage = function (event) {
console.log(event.data);
};
for (i = 4; i < 8; i += 1) {
worker.postMessage(Math.pow(10, i));
}
而且我得到了以下結果:
鉻:
N = 10000
Push duration: 0; Length duration: 0
N = 100000
Push duration: 3; Length duration: 5
N = 1000000
Push duration: 56; Length duration: 90
N = 10000000
Push duration: 807; Length duration: 948
Safari瀏覽器:
N = 10000
Push duration: 1; Length duration: 4
N = 100000
Push duration: 2; Length duration: 2
N = 1000000
Push duration: 27; Length duration: 41
N = 10000000
Push duration: 283; Length duration: 461
火狐:
N = 10000
Push duration: 1; Length duration: 0
N = 100000
Push duration: 2; Length duration: 2
N = 1000000
Push duration: 11; Length duration: 20
N = 10000000
Push duration: 279; Length duration: 412
好像Array.push
比較快,但是爲什麼有些庫使用array length
呢?這種方法有哪些獎勵?爲什麼Chrome如此之慢?也許有更快的方法存在?
性能差異太依賴於實施,並不足以產生顯着收益。不要[過早優化](http://c2.com/cgi/wiki?PrematureOptimization);編寫最清晰的代碼,然後配置文件,然後優化。 – outis
最快的方法是跟蹤索引(array [i] = value),而不是在每次迭代中對其進行測量。 – kennebec