lifesimple
V2EX  ›  问与答

javascript 各种循环性能问题要考虑么?

  •  
  •   lifesimple · Mar 23, 2022 · 2113 views
    This topic created in 1518 days ago, the information mentioned may be changed or developed.

    for in,for of, for, map, some, forEach

    日常大部分循环都喜欢用map 除非有些做判断校验中途停止 return true 的用some 想问下对于浏览器来说需要关心这种「性能优化」不,个人感觉可能用 for forEach 这种性能好点 但也就是 几(几十)毫秒的事吧。需要根据不同场景使用不同循环操作不

    大家一般前端代码循环都用啥呢

    用 timeEnd 试了下 数组 10w 长度时,for:1.8ms map:2.0ms 数组 100w 长度时, for:2.6ms map:12.7ms 差的还是有点多,但差这么 10ms 好像根本也无所谓。 基本也不会这么大数据来循环

    11 replies    2022-03-23 14:13:54 +08:00
    AV1
        1
    AV1  
       Mar 23, 2022
    循环性能考虑不多,更多的是考虑 IO 性能。
    像你这 100w 数据的循环性能,确实影响不大。
    但这 100w 数据从数据库里查出来再返回到浏览器,这造成的性能影响比循环大多了。
    murmur
        2
    murmur  
       Mar 23, 2022
    100w 这个数据是什么需求,给个场景,不要说什么视频编解码,这玩意就是应该给后端用 c 算的,或者做 app 调汇编专用指令集做
    lifesimple
        3
    lifesimple  
    OP
       Mar 23, 2022
    @DOLLOR 是的 基本上也不会这么操作,数据多就分页完事了。
    @murmur 没有这个场景 只是为了测一下 map for 性能上差多少,感觉日常使用应该不需要考虑这种 api 的性能差
    simple233
        4
    simple233  
       Mar 23, 2022
    不用考虑性能,差距很小...
    Leviathann
        5
    Leviathann  
       Mar 23, 2022
    什么 10w 100w
    反正我基本拿到手的极少超过 100
    而且一般还是有网络请求的时候才会有循环,一来一回就几十毫秒过去了
    不过 some find 啥的是无法完全对应 foreach 的操作的
    比如一个 function 的 list ,遍历过去当 function 的返回值符合条件的时候退出循环,并拿到这个返回值
    只能通过外部临时变量存计算的返回值,从代码语义上看这个还不如用 forEach
    yaphets666
        6
    yaphets666  
       Mar 23, 2022 via iPhone
    最优的就是 for ,不过需要考虑循环性能的时候,大概率是设计有问题
    fishlium
        7
    fishlium  
       Mar 23, 2022
    不用考虑,较真就是 for 性能好一丢丢
    Vegetable
        8
    Vegetable  
       Mar 23, 2022
    没啥区别吧,jit 的
    Buges
        9
    Buges  
       Mar 23, 2022 via Android
    如果你要做的操作多了,map/filter 之类的函数性能就十分差了,js 里这些函数都不是 lazy 的。
    xingyue
        10
    xingyue  
       Mar 23, 2022
    看完这个帖子,我决定把昨天写的 todo 删掉( dog.jpg
    autoxbc
        11
    autoxbc  
       Mar 23, 2022   ❤️ 1
    第一考虑准确的语义;
    第二考虑恰当的实现;
    第三才是性能差异;

    语义和性能比较好理解,恰当的实现类似这种:
    拿到数组应该用 forEach ;
    拿到对象字面量应该用 for ... in ;
    拿到迭代器应该用 for ... of ;

    不恰当的实现类似这种:
    拿到任何数据先转换成数组,然后统一用 forEach ;
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3649 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    ♥ Do have faith in what you're doing.