一个js的性能问题

一个js的性能问题
0

在一个技术交流群看到了下面这个问题

我这么操作了一下

image

然后看到有人这么解决:

pic

因为经常看见有人用es6的Array.from、Array.find 这类新增的方法,我偶尔也用,但是本着喜旧厌新的态度,尝试了一下:
a)生成数组

console.time(); new Array(5);console.timeEnd()
0.001953125ms;// 这里array是空数组组

console.time();  Array.from({length: 5});console.timeEnd()
0.046142578125ms // 这里array是undefined数组

这里发现生成数组耗时已经有明显的不同,再试了一下100万个的长度,使用new Array的方式生成,耗时5.68毫秒,用Array.from 生成,页面崩溃了。
对比null和undefined的区别,使用Array.from的方式是在枚举类数组对象的过程中发现对应的index下没有值,然后对数组中每个元素显示的赋值undefined,分配了内存,new Array只是将元素设置为只是声明了一个数组对象,直接操作length为100万,使用JSON.stringify,发现全部赋值为null。实际上声明为null的变量有个特性就是:栈中的变量没有指向堆中的内存对象,是游离的指针,GC保留了随时回收的权力。两者在内存的占用上上有明显的不同,null更优,老方法更合适。

b)随机数逻辑差不多,略过。

c)插入随机数,在已有元素的情况下,重复遍历,使用map的方式,大约是100万的阶乘计算,毫无意义,已经是个常识;push,显而易见会快速的多。

d)输出,略。

在工作中不要为了新语法而ES6/7新语法,灵活使用,前端也是要注意性能和算法,老的api在这方面应该是有明显的长处的

5赞

学习了