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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
JavaScript实现添加及删除事件的方法小结
Aug 04 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 Javascript
vue $mount 和 el的区别说明
Sep 11 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中慎用双等于(==)的详解
2013/06/06 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python的文件操作方法汇总
2017/11/10 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Python 日期与时间转换的方法
2020/08/01 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
半年思想汇报
2013/12/30 职场文书
高中运动会广播稿
2014/01/21 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
总经理助理岗位职责
2015/01/31 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python