写在前面:
最近带着几个同事一起做一个项目的重构和移植,然后看到了一些看不懂的JS代码,问写它的同事,同事说是能提升运行效率。这我是从心底排斥的,因为除非对性能极大的优化,不然主动降低代码可读性真的不是一个好选择。本着以理服人的精神,我对一些所谓的优化进行了性能测试的对比。接下来进行对比。
使用 Google Chrome 67.0.3396.99浏览器
每项取五组对照
1、使用修改数组长度来删除数组能更快?
var arr1 = [1,2,3,4];
console.time("test")
arr1.length = arr1.length--;
console.timeEnd("test")
var arr2 = [1,2,3,4];
console.time("contrast")
arr2.pop();
console.timeEnd("contrast")
使用以上两段代码进行测试,经过修改运行顺序等测试后,修改数组length在极少数情况下比使用传统方法快,但大多数情况下并无运行效率提升效果。放几组数据,随意感受一下:
修改length | pop |
---|---|
0.014892578125ms | 0.009033203125ms |
0.016845703125ms | 0.010009765625ms |
0.013916015625ms | 0.007080078125ms |
0.027099609375ms | 0.015869140625ms |
0.013916015625ms | 0.01220703125ms |
0.013671875ms | 0.012939453125ms |
一共进行了多组对照后得出结论,通过修改length进行数组删除,只在偶发情况下运行效率高于pop且
修改长度后会导致length出错,该数组的length仍为原来的长度,但是最后一位变成了空
所以结论是:
不推荐使用修改length来代替pop方法
2、给数组的下标赋值进行数组元素添加能提升效率?
var arr2 = [1,2,3,4];
console.time("contrast")
arr2.push(5);
console.timeEnd("contrast")
var arr1 = [1,2,3,4];
console.time("test")
arr1[arr1.length] = 5;
console.timeEnd("test")
length赋值 | push |
---|---|
0.025146484375ms | 0.009033203125ms |
0.016845703125ms | 0.005859375ms |
0.02294921875ms | 0.010009765625ms |
0.0341796875ms | 0.007080078125ms |
0.016845703125ms | 0.022216796875ms |
0.016357421875ms | 0.009033203125ms |
依然是在偶发情况下运行效率会高于push,大多数情况下直接对length赋值不如push效率高
3、利用数组合并进行数组元素添加能提升效率?
var arr2 = [1,2,3,4];
console.time("contrast");
arr2.unshift(0);
console.timeEnd("contrast");
var arr1 = [1,2,3,4];
let tempArr = [0];
console.time("test");
arr1 = tempArr.concat(arr1);
console.timeEnd("test");
tempArr = null;
合并数组 | unshift |
---|---|
0.012939453125ms | 0.008056640625ms |
0.1376953125ms | 0.014892578125ms |
0.170166015625ms | 0.0078125ms |
0.018798828125ms | 0.008056640625ms |
0.01708984375ms | 0.01318359375ms |
偶发情况下性能高于unshift 依然不可靠。
以上就是最近在项目中遇到的伪优化。 不仅看不懂而且还不能提升效率。
总结起来就是,如果有原生方法,就别想着弄些花里胡哨的了。后续如果再遇到会再更新