Array的push与unshift方法性能比较分析
从原理就可以知道,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性能极高,甚至于没有额外的消耗,可以放心使用。
Array的push与unshift方法性能比较分析的更多相关文章
- 测试数组push和unshift方法的效率
		先贴代码,之后再来补内容 <!DOCTYPE HTML> <html> <head> <title>测试数组push和unshift方法的效率</ ... 
- js array filter pop push shift unshift方法
		JavaScript Array filter() 方法 JavaScript Array 对象 实例 返回数组 ages 中所有元素都大于 18 的元素: var ages = [32, 33, ... 
- 数组中的元素    增加push用法 unshift() 方法   和减少pop() 方法 shift()     和其他位置增删 splice() 方法  join() 方法 reverse() 方法 sort() 方法
		push用法 push 英 [pʊʃ] 美 [pʊʃ] vt. 推,推动; vt. 按; 推动,增加; 对…施加压力,逼迫; 说服; n. 推,决心; 大规模攻势; 矢志的追求 定义和用法 push( ... 
- js 数组的pop(),push(),shift(),unshift()方法小结
		关于数组的一些操作方法小结: pop(),push(),shift(),unshift()四个方法都可改变数组的内容以及长度: 1.pop() :删除数组的最后一个元素,并返回被删除的这个元素的值: ... 
- js源码-数组中的push()和unshift()方法的源码实现
		人话不多,直接上代码,在代码中解析,不足之处请谅解: push() Array.prototype._push=function(...value){//在Array原型链上添加_push方法 for ... 
- 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)
		中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 ... 
- push和unshift方法
		push和unushift都是向数组插入元素. push是向数组尾部插入元素. unshift是向数组头部插入元素. 共同点:都可以一次插入多个元素. arrayObject.push(newelem ... 
- Vue源码之----为什么Vue中Array的pop,push等方法可以reactive,而Array[0]='a'这样的方法不会reactive?
		这就要从reactive开始讲起了,粗略的说,js的操作能引起页面上显示的改变,是因为该操作引起了组件的重新渲染,渲染会生成新的虚拟节点,新节点和旧节点会对比,操作浏览器的node进行改变. vue实 ... 
- 数组的push()、pop()、shift()和unshift()方法
		JavaScript的数组是一个拥有堆栈和队列自身优点的global对象.也就是说JavaScript数组可以表现的像栈(LIFO)和队列(FIFO)一样操作.这也是JavaScript数组强大的可操 ... 
随机推荐
- 在C#中实现简单的对象池
			当我们频繁创建删除大量对象的时候,对象的创建删除所造成的开销就不容小觑了.为了提高性能,我们往往需要实现一个对象池作为Cache:使用对象时,它从池中提取.用完对象时,它放回池中.从而减少创建对象的开 ... 
- SYSPROCESSES 查看连接
			原文:SYSPROCESSES 查看连接 SELECT at.text,sp.* FROM[Master].[dbo].[SYSPROCESSES] sp CROSS APPLY sys.dm_exe ... 
- CGCS2000坐标系与其他坐标系间的差异和转换方法
			转自 CGCS2000坐标系与其他坐标系间的差异和转换方法 1954北京坐标系和1980西安坐标系是以天文大地网等经典测量技术为基础的局部坐标系. CGCS2000是以地球质量中心为原点的地心大地坐 ... 
- Charles 抓包的工具
			下面是整个链接. http://www.winshy.com/2013/08/something_about_charlesproxy/?utm_source=rss Charles:移动端抓包工具安 ... 
- EasyUi datagrid鼠标的悬停效果
			/*easyui,鼠标划过悬浮,显示一个小提示框的方法*/ { field : 'goodsName', title : '标的描述', width : 200, align : 'center', ... 
- kubernetes监控--Prometheus
			本文基于kubernetes 1.5.2版本编写 kube-state-metrics kubectl create ns monitoring kubectl create sa -n monito ... 
- Android Server Push - MQTT推送实现tokudu
			转自:http://www.juapk.com/thread-2834-1-1.html 项目说明:采用MQTT协议实现Android推送消息传输协议:IBM的MQTT协议 JAR包地址:下载服务器安 ... 
- numpy 多维数组的存取
			多维数组的存取和一维数组类似,由于多维数组有多个轴,所以他的下标需要多个值来表示.这里讨论的主要是二维数组.二维数组0轴以行为单位,1轴以列为单位,存取数组使用元组作为下标,需要注意的是,python ... 
- squid 访问日志记录
			squid日志记录在squid.conf 也可记录.并且squid日志可以不记录静态项 在squid.conf 加入 (1)access_log /var/log/squid/access.log ... 
- Scrapy的介绍和用法
			转载:https://www.toutiao.com/i6493421606306578958/ Scrapy是爬虫必须学会的一个框架!他确实很难搞的透彻!今天就不给大家全部介绍了!还是介绍其中的Cr ... 
