try/catch在
9aac80f针对V8
5.3(节点
v7.x及更高版本)的提交中获得了TurboFan优化。这意味着
try/catch具有不良性能的历史性说法不再正确。
从V8博客文章:
过去,V8难以优化ES2015 +中提供的语言功能。例如,
try/catch/finally向V8的经典优化编译器Crankshaft
添加异常处理(即)支持从未变得可行。这意味着V8优化ES6功能(如)的能力for...of受到限制,该功能本质上具有隐式的finally子句。曲轴的局限性以及向V8的基准编译器Full-
pregen中添加新语言功能的整体复杂性,使得固有的难度很难确保在标准化的V8中尽快添加和优化ES新功能。幸运的是,Ignition和TurboFan(V8的新解释器和编译器管道)从一开始就旨在支持整个Javascript语言,包括高级控制流,异常处理,以及
for...of从ES2015开始的最新结构。Ignition和TurboFan体系结构的紧密集成使快速添加新功能并快速,逐步地优化它们成为可能。
try/catch``async函数中的功能只是Promise
.then和
.catch方法上的语法糖,因此性能由底层Promise实现决定。蓝鸟声称比本地Promise实现具有更好的性能,因此从理论上讲-
如果蓝鸟声称是正确的-您将
try/catch通过用蓝鸟的Promise实现覆盖原生Promise实现来获得更好的性能。
例如,在Node:中
const Promise = require("bluebird"),或global.Promise =require("bluebird")全局覆盖它。但是请注意,这可能会在将来发生变化,因为最初的Promise实现是在Javascript中实现的,但是最近已在C ++中重新实现,可以在bug
#5343中进行跟踪。



