在具有异步等待语法的nodejs Express Web应用程序上具有所有功能可能不是一个好习惯? (即使它们不一定使用await方法),例如:
app.get(basePath, async function (req, res, next) {
await anyMethod().then(function () {
})
await anyMethod2().then(function () {
})
});
app.get(basePath, async function (req, res, next) {
anyMethod().then(function () {
})
});
我们的想法是像模板一样始终定义异步,或者是否需要像其他示例一样使用它们来实现最佳做法:
app.get(basePath, async function (req, res, next) {
await anyMethod().then(function () {
})
await anyMethod2().then(function () {
})
});
app.get(basePath, function (req, res, next) {
anyMethod().then(function () {
})
});
会影响性能吗?
(为了方便问题的可视化,我删除了参数和承诺的逻辑)
答案 0 :(得分:1)
会影响性能吗?
async/await
总是会影响性能。
如果在同步函数中添加async
,则会使性能降低400%。 A simple banchmark
在Node.js中添加await
<= 11在底层创建2个Promise,一个然后包装上层代码,另一个用于下一个文字。
使用Node.js 12 await
只会产生一个额外的Promise。
v8和Node.js致力于降低对性能的影响。 V8 Article解释了async/await
的工作原理。
相反,看看您的示例是不好的,因为您什么都没有等待:
await anyMethod2().then(function () { res.reply('hello') })
如果您不使用await
的结果,那将毫无意义,因为最终输出将相同:
await anyMethod2().then(function () { res.reply('hello') })
anyMethod2().then(function () { res.reply('hello') })
这两个句子产生相同的结果,但是开销(和错误管理)不同。
您必须考虑anyMethod1()
和anyMethod2()
可以是并行还是串行。在您的示例中,您失去了并行性。
这值得:
const res = await anyMethod2().then(function () { return {hi:'world'} })
res.reply(res)
如果您await
,请使用输出!