为什么本机数组函数比循环慢得多

时间:2014-02-13 08:22:31

标签: javascript performance

问题在标题中,但这是一个较长的解释。

很久以前我学到了一些不错的javascript函数,比如reduce,filter,map and so on。我真的很喜欢它们并且开始经常使用它们(它们看起来很时尚,我认为因为它们是原生功能,所以它们应该比旧的for循环更快)。

最近我需要执行一些重js计算,所以我决定检查它们的速度有多快,令我惊讶的是它们没有更快,它们慢得多(慢3到25倍)

此外,我还没有检查过每个函数,这是我的jsperf测试:

那么为什么本机函数比旧循环慢得多,如果它们没有做得更好,那么创建它们的重点是什么。

我认为速度损失是由于它们内部函数的调用,但它仍然不能证明这种损失。此外,我不明白为什么用这些函数编写的代码更具可读性,更不用说每个浏览器都不支持它们。

1 个答案:

答案 0 :(得分:2)

我认为在某些时候,它归结为这些本机函数比它们的优化更多的糖。

与使用Array.prototype.splice而不是循环并自行完成它的说法不同,其中实现显然可以在引擎盖下(在内存中)做得比你自己能够做的更多。

在某些时候使用过滤器,缩小和映射浏览器将不得不循环遍历数组并对其中包含的值执行一些操作(就像使用循环一样)。它不能减少实现相同目的所需的数量(它仍然循环并执行操作),但它可以为您提供更令人满意的API并提供错误检查等,这将增加时间。