Перейти к содержанию

Улучшение производительности

Обеспечение высокого уровня производительности и надежности Node.js приложений достигается соблюдением простых рекомендаций и правил.

1. Минимизируйте использование синхронных функций, особенно при выполнении операций ввода/вывод, которые блокируют выполнение цикла событий.

fs.readFileSync('data.txt') //избегайте

fs.readFile('data.txt', (err, data) => {}) //так правильно

2. Обрабатывайте отдачу статического контента с помощью функций промежуточной обработки.

app.use(express.static(`${__dirname}/assets`))

3. Предусматривайте обработку ошибок при выполнении каждой операции, чтобы предотвратить аварийное завершение процесса и дать пользователю подробное сообщение о том, что он сделал не так и что привело к сбою в работе приложения.

//для синхронных операций
try {
} catch (e) {}

//для асинхронных операций в callback-функции
;(err, f) => {
  if (err) {
  }
}

//при работе с объектами Promise
Promise.then(() => {}).catch(err => {})

4. Настройте сжатие gzip, которое уменьшает размер передаваемых данных любого формата, что увеличивает скорость обмена данными между клиентом и сервером.

const compression = require('compression')

app.use(compression())

5. Указывайте при запуске Node.js приложения на сервере значение production для переменной среды окружения process.env.NODE_ENV. В связке с Express активация рабочей среды инициирует сохранение файлов шаблонов и стилей в кэш и генерацию сообщений об ошибке без полного StackTrace. Экспериментально выявлено, что все перечисленное увеличивает быстродействие приложения примерно в три раза. Переменные окружения Node.js задаются в операционной системе.

6. Используйте кластеризацию при запуске приложения для распределения нагрузки между дополнительными экземплярами.

7. Управляйте приложением с помощью менеджера процессов, например, pm2. Использование pm2 позволит вам настроить автоматический перезапуск процесса приложения при возникновении необработанной ошибки и тем самым обеспечит его непрерывную работу. Также менеджер процессов поможет вам отслеживать количество потребляемых ресурсов.