歹佬们,问个 js 小问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gaocc
V2EX    问与答

歹佬们,问个 js 小问题?

  •  1
     
  •   gaocc 2022-01-25 16:01:20 +08:00 1765 次点击
    这是一个创建于 1356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 vue2 框架里看到这样一段代码,有个细节没看懂

    function getTypeIndex (type, expectedTypes): number { if (!Array.isArray(expectedTypes)) { return isSameType(expectedTypes, type) ? 0 : -1 } for (let i = 0, len = expectedTypes.length; i < len; i++) { if (isSameType(expectedTypes[i], type)) { return i } } return -1 } 

    for (let i = 0, len = expectedTypes.length; i < len; i++)

    这行代码框架里是这样的

    for (let i = 0; i < expectedTypes.length; i++)

    一般习惯是这样的

    框架这种写法有什么好处吗?

    9 条回复    2022-01-25 16:45:39 +08:00
    clcx
        1
    clcx  
       2022-01-25 16:10:06 +08:00   1
    上满减少了计算次数,中间的比较语句只需要和一个固定值比较;
    下面每次都要先计算数组长度,再进行比较
    gaocc
        2
    gaocc  
    OP
       2022-01-25 16:14:54 +08:00
    @clcx 哦哦对哦,一下没反应过来。thanks
    kop1989smurf
        3
    kop1989smurf  
       2022-01-25 16:15:37 +08:00
    同意楼上。
    拆开就能看出区别了,一个是:if(i<30),一个是 if(i<xx.length)
    循环 n 次,下面就多获取了 n-1 次数组的长度。
    murmur
        4
    murmur  
       2022-01-25 16:16:03 +08:00
    我刚才搜了一下,对于新浏览器没区别的,你知道缓存,浏览器也不是傻子,大多数场景下你感觉不出这个优化,还是要靠不要频繁操作 dom 来获取性能
    sgiyy
        5
    sgiyy  
       2022-01-25 16:16:31 +08:00
    一般是作为性能优化的手段,用变量缓存后面重复调用的数据。涉及不同的场景,实际效果可能还不一样。
    也可以看下这个讨论: https://www.zhihu.com/question/29714976
    murmur
        6
    murmur  
       2022-01-25 16:16:51 +08:00   1
    https://stackoverflow.com/questions/9592241/Javascript-is-the-length-method-efficient

    Iterating over a thousand items, using array.length will only cost you an extra 2 ms. In other words: beware premature optimization.

    1000 词循环只多不到 2ms ,换句话说,不要过度优化
    gaocc
        7
    gaocc  
    OP
       2022-01-25 16:42:47 +08:00
    gaocc
        8
    gaocc  
    OP
       2022-01-25 16:43:59 +08:00
    看了下,性能问题没大区别。就凸显一个代码习惯和角度问题吧
    我以后应该都是这样方式了 for (let i = 0, len = expectedTypes.length; i < len; i++)
    jawilx
        9
    jawilx  
       2022-01-25 16:45:39 +08:00
    就一个习惯问题吧,现在浏览器已经优化的很好了,没必要搞很复杂
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5528 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:31 PVG 15:31 LAX 00:31 JFK 03:31
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86