使用ES6箭头功能是否有性能提升?

时间:2017-03-13 20:27:03

标签: javascript performance ecmascript-6 arrow-functions

ES6中的新箭头功能,就像单行功能一样,使代码更加简洁明了,并且还允许您将调用者的范围保持在函数内部,这样您就不需要像val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap, StorageLevel.MEMORY_ONLY) .filter(_._2 != null) .map { case (_, json) => implicit val formats = ... JsonParser.parse(json).extract[Quote] // or pass the format explicitly here } ,或使用var _this = this;功能等。

使用ES6箭头函数比普通的javascript函数有任何显着的性能提升吗?

3 个答案:

答案 0 :(得分:13)

请记住,对于这个问题不可能有一个普遍的答案,因为所有这些都是依赖于实现的。所以现在答案可能是 X 或某些浏览器,未来或其他浏览器可能 Y

这些条款说,这里有一些数据:http://incaseofstairs.com/six-speed。对于现在和主流浏览器,答案是,甚至可能会有性能损失(根据上述规定)。

答案 1 :(得分:2)

恰恰相反:“箭头函数更慢”。

从理论角度(并非特定于 JavaScript),lambdas(箭头函数)是匿名的,因此它们“通常”在运行时在堆上计算。

这意味着编译器可能无法“内联”对这些 lambda 的调用。与具有更高内联机会的普通自由纯函数相比,这会降低 lambda 的性能。

在堆上也会给垃圾收集器带来压力。请参阅 this comment from the author of TypeScript 解释为什么箭头函数变慢。

示例基准

箭头方法分别比类方法和自由函数慢 10% 和 60%

https://jsbench.me/g4kjcq9j3s/1

答案 2 :(得分:0)

ES6箭头功能相当快,因为​​它们不会创建额外的范围。但是它们无法访问在其范围之外声明的变量,或者它们的性能会降低到低于正常函数的性能。