使用 ES6 箭头函数是否有性能提升?
Are there performance gains in using ES6 Arrow Functions?
ES6 中新的箭头函数,就像一行函数,让代码更干净简洁,也允许你将调用者的范围保留在函数内,这样你就不需要做var _this = this;
之类的东西,或者使用 bind
函数等
与普通 javascript 函数相比,使用 ES6 箭头函数是否有显着的性能提升?
请记住,这个问题没有通用的答案,因为所有答案都取决于实现。所以答案现在可能是 X 或某些浏览器,将来可能是 Y 或其他浏览器。
说了这些规定,下面是一些数据:http://incaseofstairs.com/six-speed。目前,对于主流浏览器,答案是否,甚至可能会有性能损失(根据上述规定)。
ES6 箭头函数要快得多,因为它们不会创建额外的作用域。但是它们不能访问声明在它们范围之外的变量,否则它们的性能将低于正常函数。
恰恰相反:“箭头函数更慢”。
从理论的角度(不特定于JavaScript),lambdas(箭头函数)是匿名的,因此它们通常在运行时在堆上计算。
这意味着编译器可能无法“内联”对这些 lambda 的调用。与具有更高内联机会的普通自由纯函数相比,这会降低 lambda 的性能。
在堆上也会给垃圾收集器带来压力。请参阅 this comment from the author of TypeScript,其中解释了为什么箭头函数较慢。
基准测试示例:
箭头方法分别比 class 方法和自由函数慢 10% 和 60%
ES6 中新的箭头函数,就像一行函数,让代码更干净简洁,也允许你将调用者的范围保留在函数内,这样你就不需要做var _this = this;
之类的东西,或者使用 bind
函数等
与普通 javascript 函数相比,使用 ES6 箭头函数是否有显着的性能提升?
请记住,这个问题没有通用的答案,因为所有答案都取决于实现。所以答案现在可能是 X 或某些浏览器,将来可能是 Y 或其他浏览器。
说了这些规定,下面是一些数据:http://incaseofstairs.com/six-speed。目前,对于主流浏览器,答案是否,甚至可能会有性能损失(根据上述规定)。
ES6 箭头函数要快得多,因为它们不会创建额外的作用域。但是它们不能访问声明在它们范围之外的变量,否则它们的性能将低于正常函数。
恰恰相反:“箭头函数更慢”。
从理论的角度(不特定于JavaScript),lambdas(箭头函数)是匿名的,因此它们通常在运行时在堆上计算。
这意味着编译器可能无法“内联”对这些 lambda 的调用。与具有更高内联机会的普通自由纯函数相比,这会降低 lambda 的性能。
在堆上也会给垃圾收集器带来压力。请参阅 this comment from the author of TypeScript,其中解释了为什么箭头函数较慢。
基准测试示例:
箭头方法分别比 class 方法和自由函数慢 10% 和 60%