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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
JavaScript中window.open用法实例详解
Apr 15 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
Jan 26 Javascript
JavaScript数据类型转换的注意事项
Jul 31 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
Dec 02 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
关于在mongoose中填充外键的方法详解
Aug 14 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
May 02 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
JavaScript前端面试组合函数
Jun 21 Javascript
浅谈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编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
理解php原理的opcodes(操作码)
2010/10/26 PHP
php实现httpRequest的方法
2015/03/13 PHP
PHP内核探索之变量
2015/12/22 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
Python列表删除的三种方法代码分享
2017/10/31 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
军神教学反思
2014/02/04 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python