Статьи

5 простых настроек производительности для Node.js Express

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

Если вы ничего не делаете, Node.js и Express работают невероятно быстро. Тем не менее, существует несколько простых способов заставить Express 4.x работать еще быстрее…

1. Переключитесь в производственный режим

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

DEBUG=express:* node ./app.js 

На вашем живом сервере вы можете заметно улучшить производительность, переключившись в рабочий режим. Это достигается установкой NODE_ENV среды NODE_ENV в NODE_ENV . Его можно установить в текущем сеансе в Windows до запуска приложения Express:

 set NODE_ENV=production 

или Mac / Linux:

 export NODE_ENV=production 

Пользователи Linux также могут установить NODE_ENV в одну строку при запуске:

 NODE_ENV=production node ./app.js 

В идеале вы должны настроить свою среду, добавив export NODE_ENV=production в ваш ~/.bash_profile или соответствующий стартовый скрипт.

2. Включить GZIP

Express 4.x предоставляет минимальную функциональность, которую можно улучшить с помощью промежуточного программного обеспечения. Одной из менее очевидных отсутствующих функций является сжатие GZIP, которое сокращает полезную нагрузку HTTP, поэтому она может быть расширена браузером при получении. Чтобы добавить GZIP, установите модуль сжатия, используя npm:

 npm install compression --save 

(В зависимости от настроек вам может потребоваться использовать sudo в Mac / Linux — для этого есть несколько способов .)

В вашем основном файле запуска приложения включите модуль сжатия:

 var compression = require('compression'); 

затем смонтируйте его как первую функцию промежуточного программного обеспечения (до других методов Express .use ):

 // GZIP all assets app.use(compression()); 

3. Удалите ненужное промежуточное ПО

Если вы создали предварительно созданное приложение с помощью Express Generator или аналогичного процесса, удалите все модули промежуточного программного обеспечения, которые вы не используете.

Например, если вы не используете cookie-файлы, вы можете удалить модуль cookie-parser или реализовать более простую альтернативу, используя req.cookies и res.cookie .

Может быть возможно удалить определенные процессы, такие как отладочные выходные данные в производственном режиме, например

 if (app.get('env') !== 'production') { // debugging middleware in development only app.use(debuggerModule); } 

Тем не менее, возможно, лучше сохранить фавикон . Браузеры часто запрашивают файлы favicon.ico, а модуль улучшает кэширование.

4. Рассмотрим более простой шаблонизатор

Jade — это стандартный шаблонный движок для многих установок Express, и это отличный выбор. Однако, если вы довольны написанием собственного HTML-кода и нуждаетесь в простой интерполяции и оценке, рассмотрите более легкую альтернативу, такую ​​как doT, которую можно добавить в качестве промежуточного программного обеспечения Express с помощью модуля express-dot-engine .

Кроме того, вы можете обойти механизм шаблонов для более простых ответов, например

 app.get('/hello', function (req, res) { res.write('Hello!'); res.end(); }); 

Какой движок шаблонов вы используете, всегда проверяйте, включен ли кеш представления:

 app.set('view cache', true); 

5. Не забывайте кэшировать!

В отличие от большинства серверных приложений, приложения Node.js работают постоянно. Поэтому вы можете один раз установить часто используемые переменные, такие как объекты подключения к базе данных, и использовать их повторно при каждом запросе для каждого пользователя.

Концепция может быть расширена по мере необходимости. В общем, чем больше элементов с высокой интенсивностью использования вы можете кэшировать, тем выше будет производительность. Например, предположим, что приложение CMS на основе Express содержит ссылки на пять последних статей на домашней странице. Этот список может быть сгенерирован и сохранен в переменной и обновлен только после публикации новой статьи.

Бонус Быстрые Советы

Хотите еще немного?…

  • Попробуйте использовать nginx для обслуживания статического содержимого и облегчить загрузку Node.js и Express.
  • Используйте инструмент сборки, такой как Gulp, для минимизации и объединения ваших шаблонов HTML, файлов CSS и JavaScript.
  • Ограничьте использование переменных сеанса. Данные пользовательского сеанса обычно хранятся в памяти, что может привести к проблемам с производительностью по мере роста использования. Рассмотрите возможность использования идентификатора только тогда, чтобы получить информацию о пользователе из базы данных во время запроса.
  • Увеличьте максимальное количество сокетов HTTP с пяти до большего числа, например
     // use http/https as necessary http.globalAgent.maxSockets = 50; 
  • Где возможно, вызывайте последовательности операций блокировки параллельно, а не последовательно.
  • Избегайте использования синхронных блокирующих вызовов во всем, кроме инициализации приложения.
  • Всегда помните, что код, выполняемый для одного пользователя, блокирует выполнение кода для каждого другого пользователя.

У вас есть дополнительные советы по производительности для Node.js или Express? Буду рад услышать их в комментариях.