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数组定义方法
Sep 10 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
Sep 03 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
Jun 08 Javascript
jQuery Validate初步体验(一)
Dec 12 Javascript
JS函数的几种定义方式分析
Dec 17 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
AngularJS 输入验证详解及实例代码
Jul 28 Javascript
JavaScript中子对象访问父对象的方式详解
Sep 01 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 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
如何去掉文章里的 html 语法
2006/10/09 PHP
php中大括号作用介绍
2012/03/22 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
tab栏切换原理
2017/03/22 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Django实现分页功能
2018/07/02 Python
django Serializer序列化使用方法详解
2018/10/16 Python
Series和DataFrame使用简单入门
2019/11/13 Python
python实时监控logstash日志代码
2020/04/27 Python
用python实现学生管理系统
2020/07/24 Python
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
文明班级建设方案
2014/05/15 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS