我正在使用Express.js,pug和mongoose构建应用程序。我有很多使用await进行多个异步db查询的处理程序。为了大致估计这些处理程序将花费多长时间,以及每个等待将阻塞事件循环的时间,我添加了blocked-at库,该库在每次事件循环执行时以毫秒为单位打印时间。受阻。给定这样的处理程序:
Const handler = async (req, res, next) => {
Const data1 = await getData1().exec()
// Do something
const data2 = await getData2().exec()
// Do something with data1 and data2
const data3 = await getData3().exec()
// Do something with data1, data2, and data3
}
我将看到来自被阻塞的功能的单个输出,例如: 封锁了734.22毫秒”
这令人困惑,因为我希望看到3个单独的条目,每个被调用的await调用一个,然后注册其回调,然后返回到事件循环。我的理解是,使用类似的异步调用直到处理程序函数结束时才阻止事件循环,但是此输出表明并非如此。如果我的理解是正确的,那么准确地估计此类处理程序中事件循环中正在发生的事情的最佳方法是什么?
此外,阻塞事件循环以获取一些数据并执行一些业务逻辑似乎要花费将近一秒钟的时间。有什么策略可以加快速度吗?