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 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
js中的异常处理try...catch使用介绍
Sep 21 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
jQuery+Ajax实现无刷新操作
Jan 04 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
Bootstrap图片轮播效果详解
Oct 17 Javascript
详解http访问解析流程原理
Oct 18 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
Dec 12 Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 Javascript
原生JS生成指定位数的验证码
Oct 28 Javascript
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
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 中include()与require()的对比
2006/10/09 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
JS实现简单日历特效
2020/01/03 Javascript
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
教师个人鉴定材料
2014/02/08 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书