【问题标题】:Will await keyword in javascript slow down the application?javascript中的await关键字会减慢应用程序的速度吗?
【发布时间】:2019-02-17 19:26:42
【问题描述】:

我对 NodeJS 比较陌生。我想知道 await 关键字是否会减慢整个 javascript/nodeJS 程序的速度?

例如,

如果我在单个服务器文件上编写了许多快速路由器,并且一个路由器函数调用“await”以承诺解决,那么所有其他路由器和异步函数是否会保持暂停/暂停直到承诺得到解决?或者只是该线程将被暂停?

在这种情况下,await 调用会导致 Javascript 程序出现性能问题?

【问题讨论】:

  • 不,await 的全部意义在于异步等待。
  • 简单的答案是否定的,这只是使用 Promise 的更简洁的方式。
  • 一般来说,不,不会。即使它会,它也不会产生任何可行的差异。
  • 只有当该路由的函数被调用时才起作用
  • stackoverflow.com/questions/42677043/… 可能会澄清很多关于 async/await

标签: javascript node.js asynchronous async-await


【解决方案1】:

await 等待一个 Promise 得到解决,但是我们知道节点本质上是异步的,因此,对应用程序的其他请求将不会对它们产生影响,它们不会等待上一个请求 Promise解决了。​​

例子

route 1 -> it will await and iterate through million rows and return sum in response
route 2 -> it will only return '1' in response

现在,当我们先调用路由 1 然后调用路由 2 时,您会看到仍然会立即从路由 2 获得响应,并且当路由 1 完成时,您会收到响应。

【讨论】:

    【解决方案2】:

    没有。虽然 await 听起来像是阻塞的,但它是完全异步的(非阻塞),因为它也被 async 关键字隐含在所需的函数签名中。这是使用 Promise 的(很多)更好的方式。所以继续在你的代码中使用它。

    您还提到了线程,我建议您在开发 node.js 应用程序时忽略线程概念并相信 node.js 事件循环。只是永远不要使用阻塞 IO 调用(通过在名称中包含“同步”来明确命名)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多