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

Sal*_*ali 22 javascript performance

问题在标题中,但这是一个更长的解释.

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

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

此外,我还没有检查每个功能,这是我的jsperf测试:

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

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

Dor*_*use 2

我认为在某种程度上,这可以归结为这样一个事实:这些本机函数更多的是糖分,而不是优化。

这与说使用而不是循环并自己执行不同,Array.prototype.splice在这种情况下,实现显然能够在幕后(在内存中)做比您自己能够做的更多的事情。

在使用过滤器、减少和映射的某个时间点,浏览器将必须循环遍历数组并对其中包含的值执行一些操作(就像使用循环一样)。它无法减少实现相同目标所需的工作量(它仍然循环并执行操作),但它可以为您提供更令人愉悦的 API 并提供错误检查等,从而增加时间。