2 ответа

★ Лучший ответ

всё зависит от того, что ты делаешь конкретно, но есть несколько моментов, на которые я сразу обратил бы внимание. прежде всего проверь, не делаешь ли ты запросы к базе данных без индексов - это одна из самых частых причин тормозов. если используешь mongodb, проверь, чтобы твои find() имели правильные индексы, с postgresql то же самое. потом посмотри, не делаешь ли ты слишком много синхронных операций, когда мог бы правильно использовать async/await, может быть, загружаешь целые файлы в память, когда можешь использовать streaming, или делаешь n+1 запросов, когда хватило бы одного с join. ещё один момент: если используешь express, убедись, что у тебя нет лишних middleware или middleware, которые делают тяжёлые операции без необходимости.

потом я бы посоветовал делать настоящий профайлинг, не просто гадать. используй node --prof, чтобы сгенерировать isolate файл, потом проанализируй его с помощью node --prof-process. или используй clinic.js, он проще читается, или просто разбросай console.time() по коду, чтобы посмотреть, где тратится время. иногда выясняется, что узкое место совсем не там, где ты ожидал, типо какая-то установленная библиотека, которая делает что-то тяжёлое за кулисами. если ты делаешь много тяжёлых вычислений, подумай и о worker threads, чтобы не блокировать event loop.

ах и конечно же, обновись на стабильную версию node, если ты отстаёшь, убедись, что у тебя достаточно свободной памяти и что у тебя нет утечки памяти (мониторь через process.memoryUsage()).

Профилирование - твоё лучшее оружие. Используй встроенный профайлер Node.js (или clinic.js, если нужно что-то более мощное), чтобы увидеть, где ты реально тратишь время, потому что часто узкое место совсем не там, где ты думаешь. После этого в 90% случаев это комбинация медленных запросов к базе данных, накапливающихся коллбэков или синхронного файлового ввода-вывода, который надо убрать.

Ваш ответ

Войдите, чтобы ответить.