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

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

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

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

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

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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//для синхронных операций
try {
} catch (e) {}

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

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

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

1
2
3
const compression = require('compression');

app.use(compression());

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

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

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