【发布时间】:2018-01-20 00:54:15
【问题描述】:
我决定评估我项目中的所有 for 循环,看看是否可以用 Array.prototype 方法替换它 - 其中 75% 可以轻松替换。在开始替换之前,我想我可能会进行一些测试。 在我的机器上,大多数原型方法比 polyfill 慢得多(~80%)。
使用常规 for 循环,这些测试中的每一个都更快
Array.prototype.findvs. for loopArray.prototype.concatvs for loopArray.prototype.filtervs for loopArray.prorotype.forEachvs for loopArray.prototype.mapvs for loopArray.prototype.reducevs for loopArray.prototype.somevs for loop
我没有时间查找其他 jsperf 测试,但我确信大多数原型方法会更慢。 那为什么?这些函数非常有用,但是为什么它们这么多比简单的 for 循环慢。
Chrome 60.0.3112 / Windows 10 0.0.0
【问题讨论】:
-
我猜这是由于为每个数组项调用函数(新范围/上下文)所涉及的开销。对我来说,原生函数是如此之快(例如,array.some 的 7400 万次操作/秒)以至于用户不会看到任何差异,而且不编写/维护我自己的函数所节省的时间是值得的。
-
大多数测试都有缺陷,因为它们只是在做不同的事情(例如,
concat创建一个新数组与push添加到现有数组)。此外,您的find测试从根本上被其return函数外的语句破坏。
标签: javascript arrays