当前位置: 首页 > 面试题库 >

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

拓拔浩阔
2023-03-14
问题内容

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


问题答案:

try/catch9aac80f针对V8
5.3(节点v7.x及更高版本)的提交中获得了TurboFan优化。这意味着try/catch具有不良性能的历史性说法不再正确。
从V8博客文章:

过去,V8难以优化ES2015 +中提供的语言功能。例如,try/catch/finally向V8的经典优化编译器Crankshaft
添加异常处理(即)支持从未变得可行。这意味着V8优化ES6功能(如)的能力for...of受到限制,该功能本质上具有隐式的finally子句。曲轴的局限性以及向V8的基准编译器Full-
codegen中添加新语言功能的整体复杂性,使得固有的难度很难确保在标准化的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中进行跟踪。



 类似资料:
  • 问题内容: 我有一个使用一些异步功能的节点应用程序。 在继续进行其余的应用程序流程之前,我该如何等待异步功能完成? 下面有一个简单的示例。 在示例中,要返回的元素“ ”必须为5而不是1。如果应用程序不等待异步功能,则等于1。 谢谢 问题答案: 使用回调机制: 使用异步等待

  • 问题内容: 我认为节点7.4支持异步/等待,但是此示例不起作用: 结果是: 如何在节点7.4上使用异步/等待? 问题答案: 是的,Node.js v7支持async-await,但将其锁定在标志后面。尚未准备就绪的功能不在此标记后面。 要在Node.js v7中使用async-await,只需使用此标志运行Node服务- async-await的正式发行版预定于4月启动的Node.js v8。 您

  • 我以为async/wait在节点7.4中得到了支持,但是这个例子不起作用: 结果: 如何在node 7.4中使用async/await?

  • 到目前为止,我认为我已经掌握了async await如何使应用程序更具响应性的概念,但我有两点悬而未决: 层注意事项异步等待是否必须从存储库层一直到MVC或WCF层才能获得性能优势,或者我可以只对需要很长时间的存储库方法进行异步操作吗? “等待”用法如果我只能在存储库级别工作,有一部分我不明白。使用这种(低层)方法,线程能够在等待io绑定代码完成的同时为传入的客户端请求提供服务吗? 在我看来,当长

  • 问题内容: 我对节点还很陌生,我刚刚了解了javascript中提供的async和await函数。我正在尝试在下面随附的代码段中实现此方法。以我的理解,数据库响应应该首先打印到控制台,然后“完成”,但是我无法使其正常工作。任何帮助将不胜感激。 也请尝试说明您所做的修复操作,因为我想了解我做错了什么。 问题答案: 您的函数中没有语句。 通常,这将导致函数返回,但是由于您声明了它,因此它导致其返回 立

  • 我正在尝试做一个简单的应用程序,加载数据并对其执行一个操作.所以我的想法是做这个异步。 我有3个数据源,我想异步加载它们。例如data1.xml、data2.xml和data3.xml所有文件加载起来都相当大,所以需要一些时间(这就是为什么我想要异步的原因)。 例如,我创建了一个包含3个文本框的窗口,这些文本框都绑定到一个特定的属性(Text1、Text2、Text3)和一个按钮。当我点击按钮时,