node.js - 在 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);
}
这有帮助吗?
解决方案
这几乎是同一件事,您只是将主要逻辑移到了另一个函数中。
每个db.getUsers()
人都将处于待命状态,直到他们从 DB 获得实际结果,但之后会很快执行。不确定您是否可以进一步优化它。
我也觉得这里
dbGetUsersCallback(); // no await here
你的意思是:
dbGetUsersCallback(res); // no await here
推荐阅读
- uwp - 为商店应用程序形成广告系列网址时,是否有类似“companyID”的内容?
- python - 正则表达式与 python
- flutter - 如何在颤振中添加图像轮播
- linux - Boost: 未定义引用 '__xstat64', '__lxstat64', '__errno_location' 错误
- android - 当用户允许权限时,我在 onRequestPermissionsResult 中授予权限的函数没有调用
- python - 如何按列中的值分组,查找空值,然后替换
- javascript - 圆环图:显示里面的百分比
- testing - DerivedData 中缺少 TestSummeries.plist 文件
- microsoft-graph-api - 在 Azure AD 中获取设备的注册或创建日期
- python-3.x - 如何使用python根据某些条件选择命令输出的特定部分