为什么大多数 JavaScript 原生函数都比它们的原始实现慢?
IT技术
javascript
function
optimization
2021-02-15 17:31:48
1个回答
在查看ECMA-262 之后。与简单的自我实现相比,本地实现似乎在错误处理和功能方面做得更多。
例如,查看map
MDN 上的 polyfill 实现:Array.prototype.map()。它基于 ECMA-262 中指定的相同算法。更新您的示例以使用此算法现在可以使本机实现更快——尽管只是略微:map-native-vs-implemented。
此外,map
可能不是最好的测试示例,因为它在本机代码和提供的 lambda 函数之间来回跳动。
我本来期望本机concat
功能有更好的性能。尽管如此,查看 ECMA-262 我们可以看到它也只是做了更多。查看 15.4.4.4 节中的算法,我们可以看到它处理了一些额外的情况。例如组合多个参数——一些是数组,一些是其他类型:
[1, 2, 3].concat([4, 5, 6], "seven", 8, [9, 10]);
回报
[1, 2, 3, 4, 5, 6, "seven", 8, 9, 10]
最后,重要的是要注意这些是非常基本的算法。当在庞大的数据集上或连续数千次运行此类算法时,似乎一个明显比另一个快。然而,即使在数千次迭代中执行一些额外的安全检查,也会使一种算法比不进行这些检查的算法慢得多。计算计算操作——如果您额外的错误处理和功能使循环中的代码行数加倍,那么它会变慢是很自然的。
其它你可能感兴趣的问题