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函数有任何显着的性能提升吗?
答案 0 :(得分:13)
请记住,对于这个问题不可能有一个普遍的答案,因为所有这些都是依赖于实现的。所以现在答案可能是 X 或某些浏览器,未来或其他浏览器可能 Y 。
这些条款说,这里有一些数据:http://incaseofstairs.com/six-speed。对于现在和主流浏览器,答案是否,甚至可能会有性能损失(根据上述规定)。
答案 1 :(得分:2)
恰恰相反:“箭头函数更慢”。
从理论角度(并非特定于 JavaScript),lambdas(箭头函数)是匿名的,因此它们“通常”在运行时在堆上计算。
这意味着编译器可能无法“内联”对这些 lambda 的调用。与具有更高内联机会的普通自由纯函数相比,这会降低 lambda 的性能。
在堆上也会给垃圾收集器带来压力。请参阅 this comment from the author of TypeScript 解释为什么箭头函数变慢。
示例基准:
箭头方法分别比类方法和自由函数慢 10% 和 60%
答案 2 :(得分:0)
ES6箭头功能相当快,因为它们不会创建额外的范围。但是它们无法访问在其范围之外声明的变量,或者它们的性能会降低到低于正常函数的性能。