将大括号添加到箭头功能是否可以提高性能?

时间:2019-06-10 08:13:27

标签: javascript performance arrow-functions

我说的是您不需要退货的情况。

例如:

let pos = {'x': 1, 'y': 1};
['x', 'y'].forEach((val) => pos[val] = 2);

我很好奇这个隐式收益是否影响forEach的表现?

如果我们添加花括号(因此该函数停止返回表达式的结果),是否会影响性能?

2 个答案:

答案 0 :(得分:4)

即使在非常大的阵列上,您也无法检测到差异。但是,如果您感到好奇,则可以始终在您关心的JavaScript引擎上使用真实代码对其进行概要分析(因为合成代码会提供合成结果)。

用规范的术语来说,评估以+---------+------------+---------+ | user_id | user_badge | missing | +---------+------------+---------+ | 1 | a,b | c,d,e | | 2 | a,b,c,d | e | | 3 | a | c,d,e,b | +---------+------------+---------+ 3 rows in set (0.00 sec) (包括箭头的隐式返回)完成的功能代码与仅仅“掉下”代码末尾的结果会导致两种不同的完成方式,然后是过程调用该函数可以区分返回和不返回,并在不返回情况下提供returnundefined的代码当然不会使用结果,但是从理论上讲,JavaScript引擎中可能有不同的代码路径到达那里,因此从理论上讲,它们的性能可能会略有不同。

不过,在实践中,我认为您可以放心地假设JavaScript引擎对此进行了很好的优化,并且区别并不明显。

通常,不要事先进行优化。当您在给定代码中遇到性能问题时,应对给定代码中的性能问题。 (也就是说,我完全完全理解对这种事情感兴趣……)

只是为了好玩我做了一个jsPerf,但在Chrome(V8)或Firefox(SpiderMonkey)上的综合测试中看不到任何明显的区别:

enter image description here

但是再次,综合测试得出综合结果。

答案 1 :(得分:2)

与大多数性能问题一样,正确的答案是对其进行度量。

jsPerf上可以看到,差异微不足道,并且绝对会被the overhead from forEach等其他事物所抵消。

当然,实际上,这种规模的任何差异都不明显。

Sample performance measurement result