发送响应后多个回调函数期间的性能影响

时间:2017-03-16 13:59:31

标签: javascript node.js

任何人都可以帮助我理解NodeJS的功能和对以下场景的性能影响。

一个。将请求发送到Rest API端点" / api / XXX"。在这个请求中,我将返回触发异步函数的响应,如下所示。

 function update(req, res) {
        executeUpdate(req.body); //Asynchronous function
        res.send(200);
 }

湾在这里,我发送响应而不等待函数完成,这个函数执行不同集合的四个mongodb更新。

问题:

  • 正如我所读到的,NodeJS在单线程上工作,这是怎么回事 异步函数正在执行?

  • 如果对同一个终点有多个请求,那将是怎样的 NodeJS的性能影响?

  • NodeJS如何处理每个的异步功能 请求,因为NodeJS在单个线程上运行,就在那里 内存问题的任何可能性?

2 个答案:

答案 0 :(得分:0)

  • 简而言之,这取决于你在功能中做了什么。

  • 节点中的同步函数在主线程上执行,因此, 它们不会抢占并执行直到函数结束或直到 遇到了return语句。

  • 另一方面,异步函数将从主线程中删除, 并且只有在完成异步任务时才会执行 单独的工人线程。

答案 1 :(得分:0)

我认为,在你的问题的答案中有两个不同的部分。

  1. 实际表现 - 包括CPU和记忆表现。它显然也包括速度。
  2. 理解为上一张海报所说的同步和异步。
  3. 在处理#1 - 实际性能时,测试它的真正唯一方法是在代码上创建或使用测试环境。基于您正在使用的系统的基本方式,您可以查看顶部(linux)或Glances中的一些信息,这将为您提供性能的基本概念,但为了确切知道发生了什么,您将需要应用一些不同的测试环境或编写自己的测试。

    接近#2 - 您不仅要了解同步和异步流程,还要了解两者的后果。这包括使用回调承诺。 这完全取决于您尝试编码的当前进程。例如,许多Node程序员在调用MongoDB时似乎更喜欢使用promises,特别是当根据游标返回需要多个调用时。

    当您使用同步或异步进程时,实际上没有书面的公式。避免回调地狱是所有Node程序员尝试做的事情。捕捉错误等是您始终需要小心的事情。正如我所说,一些程序员在处理数据返回时总会选择Promises或Async。对于某些场景,着名的Async库与Bluebird相结合是许多选择。

    所有这一切,并记住你的问题是一般的,因此我的答案也是如此,以便正确地了解对你的表现,内存,cpu和速度的影响以及回报信息或传递给浏览器,最好尽可能地理解同步,异步,回调,承诺和错误捕获。您会发现某些情况非常适合同步(并且速度更快),而其他情况则需要异步和/或承诺。

    希望这有所帮助。