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

2022-03-23 11:49:44 +08:00
 lifesimple

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 好像根本也无所谓。 基本也不会这么大数据来循环

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

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

不恰当的实现类似这种:
拿到任何数据先转换成数组,然后统一用 forEach ;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX