使用ES6箭头函数是否可以提高性能?

18

ES6中的新箭头函数类似于一行代码的函数,可以使代码更加简洁清晰,并且允许您在函数中保持调用者的作用域,因此您不需要像var _this = this;这样的操作,或者使用bind函数等。

相比普通的javascript函数,使用ES6箭头函数是否有明显的性能提升?


2
标准并没有对哪个更快设置任何先决条件,因此完全取决于实现。 - zerkms
在水下,可能存在一些性能差异,您可以尝试通过构建原型来进行测试。 - CherryNerd
也许如果您询问特定的实现(例如Chrome),我们可以给出更好的答案。我会问关于Chrome或更具体地说是V8,因为它是用于Node.js的引擎。 - niceman
2
尝试在Google上搜索一些有关箭头函数的jsperf基准测试。例如:ex1 ex2,或者自己制作一个,并报告是否发现了任何有趣的东西。从粗略的观察来看,性能差异很小,但是使用箭头函数而不是bind会更好(根据JS环境而异-我在chrome上,也就是V8)。 - Damon
4个回答

19

请记住,这个问题没有普遍的答案,因为一切都取决于具体实现方式。所以答案可能现在是X,也可能在未来或其他浏览器中是Y

尽管如此,以下是一些数据:http://incaseofstairs.com/six-speed。目前对于主流浏览器,答案相当于No,并且还可能存在性能惩罚(根据上述规定)。


5
相反地,箭头函数更慢。从理论角度来看(不特定与JavaScript),λ表达式(箭头函数)是匿名的,因此它们通常在堆上运行时计算。这意味着编译器可能无法“内联”对这些λ表达式的调用。这降低了λ表达式的性能,相比之下,普通的自由纯函数有更高的内联机会。在堆上还会给垃圾收集器带来压力。请参见TypeScript作者的此评论,解释为什么箭头函数较慢。
一个例子基准测试:箭头方法比类方法和自由函数分别慢10%和60% https://jsbench.me/g4kjcq9j3s/1

0
我更新了https://jsbench.me/g4kjcq9j3s/1,比较了类外箭头函数和普通函数的性能。结果显示,在这种情况下,箭头函数实际上比普通函数更快,但在类内使用时比类方法慢得多。

-2

ES6箭头函数速度相对较快,因为它们不会创建额外的作用域。但是,它们无法访问在其作用域之外声明的变量,否则它们的性能将降低到普通函数以下。


1
怎么回事?普通函数访问外部作用域和箭头函数访问外部作用域有什么区别? - Hkan
1
我认为实际上并没有太多的性能优势,但我认为Code Whisperer指的是在函数中通常分配的一些东西(例如'this'和'arguments')不需要分配。 - Erik Christianson
@code-whisperer,您能否详细说明一下?访问在其作用域之外声明的变量如何降低箭头函数的性能? - Olav Kokovkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接