JS往数组中添加项性能分析


Posted in Javascript onFebruary 25, 2015

比较了4种可以向数组添加项的方法之间的性能:

使用索引器添加

console.time("index");

var a = [];

for (var i = 0, l = times; i < l; i++) {

    a[i] = i;

}

console.timeEnd("index");

使用push方法

console.time("push");

var a = [];

for (var i = 0, l = times; i < l; i++) {

    a.push(i);

}

console.timeEnd("push");

使用concat方法

console.time("concat");

var a = [];

for (var i = 0, l = times; i < l; i++) {

    a.concat(i);

}

console.timeEnd("concat");

使用concat方法,参数为数组

console.time("concat with array");

var a = [];

for (var i = 0, l = times; i < l; i++) {

    a.concat([i]);

}

console.timeEnd("concat with array");

把times设置为10000(万)次:

index: 0.310ms

push: 1.476ms

concat: 8.911ms

concat with array: 2.261ms

把times设置为100000(十万)次:

index: 1.967ms

push: 11.980ms

concat: 70.410ms

concat with array: 28.292ms

把times设置为1000000(百万)次:

index: 138.559ms

push: 93.074ms

concat: 608.768ms

concat with array: 243.371ms

把times设置为10000000(千万)次:

index: 1473.733ms

push: 611.636ms

concat: 6058.528ms

concat with array: 2431.689ms

总结

该结论仅受用与chrome浏览器

concat方法的执行效率是最慢的
相比两种concat方法的传参,当接受参数为数组时,执行效率要高于接受参数为非数组
索引器多数情况下执行效率要高于push方法
当执行次数越来越多时,索引器的执行效率开始不如push方法

浏览器对比

感谢网友指出,本人经验不足,在这里补上浏览器之间的横向对比

首先是使用concat方法,在ie和firefox中,参数为数组执行效率反而别参数为非数组慢一点,但差异并不大
然后index和push的方法比concat快是肯定的了,在ie中使用index方法始终要比push快,在firefox中push略胜一筹但差异不大
比较3个浏览器之间index和push方法的执行效率差异是巨大的,firefox的执行效率要比ie和chrome高出不少,在百万次的情况下,基本快10倍,ie相比另外两者最慢

以下为百万次的结果:

// firefox

index: timer started

index: 229.79ms

push: timer started

push: 205.12ms

concat: timer started

concat: 2136.99ms

concat with array: timer started

concat with array: 2365.18ms

```
// ie

index: 2,533.744 毫秒

push: 3,865.979 毫秒

concat: 4,303.139 毫秒

concat with array: 4,792.208 毫秒

本文仅仅是探讨JS的性能,通过对比加深小伙伴们对javascript的理解,希望大家能够喜欢。

Javascript 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
js event事件的传递与冒泡处理
Dec 06 Javascript
jquery ajax提交表单数据的两种实现方法
Apr 29 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
Jun 20 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
jquery实现清新实用的网页菜单效果
Aug 28 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
详解javascript中的babel到底是什么
Jun 21 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
Nov 30 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
浅谈JavaScript中的String对象常用方法
Feb 25 #Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
Feb 25 #Javascript
提交按钮的name='submit'引起的js失效问题及原因
Feb 25 #Javascript
JavaScript生成的动态下雨背景效果实现方法
Feb 25 #Javascript
JS实现进入页面时渐变背景色的方法
Feb 25 #Javascript
JS实现让网页背景图片斜向移动的方法
Feb 25 #Javascript
Javascript中获取对象的原型对象的方法小结
Feb 25 #Javascript
You might like
php中取得URL的根域名的代码
2011/03/23 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
简单实现jQuery轮播效果
2017/08/18 jQuery
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
Python中非常实用的一些功能和函数分享
2015/02/14 Python
python线程池threadpool使用篇
2018/04/27 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
详解python的四种内置数据结构
2019/03/19 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
司机检讨书
2014/02/13 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
工作一年自我鉴定
2019/06/20 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python
git中cherry-pick命令的使用教程
2022/06/25 Servers