Array的push与unshift方法性能比较分析


Posted in Javascript onMarch 05, 2011

从原理就可以知道,unshift的效率是较低的。原因是,它每添加一个元素,都要把现有元素往下移一个位置。但到底效率差异有多大呢?下面来测试一下。
测试环境的主要硬件:CPU T7100(1.8G);内存4G DDR2 667;硬盘5400转。主要软件:操作系统为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);

这段代码分别执行了50000次push和unshift操作,运行一次以后,得出结果:
12
1152
可见,unshift比push要慢差不多100倍!因此,平时还是要慎用unshift,特别是对大数组。那如果一定要达到unshift的效果,有没有其他方法呢?答案是肯定的。
Array有一个叫做reverse的方法,能够把一个数组反转。先把要放进数组的元素用push添加,再执行一次reverse,就达到了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);

结果是:
12
可见,reverse性能极高,甚至于没有额外的消耗,可以放心使用。
Javascript 相关文章推荐
JS模拟的QQ面板上的多级可展开的菜单
Oct 10 Javascript
javascript之学会吝啬 精简代码
Apr 25 Javascript
JavaScript淡入淡出渐变简单实例
Aug 06 Javascript
深入理解jQuery之事件移除
Jun 02 Javascript
如何用JS判断两个数字的大小
Jul 21 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 Javascript
JavaScript实现二分查找实例代码
Feb 22 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
理解Angular的providers给Http添加默认headers
Jul 04 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
如何从头实现一个node.js的koa框架
Jun 17 Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 #Javascript
判断用户是否在线的代码
Mar 05 #Javascript
判断用户的在线状态 onbeforeunload事件
Mar 05 #Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 #Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 #Javascript
如何确保JavaScript的执行顺序 之实战篇
Mar 03 #Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 #Javascript
You might like
基于mysql的bbs设计(二)
2006/10/09 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
js中的reduce()函数讲解
2019/01/18 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
python中uuid模块实例浅析
2020/12/29 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
历史专业个人求职信分享
2013/12/20 职场文书
春风行动实施方案
2014/03/28 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
求职简历自我评价2015
2015/03/10 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书