lifesimple
V2EX  ›  问与答

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

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

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

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