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 相关文章推荐
求解开jscript.encode代码的asp函数
Feb 28 Javascript
js form 验证函数 当前比较流行的错误提示
Jun 23 Javascript
javascript中的107个基础知识收集整理 推荐
Mar 29 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
JS中BOM相关知识点总结(必看篇)
Nov 22 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
axios基本入门用法教程
Mar 25 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
如何检查一个对象是否为空
Apr 11 Javascript
JavaScript实现世界各地时间显示
Sep 07 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
Laravel框架表单验证详解
2014/09/04 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
python队列原理及实现方法示例
2019/11/27 Python
Python PyQt5整理介绍
2020/04/01 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
戴尔美国官网:Dell
2016/08/31 全球购物
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
测试工程师程序员求职信范文
2014/02/20 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
管理失职检讨书范文
2015/05/05 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
Python编写nmap扫描工具
2021/07/21 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js