NodeJs Async ждут по умолчанию - PullRequest
0 голосов
/ 18 марта 2019

Может ли быть плохой практикой иметь все функции в веб-приложении nodejs Express с асинхронным синтаксисом ожидания? (даже если они не обязательно используют методы ожидания), например:

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 () {
    })
});

Идея состоит в том, чтобы всегда определять, как async, для терминов шаблонов, или если мне нужно использовать их, как этот другой пример для лучших практик:

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 () {
    })
});

может повлиять на производительность?

(я убрал params и логику обещаний для легкой визуализации вопроса)

1 Ответ

1 голос
/ 18 марта 2019

может повлиять на производительность?

async/await всегда влияет на производительность.

Если вы добавите async в синхронную функцию, у вас будет ухудшениепроизводительность 400%. Простой банчмарк

Добавление await в Node.js <= 11 create 2 Обещания на низком уровне, один затем переносит верхний код, а другой - для следующих литералов.С Node.js 12 <code>await даст только одно дополнительное Promise.

v8 и Node.js прилагают все усилия, чтобы уменьшить это влияние на производительность. V8 Статья , которая объясняет, как 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, используйте вывод!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...