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 相关文章推荐
javascript中call apply 的应用场景
Apr 16 Javascript
web前端开发JQuery常用实例代码片段(50个)
Aug 28 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
JavaScript探测CSS动画是否已经完成的方法
Aug 30 Javascript
javascript中this用法实例详解
Apr 06 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
layui实现动态和静态分页
Apr 28 Javascript
vue+webpack模拟后台数据的示例代码
Jul 26 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
Javascript读取上传文件内容/类型/字节数
Apr 30 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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
英国电信商店:BT Shop
2019/12/17 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
商场经理竞聘演讲稿
2014/01/01 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
《王二小》教学反思
2014/02/27 职场文书
运输服务质量承诺书
2014/03/27 职场文书
爱国口号
2014/06/19 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
辩护词格式
2015/05/22 职场文书
捐款仪式主持词
2015/07/04 职场文书
python - timeit 时间模块
2021/04/06 Python
Python初识逻辑与if语句及用法大全
2021/08/07 Python
python如何查找列表中元素的位置
2022/05/30 Python