![](/img/trans.png)
[英]Why is Math.round in javascript slower than a custom built function?
[英]Why are built in function calls (like map, forEach, ..etc) slower than a regular loop (for, while ..) in Javascript?
您列出的那些( map
, forEach
) 调用函数 。 所以比较
const updated = original.map(e => e * 2);
至
const updated = [];
let i; // (Declaring these here is a premature micro-optimization¹ for effect)
const len = original.length;
for (i = 0; i < len; ++i) {
updated[i] = original[i] * 2;
}
对于100个条目的数组,第一个示例具有第二个示例的所有开销加上创建函数的开销,对map
的调用的开销以及对回调的100个调用的开销。 当然,从绝对角度来看,它要慢一些。 当然,前提是JavaScript引擎无法优化调用。 如果回调是微不足道的,则如果引擎将其标识为代码中的慢点,则引擎可以对其进行优化。 scraaappy汇总了此基准测试 ,对我来说,至少表明Chrome和Firefox优化了map
,使其比for
更快,而Edge却没有(这使我有些惊讶,Edge中的Chakra引擎非常出色)。 (如果IE11也没有,我不会感到惊讶,但是该基准站点似乎无法与IE11一起使用。)
在实践中有关系吗? 几乎从不。 现代JavaScript引擎中的函数调用非常快 。
写什么你清楚(没有被真的很傻)。 优化是否以及何时出现性能问题。 :-)
¹什么是过早的微优化? 如果我在 for
声明了i
,如下所示:
const updated = [];
for (let i = 0, len = original.length; i < len; ++i) {
updated[i] = original[i] * 2;
}
...为每次循环迭代创建了一个不同的i
(因此,在循环中创建的闭包可以关闭它们中的每个闭包,而不会出现闭包在循环中的问题)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.