【问题标题】:Why is it a best practice to use Asynchornus functions everywhere in nodejs为什么在 node js 中随处使用异步函数是最佳实践
【发布时间】:2020-03-30 16:31:17
【问题描述】:

我发现 nodeJS / ExpressJS 作为 ReactJS 软件的 API-Endpoint 的最佳实践是仅将异步函数用于 mysql-query 等。

但我真的不明白这应该如何工作,以及为什么如果我不使用它会降低性能。

请想象下面的代码:

API 端点“/user/get/1” 从 id 为 1 的用户获取所有数据,并以 json 内容响应。如果我使用异步,则不可能用查询收集的信息进行响应,因为当函数运行到结束时它没有实现。

如果我将它包装在一个 Promise 中,并等到它完成它就像一个同步函数一样 - 不是吗?

请帮我描述一下等待异步函数和直接使用同步函数的区别。

感谢您的帮助!

【问题讨论】:

    标签: javascript node.js reactjs express asynchronous


    【解决方案1】:

    如果我将它包装在一个 Promise 中,并等到它完成它的相同 就像一个同步函数 - 不是吗?

    不,不是。 JavaScript 中同步函数和异步函数之间的区别恰恰在于异步代码被调度为只要它可以运行,而不是立即,现在。换句话说,如果您使用同步代码,您的整个 Node 应用程序将停止一切以从数据库中获取您的数据,并且在完成之前不会做任何其他事情。相反,如果您使用 Promise 和异步代码,虽然您的响应在完成之前不会出现,但 Node 应用程序的其余部分仍将在异步代码获取数据时继续运行,从而允许进行其他连接和请求同时。

    在这里使用异步并不是为了让一个响应更快。这是关于在等待一个响应时允许处理其他请求。

    【讨论】:

    • 它最终将初始加载时间从 1.2 秒减少到 600 毫秒。因此,如果 amybody 必须做出相同的决定,请务必这样做。我使用了 promise-mysql 包。
    • 您说的是初始页面加载,对,不是初始服务器启动?是的,每个图像、脚本、样式表等都是一个单独的请求,因此让您的服务器以半并行方式处理所有这些将比在处理其他请求之前等待 SQL 数据加载更快:)
    • 我说的是初始 api 请求,它将大部分数据加载到我的 react 应用程序的存储中。它包含许多复杂的查询,因此很难全部重构。但值得花时间。
    • 等等,您正在将数据库中的大部分数据加载到加载时的客户端应用程序中?这有什么原因吗?进行 API 调用以仅在您实际将要使用它时加载您需要的数据会更有效...
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多