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 ajax BUG:object doesn't support this property or method
Jul 06 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
jquery统计复选框选中示例
Nov 05 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 Javascript
JavaScript实现弹窗效果代码分析
Mar 09 Javascript
vue+iview写个弹框的示例代码
Dec 05 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
Mar 15 Javascript
jQuery 筛选器简单操作示例
Oct 02 jQuery
Vue为什么要谨慎使用$attrs与$listeners
Aug 27 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
thinkphp多层MVC用法分析
2015/12/30 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
浅谈mint-ui 填坑之路
2017/11/06 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python异常学习笔记
2015/02/03 Python
简单实现python进度条脚本
2017/12/18 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
python 元组和列表的区别
2020/12/30 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
美德好少年事迹材料
2014/01/19 职场文书
和谐社区口号
2014/06/19 职场文书
公司活动总结范文
2014/07/01 职场文书
2014年团支部工作总结
2014/11/17 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
python读取mnist数据集方法案例详解
2021/09/04 Python