首页 > 解决方案 > 在 express.js 控制器中等待会影响性能吗?

问题描述

看到这个例子

app.get('/users', async function(req, res, next){
  try {
    res.json(await db.getUsers())
  } catch(err) {
    next(err)
  }
})

在 db 中查询需要时间,所以使用 await 似乎很有意义。我的问题是,每个“获取用户”请求都会被阻止吗?如果是这样,如果运行负载测试,性能将非常糟糕。

我可以这样做以提高性能吗?

app.get('/users', function(req, res, next){
  try {
    dbGetUsersCallback(res); // no await here
  } catch(err) {
    next(err)
  }
})

const dbGetUsersCallback = async (res) => {
    const ret = await db.getUsers();
    res.json(res);
}

这有帮助吗?

标签: node.jsexpress

解决方案


这几乎是同一件事,您只是将主要逻辑移到了另一个函数中。


每个db.getUsers()人都将处于待命状态,直到他们从 DB 获得实际结果,但之后会很快执行。不确定您是否可以进一步优化它。


我也觉得这里

dbGetUsersCallback(); // no await here

你的意思是:

dbGetUsersCallback(res); // no await here

推荐阅读