家电维修网

 找回密码
 注册
家电维修网 网站首页 电工学习 查看内容

V8中更快的异步函数和promises

2018-12-1 12:41| 发布者: 南召修电视| 查看: 1339| 评论: 0

摘要: 原文作者:Maya Lekova and Benedikt Meurer 译者:UC 国际研发 Jothy写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与 ...


原文作者:Maya Lekova and Benedikt Meurer

     译者:UC 国际研发 Jothy


写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。



一直以来,JavaScript 的异步处理都因其速度不够快而名声在外。 更糟糕的是,调试实时 JavaScript 应用 - 特别是 Node.js 服务器 - 并非易事,特别是在涉及异步编程时。 幸好,这些正在发生改变。 本文探讨了我们如何在 V8(某种程度上也包括其他 JavaScript 引擎)中优化异步函数和 promise,并描述了我们如何提升异步代码的调试体验。



注意:假如你喜欢边看演讲边看文章,请欣赏下面的视频!假如不是,请跳过视频并继续阅读。


视频地址:

https://www.youtube.com/watch?v=DFP5DKDQfOc



一种新的异步编程方法


>> 从回调(callback)到 promise 再到异步函数 <<


在 JavaScript 还没实现 promise 之前,要解决异步的问题通常都得基于回调,尤其是在 Node.js 中。 举个例子🌰:


我们通常把这种使用深度嵌套回调的模式称为“回调地狱”,因为这种代码不易读取且难以维护。


所幸,现在 promise 已成为 JavaScript 的一部分,我们可以以一种更优雅和可维护的方式实现代码:


最近,JavaScript 还增加了对异步函数的支持。 我们现在可以用近似同步代码的方式实现上述异步代码:


使用异步函数后,虽然代码的执行仍然是异步的,但代码变得更加简洁,并且更易实现控制和数据流。(请注意,JavaScript 仍在单线程中执行,也就是说异步方法本身并没有创建物理线程。)


>> 从事件监听回调到异步迭代 <<


另一个在 Node.js 中特别常见的异步范式是 ReadableStreams。 请看例子:


这段代码有点难理解:传入的数据只能在回调代码块中处理,并且流 end 的信号也在回调内触发。 假如你没有意识到函数会立即终止,且得等到回调被触发才会进行实际处理,就很容易在这里写出 bug。


幸好,ES2018 的一项新的炫酷 feature——异步迭代,可以简化此代码:


我们不再将处理实际请求的逻辑放入两个不同的回调 - 'data' 和 ' end ' 回调中,相反,我们现在可以将所有内容放入单个异步函数中,并使用新的 for await...of 循环实现异步迭代了。 我们还添加了 try-catch 代码块以避免 unhandledRejection 问题[1]


你现在已经可以正式使用这些新功能了! Node.js 8(V8 v6.2/Chrome 62)及以上版本已完全支持异步方法,而 Node.js 10(V8 v6.8/Chrome 68)及以上版本已完全支持异步迭代器(iterator)和生成器(generator)!



异步性能提升


我们已经在 V8 v5.5(Chrome 55 和 Node.js 7)和 V8 v6.8(Chrome 68 和 Node.js 10)之间的版本显着提升了异步代码的性能。开发者可安全地使用新的编程范例,无需担心速度问题。


12345下一页

最新评论

  • 三相电源断零线,为什么会接二连三烧坏电器
  • 风力发电机转那么慢,一圈能发多少电?
  • 零线不带电,为什么还要拉一条?直接用地做
  • 电磁阀基础知识详解:原理、维护、选型
  • 新能源汽车DC/DC变换器及实物拆机图

QQ|门户地图|网站地图|家电维修|手机版|家电维修技术论坛 ( 蜀ICP备14030498号-16 川公网安备51102502000162号 )

GMT+8, 2025-5-23 12:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部