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 相关文章推荐
从新浪弄下来的全屏广告代码 与使用说明
Mar 15 Javascript
js倒计时小程序
Nov 05 Javascript
使用jquery prev()方法找到同级的前一个元素
Jul 11 Javascript
JavaScript通过字符串调用函数的实现方法
Mar 18 Javascript
JavaScript Length 属性的总结
Nov 02 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
Feb 06 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
Mar 10 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
JavaScript实现三级联动菜单效果
Aug 16 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
animate.css在vue项目中的使用教程
Aug 05 Javascript
Element Carousel 走马灯的具体实现
Jul 26 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 fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
php实现的双色球算法示例
2017/06/20 PHP
js计数器代码
2006/11/04 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
Python中使用中文的方法
2011/02/19 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
浅析Python requests 模块
2020/10/09 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
工程项目经理岗位职责
2013/12/15 职场文书
自查自纠工作总结
2014/10/15 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
导游词之天津古文化街
2019/11/09 职场文书
MySQL索引失效场景及解决方案
2022/07/23 MySQL