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模拟实现C# String.format函数功能代码
Nov 25 Javascript
使用 js+正则表达式为关键词添加链接
Nov 11 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
JavaScript中的this机制
Jan 30 Javascript
Javascript的无new构建实例详解
May 15 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
在React中如何优雅的处理事件响应详解
Jul 24 Javascript
vue如何解决循环引用组件报错的问题
Sep 22 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
Feb 21 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
Apr 28 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 Javascript
vue中改变滚动条样式的方法
Mar 03 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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Python编程实现蚁群算法详解
2017/11/13 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
python适合人工智能的理由和优势
2019/06/28 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
使用Tkinter制作信息提示框
2020/02/18 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
电子邮箱格式怎么写
2014/01/12 职场文书
个人自我评价范文
2014/02/05 职场文书
电子商务专业求职信
2014/03/08 职场文书
产品发布会策划方案
2014/05/12 职场文书
工商干部先进事迹
2014/05/14 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL