多个回调会降低nodejs的性能吗?

时间:2017-10-17 04:25:37

标签: node.js express callback promise rxjs

我正在使用mysql开发一个快速应用程序。我的节点版本是6.11.2。

我的路由器文件是

const router = require("express").Router();
const project = require("../../modules/project/");

// individual project routes
router.get("/", project.getAllProject);

现在我的getAllProject函数代码如下。

  /* Get all project  */
  getAllProject(req, res, next) {
    buildQuery(req) /* Build query based on logged in user */
      .then(query => runDbQuery(req, query)) /* execute query */
      .then(results => formatResult(results)) /* Build response for front end */
      .then(output => res.send(output)) /* return results */
      .catch(err =>
        next(err, req, res, next)
      ); /* catch error and pass it error middle ware */
  }

buildQuery,runDbQuery,fromatResult返回承诺。

在我的代码审核客户端上评论如下

  

在这里你的方法称为“getAllProjects”   在数据交付之前需要进行3次回调检查,总共需要4次回调。这太多了。这很慢,因为这些   在将数据发送到占用服务器处理能力的客户端之前,需要完成回调

他还让我在一次回调中做所有事情并将数据返回给客户。承诺和回调方法会降低性能。他还建议在快递中使用RXJS Observable。

1 个答案:

答案 0 :(得分:-1)

理论上,每个函数调用都会花费一些资源(比如上下文/闭包构造)。所以,是的,根据定义,有三个.then() 较慢而不是单个.then(),即使在这两个案例中同时完成了相同的工作。

在没有运行基准测试的情况下,与单个案例相比,多少多少真的很难...因此,我创建了一个simple one你可以尝试自己。

在我的老式和非常懒散的笔记本电脑上,基准测试结果看起来像这样:

result

希望,这可以回答你的问题。

现在,性能不是代码评估的唯一标准。另一个是可读性。在某些情况下,如果您有多个.then()调用,则代码将看起来更具可读性,其中每个调用都声明了特定的数据转换步骤。只是旁注。 个人更喜欢可读性而不是性能,因为对我来说,它选择更高的正确性而不是性能。您的客户可能会有不同的想法。

Observable而言,您可能想也可能不想使用它们。这取决于您的应用程序的性质。 Observable涉及事件流和操纵。然而,Promises与ES6的await/async功能一致。所以,这里没有明确的答案,除非我们更多地了解背景。