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 相关文章推荐
JavaScript 版本自动生成文章摘要
Jul 23 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
基于jquery的让textarea自适应高度的插件
Aug 03 Javascript
关于COOKIE个数与大小的问题
Jan 17 Javascript
Extjs Gird 支持中文拼音排序实现代码
Apr 15 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
理解JavaScript中Promise的使用
Jan 18 Javascript
详解AngularJS过滤器的使用
Mar 11 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
Jan 13 Javascript
从零学习node.js之搭建http服务器(二)
Feb 21 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 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_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php生成mysql的数据字典
2016/07/07 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
python网页请求urllib2模块简单封装代码
2014/02/07 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python探索之Metaclass初步了解
2017/10/28 Python
python实现石头剪刀布小游戏
2021/01/20 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python多进程并行代码实例
2019/09/30 Python
python构建指数平滑预测模型示例
2019/11/21 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
python 实现简易的记事本
2020/11/30 Python
三星美国官网:Samsung美国
2017/02/06 全球购物
党员公开承诺书范文
2014/03/25 职场文书
党员四风剖析材料
2014/08/27 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
公司奖励通知
2015/04/21 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
7个关于Python的经典基础案例
2021/11/07 Python
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电