Попытайтесь найти node Express заблокированный код процессора и хотите сделать экспресс-обработчики асинхронными для трассировки стека

У меня есть экспресс-приложение node10, что-то вроде:

const app = express();
app.use(function(req, res, next) { ..}
app.use(  bodyParser.text({
    limit: '1mb',
    type: '*/*',
  })
); 
more of those..
app.post('myApiName', [(req, res, next) => {..}, (req, res, next) => {..} .. etc many more]);
https.createServer(sslOptions, app) ...

Но с гораздо большим количеством маршрутов и промежуточного программного обеспечения. Из-за имеющихся у меня заблокированных проблем, когда процессор над чем-то работает и "не отвечает" в течение нескольких секунд, я добавил модуль https://github.com/naugtur/blocked-at/blob/master/README.md. Но большая часть трассировки стека, которую он мне предоставляет, начинается сat Server.connectionListener (_http_server.js:319:3),.... а в ридми об этом сказано: In some cases your code is not directly called and tracking it down will still be difficult. See how the HTTP test case produces a stack pointing to Server.connectionListener as the slow function, because everything inside of it is synchronously called. You can always wrap your handlers' code in setImmediate if you become desperate. Or use resources.. Я понимаю, что мне нужно запускать свои обработчики из другого "источника", который начнется с другой задачи в цикле событий (я, вероятно, не очень хорошо формулирую), но я действительно не понимаю, что именно я могу сделать, используя предложение setImmediate. Я видел, что есть библиотека npm https://www.npmjs.com/package/express-async-handler для обработки ошибок, но я все еще не уверен, как должен выглядеть мой код (особенно потому, что у меня много обработчиков и промежуточного программного обеспечения.). Я буду рад получить несколько предложений или несколько фрагментов кода, чтобы понять, как улучшить трассировку стека.

0 ответов

Другие вопросы по тегам