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 相关文章推荐
jQuery powerFloat万能浮动层下拉层插件使用介绍
Dec 27 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
在javascript中实现函数数组的方法
Dec 25 Javascript
jquery库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
浅析node.js中close事件
Nov 26 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 Javascript
浅谈Javascript数据属性与访问器属性
Jul 26 Javascript
node实现的爬虫功能示例
May 04 Javascript
微信小程序提交form操作示例
Dec 30 Javascript
vue自定义指令directive的使用方法
Apr 07 Javascript
深入浅析vue中cross-env的使用
Sep 12 Javascript
Node.js API详解之 net模块实例分析
May 18 Javascript
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
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
PDO::commit讲解
2019/01/27 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
python使用tornado实现登录和登出
2018/07/28 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Python中turtle库的使用实例
2019/09/09 Python
Python之多进程与多线程的使用
2021/02/23 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
五一手机促销方案
2014/03/08 职场文书
公关活动策划方案
2014/05/25 职场文书
世界遗产导游词
2015/02/13 职场文书
单位提档介绍信
2015/10/22 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android