V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lifesimple
V2EX  ›  问与答

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

  •  
  •   lifesimple · 2022-03-23 11:49:44 +08:00 · 1661 次点击
    这是一个创建于 1011 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    不恰当的实现类似这种:
    拿到任何数据先转换成数组,然后统一用 forEach ;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.