Array的push與unshift方法性能比較分析
更新時(shí)間:2011年03月05日 13:58:18 作者:
Array的push與unshift方法都能給當(dāng)前數(shù)組添加元素,不同的是,push是在末尾添加,而unshift則是在開頭添加。
從原理就可以知道,unshift的效率是較低的。原因是,它每添加一個(gè)元素,都要把現(xiàn)有元素往下移一個(gè)位置。但到底效率差異有多大呢?下面來測試一下。
測試環(huán)境的主要硬件:CPU T7100(1.8G);內(nèi)存4G DDR2 667;硬盤5400轉(zhuǎn)。主要軟件:操作系統(tǒng)為Windows 7;瀏覽器為Firefox 3.6.9。測試代碼:
var arr = [ ], s = +new Date;
// push性能測試
for (var i = 0; i < 50000; i++) {
arr.push(i);
}
console.log(+new Date - s);
s = +new Date;
arr = [ ];
// unshift性能測試
for (var i = 0; i < 50000; i++) {
arr.unshift(i);
}
console.log(+new Date - s);
這段代碼分別執(zhí)行了50000次push和unshift操作,運(yùn)行一次以后,得出結(jié)果:
12
1152
可見,unshift比push要慢差不多100倍!因此,平時(shí)還是要慎用unshift,特別是對(duì)大數(shù)組。那如果一定要達(dá)到unshift的效果,有沒有其他方法呢?答案是肯定的。
Array有一個(gè)叫做reverse的方法,能夠把一個(gè)數(shù)組反轉(zhuǎn)。先把要放進(jìn)數(shù)組的元素用push添加,再執(zhí)行一次reverse,就達(dá)到了unshift的效果。比如:
for (var i = 0; i < 50000; i++) {
arr.push(i);
}
arr.reverse();
reverse的性能又如何呢,下面再來測試:
var arr = [ ], s = +new Date;
for (var i = 0; i < 50000; i++) {
arr.push(i);
}
arr.reverse();
console.log(+new Date - s);
結(jié)果是:
12
可見,reverse性能極高,甚至于沒有額外的消耗,可以放心使用。
測試環(huán)境的主要硬件:CPU T7100(1.8G);內(nèi)存4G DDR2 667;硬盤5400轉(zhuǎn)。主要軟件:操作系統(tǒng)為Windows 7;瀏覽器為Firefox 3.6.9。測試代碼:
復(fù)制代碼 代碼如下:
var arr = [ ], s = +new Date;
// push性能測試
for (var i = 0; i < 50000; i++) {
arr.push(i);
}
console.log(+new Date - s);
s = +new Date;
arr = [ ];
// unshift性能測試
for (var i = 0; i < 50000; i++) {
arr.unshift(i);
}
console.log(+new Date - s);
這段代碼分別執(zhí)行了50000次push和unshift操作,運(yùn)行一次以后,得出結(jié)果:
12
1152
可見,unshift比push要慢差不多100倍!因此,平時(shí)還是要慎用unshift,特別是對(duì)大數(shù)組。那如果一定要達(dá)到unshift的效果,有沒有其他方法呢?答案是肯定的。
Array有一個(gè)叫做reverse的方法,能夠把一個(gè)數(shù)組反轉(zhuǎn)。先把要放進(jìn)數(shù)組的元素用push添加,再執(zhí)行一次reverse,就達(dá)到了unshift的效果。比如:
復(fù)制代碼 代碼如下:
for (var i = 0; i < 50000; i++) {
arr.push(i);
}
arr.reverse();
reverse的性能又如何呢,下面再來測試:
復(fù)制代碼 代碼如下:
var arr = [ ], s = +new Date;
for (var i = 0; i < 50000; i++) {
arr.push(i);
}
arr.reverse();
console.log(+new Date - s);
結(jié)果是:
12
可見,reverse性能極高,甚至于沒有額外的消耗,可以放心使用。
相關(guān)文章
基于three.js實(shí)現(xiàn)的3D粒子動(dòng)效實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于如何基于three.js實(shí)現(xiàn)的3D粒子動(dòng)效的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用three.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04JavaScript實(shí)現(xiàn)Flash炫光波動(dòng)特效
JavaScript寫的炫光波動(dòng)效果,看到一些Flash效果不錯(cuò),用JS也模擬一下,還有很多不完善的地方,給各位參考參考。2015-05-05小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn)
這篇文章主要介紹了小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Javascript 函數(shù)parseInt()轉(zhuǎn)換時(shí)出現(xiàn)bug問題
天測試的測出來的。parseInt(1.13*100),實(shí)際返回值是112,下面有個(gè)示例,大家可以看看下2014-05-05手機(jī)端圖片縮放旋轉(zhuǎn)全屏查看PhotoSwipe.js插件實(shí)現(xiàn)
這篇文章主要介紹了手機(jī)端圖片縮放旋轉(zhuǎn)全屏查看PhotoSwipe.js插件實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-08-08