首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node 8中异步/等待的性能指南

Node 8中异步/等待的性能指南
EN

Stack Overflow用户
提问于 2017-09-29 04:13:41
回答 2查看 5.9K关注 0票数 10

async/await在nodejs 8版本中是可用的,在nodejs中第一次是线性的。太好了。早些时候,许多文章声称,在v8 javascript引擎中,带有try/catch块的函数不是经过优化的。现在,async/await需要try/catch块来处理错误。那么,作为一个开发人员,需要做些什么来保持相同的性能呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 04:39:10

try/catch在提交9aac80f for V8 5.3 (Node v7.x和更高版本)中接收到了TurboFan优化。这意味着,关于try/catch性能不佳的历史说法已不再正确。

来自V8博客文章

在过去,V8在优化ES2015+中的语言特性时遇到了困难。例如,将异常处理(即try/catch/finally)添加到曲轴(V8的经典优化编译器)中是不可行的。这意味着V8优化ES6特性(如for...of )的能力是有限的,后者本质上有一个隐含的finally子句。曲轴的局限性和向V8的基线编译器全码元添加新的语言特性的总体复杂性,使得确保在V8中以标准化的速度添加和优化新的ES特性具有内在的难度。 幸运的是,Ignition和TurboFan (V8的新解释器和编译器管道)从一开始就被设计为支持整个JavaScript语言,包括高级控制流、异常处理,以及最近的for...of和ES2015中的析构。点火和TurboFan体系结构的紧密集成使得快速添加新特性并快速、渐进地优化它们成为可能。

try/catch函数中的async仅仅是承诺.then.catch方法的语法糖,因此性能取决于底层的允诺实现。蓝鸟索赔要求比本地承诺实现具有更好的性能,所以理论上--如果Bluebird声称的是真的--您将通过使用Bluebird的承诺实现覆盖本机承诺实现来获得更好的try/catch性能。

例如,在Node:const Promise = require("bluebird")global.Promise = require("bluebird")中全局覆盖它。

但是,请注意,这在将来可能会发生变化,因为最初的承诺实现是在JavaScript中实现的,但是最近在C++中重新实现了,这可以在bug #5343中跟踪。

票数 12
EN

Stack Overflow用户

发布于 2017-09-29 08:26:11

我找到了一个原生ES2015承诺和ES2017异步函数在Node.js v8中的性能

在Node.js v8中回调与承诺与异步函数的性能 本地Chrome V8 ES2015承诺和ES2017异步函数的执行速度都比蓝鸟承诺的内存快2倍。

结论 Node.js v8带来了本机ES2015承诺和ES2017异步函数的显着改善性能,这是由于引入了原生util.promisify而进一步提高了性能。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46481709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档