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 &amp; DHTML 实例编程(教程)DOM基础和基本API
Jun 02 Javascript
js 操作css实现代码
Jun 11 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
Feb 02 Javascript
Extjs Gird 支持中文拼音排序实现代码
Apr 15 Javascript
用unescape反编码得出汉字示例
Apr 24 Javascript
C++中的string类的用法小结
Aug 07 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
探寻JavaScript中this指针指向
Apr 23 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
Aug 16 Javascript
node实现的爬虫功能示例
May 04 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
Aug 10 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/12/29 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
Python实现去除代码前行号的方法
2015/03/10 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python定时器线程池原理详解
2020/02/26 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
网上快餐厅创业计划书
2014/02/01 职场文书
医药销售求职信范文
2014/02/01 职场文书
应聘英语教师求职信
2014/04/24 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
售房协议书范本2014
2014/10/23 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫