gpt4 book ai didi

javascript - 为什么这么多 Array.prototype(迭代)方法这么慢?

转载 作者:行者123 更新时间:2023-11-28 04:18:29 25 4
gpt4 key购买 nike

我决定评估项目中的所有 for 循环,看看是否可以将其替换为 Array.prototype方法 - 其中 75% 可以轻松更换。在开始更换之前,我想我可以进行一些测试。 大多数原型(prototype)方法都比我的机器上的 Polyfill 慢得多(约 80%)

使用常规 for 循环,每个测试都会更快

我没有时间查找其他 jsperf 测试,但我确信大多数原型(prototype)方法会更慢。 为什么?这些函数非常有用,但为什么它们比简单的 for 循环慢这么多

Chrome 60.0.3112/Windows 10 0.0.0

最佳答案

除非 js 被解析并且我们永远不知道实际执行的机器代码是什么样子,否则它可能是检查高级算法将其转译为程序集的效率的好方法。

1) 常规 for 循环:

loop:
CP A,100 //the exit statement
JP z,end // exit

LD A,123//some random math
LD B,124
ADD A,B
LD 123,A

JP loop //the actual loop

end:

2)原型(prototype)函数:

Array_forEach:
loop:
CP A,B //the exit statement
JP z,end // exit

LD 123,A//remove values from direct registers
LD 124,B

LD arg1,array_length //prepare function environment
LD arg2,A

CALL anonymous_func

LD A,123
LD B,124

JP loop //the actual loop

anonymous_func:
LD A,123//some random math
LD B,124
ADD A,B
LD 123,A
RET

正如您所看到的,forEach 使用了一些昂贵的CALL,更不用说上下文更改了。

<小时/>

但是,解析器甚至可能不会让两者都运行那么深的级别,或者它做了一些非常好的内联,这意味着 forEach 有时实际上比 for 循环运行得更快。

关于javascript - 为什么这么多 Array.prototype(迭代)方法这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45636323/

25 4 0
文章推荐: html - 根据 img 大小而不是屏幕大小使用 HTML 或 CSS 加载不同的图像
文章推荐: javascript - 如何在嵌入的 YouTube 视频播放完毕后取消隐藏
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com