【稍微聊聊】一些胡说八道的JS技巧(辟谣贴)

写在前面:

最近带着几个同事一起做一个项目的重构和移植,然后看到了一些看不懂的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在极少数情况下比使用传统方法快,但大多数情况下并无运行效率提升效果。放几组数据,随意感受一下:

修改lengthpop
0.014892578125ms0.009033203125ms
0.016845703125ms0.010009765625ms
0.013916015625ms0.007080078125ms
0.027099609375ms0.015869140625ms
0.013916015625ms0.01220703125ms
0.013671875ms0.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.025146484375ms0.009033203125ms
0.016845703125ms0.005859375ms
0.02294921875ms0.010009765625ms
0.0341796875ms0.007080078125ms
0.016845703125ms0.022216796875ms
0.016357421875ms0.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.012939453125ms0.008056640625ms
0.1376953125ms0.014892578125ms
0.170166015625ms0.0078125ms
0.018798828125ms0.008056640625ms
0.01708984375ms0.01318359375ms

偶发情况下性能高于unshift 依然不可靠。


以上就是最近在项目中遇到的伪优化。 不仅看不懂而且还不能提升效率

总结起来就是,如果有原生方法,就别想着弄些花里胡哨的了。后续如果再遇到会再更新

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值