Javascript 节点版本8中异步/等待的性能指南

Javascript 节点版本8中异步/等待的性能指南,javascript,node.js,v8,Javascript,Node.js,V8,async/await可用于节点版本8。代码在nodejs中第一次是线性的,本机的。那很好。早期的许多文章都声称,在v8 javascript引擎中,带有try/catch块的函数没有得到优化。现在,async/await需要try/catch块来处理错误。那么,作为一名开发人员,需要做些什么才能保持相同的性能呢?try/catch在commit for V85.3(Nodev7.x及更高版本)中收到了涡扇发动机的优化。这意味着try/catch性能差的历史语句不再正确。 发件人: 在过去,V8

async/await
可用于节点版本8。代码在nodejs中第一次是线性的,本机的。那很好。早期的许多文章都声称,在v8 javascript引擎中,带有
try/catch
块的函数没有得到优化。现在,
async/await
需要
try/catch
块来处理错误。那么,作为一名开发人员,需要做些什么才能保持相同的性能呢?

try/catch
在commit for V8
5.3
(Node
v7.x
及更高版本)中收到了涡扇发动机的优化。这意味着
try/catch
性能差的历史语句不再正确。
发件人:

在过去,V8难以优化ES2015+中的语言功能。例如,将异常处理(即try/catch/finally)支持添加到V8经典优化编译器曲轴(Crankbow)中从来都不可行。这意味着V8优化ES6特性(如
for…of
)的能力受到了限制,该特性本质上有一个隐式finally子句。曲轴的局限性以及向V8的基线编译器full codegen添加新语言功能的总体复杂性,使得确保新ES功能在标准化后尽快在V8中添加和优化变得非常困难

幸运的是,Ignition和TurboFan(V8新的解释器和编译器管道)从一开始就被设计为支持整个JavaScript语言,包括高级控制流、异常处理,以及最近针对ES2015的和解构。点火和涡扇发动机结构的紧密集成使快速添加新功能和快速渐进地优化它们成为可能


try/catch
async
函数中,它只是承诺
上的同步糖。然后是
.catch
方法,因此性能由基础承诺实现决定。Bluebird希望比本机Promise实现具有更好的性能,因此理论上-如果Bluebird声称的是真的-通过使用Bluebird的Promise实现覆盖本机Promise实现,您将获得更好的
try/catch
性能。
例如,在节点中:
const Promise=require(“蓝鸟”)
,或
global.Promise=require(“蓝鸟”)
全局覆盖它

注意,这可能会在将来改变,因为最初的承诺实现是在JavaScript中,但是最近在C++中被重新实现,因为可以在BUG中跟踪。

< P>我发现了一个

Node.js v8中回调、承诺和异步函数的性能

本机Chrome V8 ES2015承诺和ES2017异步功能 执行速度大约是蓝鸟承诺的2倍,使用几乎2 多倍的内存

结论

Node.js v8显著提高了本机的性能 ES2015承诺和ES2017异步功能,由 介绍本机util.promisify


您是否尝试过使用
.catch()
?@jfriend00在
async/await
中使用
.catch()
的具体模式是什么<代码>(async()=>{“使用严格的”;等待abc}()。然后(result=>console.log(“解析:”,result)).catch(err=>console.error(“拒绝:”,err))@jfriend00否,不要收集您正在引用的特定模式。@guest271314-请根据问题继续讨论主题。要在使用多个
await
语句的块中捕获更高级别的拒绝,必须使用
try/catch
。如果您不理解,请阅读
等待
和拒绝。我不会在这里的评论中告诉你这一点。这类似于在承诺链末尾使用的
.catch()
,但是当使用多个
wait
语句而不是承诺链时,不能只使用
.catch()
在更高级别捕获拒绝。我认为如果您使用类似这样的命令:“userService.logIn”,则不需要使用try/catch(req,res).然后(result=>res.json(result)).catch(error=>next(error));',每次拒绝/抛出(如果没有捕捉到)将在此处处理。接收涡扇发动机优化意味着什么?@jfriend00 TurboFan是V8的优化编译器之一。在此处阅读更多信息:是的,我知道这是一种优化。所问的问题是关于nodejs版本8中的
try/catch
async/await
的性能,您还没有提供任何定义e有关的信息。
await
现在使用
try/catch
与过去相比有多快?或者与不使用
async/await
和仅使用promises和
的编程相比有多快。catch()
?这类信息实际上可以回答这个问题。蓝鸟是Node.JS?我以为Chrome V8是Node的引擎。我在这里很困惑,你能澄清一下吗?@Pac0
Bluebird
Promise
的用户土地实现,当承诺在本地不可用时,蓝鸟软件包非常有用但是他们的承诺实现并不完全符合规范。这就是为什么V8的实现稍微慢一点。虽然实现了很大的改进,并且几乎与蓝鸟保持一致。我将使用本机承诺,因为您具有规范遵从性,没有额外的依赖性,并且您将受益于未来的引擎优化。蓝鸟是al。许多流行的图书馆都使用它来代替标准的承诺,原因是扩展和方便的特征集。Web通常带有一个可怕的API。例如,考虑WebSutoC.在初始化CONE之后分配回调。