作者:李春迪
资料来源: https://dailc.github.io/
前言
该篇与前面JS的几种变量交换方式和性能分析的比较属于同一个系列,本文将继续分析JS常用的几种数组扫描方式及其各自的性能比较
起由
上次分析了JS的几种常用变量交换方式及其各自的性能后,认为这种方式很好,试图提取核心逻辑,封装到模板中,扩展到一个系列。 本文是系列中的第二篇,JS序列遍历方式的分析比较
JS数组遍历的几种方式
JS序列遍历基本上是for、forin、foreach、forof、map等几种方法,本文介绍几种用于分析的序列遍历方法和轮廓比较
第一种:普通for循环
代码为以下:for(j=0; 日本航空; j ) {2}
}
简单地说,是:最简单的,使用频率最高的,性能不弱,但还有优化的余地
第二种:优化版for循环
代码为以下:for(j=0,len=arr.length ); 杰伦; j ) {2}
}
简单说明:使用临时变量缓存长度,以避免重复检索数组的长度。 排列较大时优化效果明显。
该方法基本上是所有循环遍历方法中性能最高的
第三种:弱化版for循环
代码为以下:for(j=0; arr!=空值; j ) {2}
}
简单地说,这种方法实际上也严格来说是for循环,不使用length判断,只不过是根据变量本身来判断
实际上,该方法的性能远远小于普通的for循环
第四种:foreach循环
代码为以下:arr.Foreach (函数(e ) {
);
简单来说,数组中的foreach环路使用频率高,实际上性能比普通的for环路弱
第五种:foreach变种
代码为以下:数组.属性.福雷斯.呼叫(数组,函数) El ) )。
);
简单地说,foreach是Array型附属的,不能直接使用非这种类型的,所以有NodeList等变种。 使用此变种,可以使类似的数组具有foreach功能。
实际性能比普通福克斯弱
第六种:forin循环
代码为以下:for (日航) {
}
简单地说,这个循环被很多人喜欢,但实际上,经过分析测试,在很多循环路径方式中,
其效率最低
第七种:map遍历
代码为以下:arr.map (函数(n ) {
);
简单地说,这种方式也使用得比较广泛,虽然使用得很优雅,但实际效率比不上foreach
第八种:forof遍历(需要ES6支持)
代码为以下:for (联想集团) {
);
简单地说,在es6中使用,性能比forin好,但比不上普通的for循环
各种遍历方式的性能对比
上面列举的几种方式都进行了比较分析,但基本上可以得出:的结论普通的for循环是最优雅的
(PS:以上的所有代码都只是进行了空循环,没有对内部执行代码进行再循环,只是分析了各个循环的时间。)
性能对比截图
分析结果1
以下的截图中的数据,是每次用chrome (支持es6 )执行100次的结果)执行10次,共计10个周期中得到的分析结果) )。
可以看到forin循环是最慢的。 优化的常规for循环是最快的
分析结果2
以下的截图数据是用chrome (支持es6 )执行1000次的结果)每次执行100次,共计10个周期中得到的分析结果) )。