6 простых способов ускорить экспресс


Author:  Mich

Вступление

Express - безусловно, самый популярный веб-фреймворк для Node.js благодаря простому API, доступным плагинам и огромному сообществу. Благодаря сообществу нет недостатка в документации и примерах использования основного Express API, и это здорово, но не всегда сразу понятно, как улучшить производительность вашего веб-приложения по мере его роста. Здесь я покажу вам некоторые из самых простых и эффективных способов повысить производительность ваших приложений Express.

gzip сжатие

Сжатие gzip не является чем-то новым для веб-серверов, но о нем легко забыть, особенно если вы привыкли использовать фреймворки, которые включают его по умолчанию. Это одно из тех улучшений, которые очень легко добавить, и оно обеспечивает значительный прирост производительности. Сжатие содержимого вашей страницы может уменьшить размер страницы до 70% .

 var compression = require('compression'); 
 var express = require('express'); 
 
 var app = express(); 
 
 app.use(compression()); 

Запустите Express в производственном режиме

По умолчанию Express будет работать в режиме разработки, что легко упустить из виду, особенно тем, кто только начинает работать с Node.js / Express.

Так в чем же разница между производственным режимом и режимом разработки? Оказывается, в режиме разработки шаблоны представлений считываются из файла для каждого запроса, тогда как в производственном режиме шаблоны загружаются один раз и кешируются. Это сделано для того, чтобы вы могли легко вносить изменения на лету, не перезагружая приложение каждый раз во время разработки. Однако в производственной среде это может значительно снизить производительность, поскольку приходится иметь дело с медленным вводом-выводом файлов по сравнению с гораздо более быстрой оперативной памятью.

К счастью для вас, перевести Express в рабочий режим очень просто. Это просто вопрос установки переменной окружения.

 $ export NODE_ENV=production 

Однако будьте осторожны с этим методом. Если сервер перезапустится, вы потеряете эту переменную среды и вернетесь в режим разработки. Более постоянное решение - установить переменную в вашем .bash_profile :

 $ echo export NODE_ENV=production >> ~/.bash_profile 
 $ source ~/.bash_profile 

Минимизировать с помощью Uglify

Практически для каждого веб-сайта, особенно с большим количеством стилей и клиентской функциональностью, статические ресурсы могут сильно снижать производительность. Необходимость отправки нескольких файлов JavaScript и CSS для каждого запроса в конечном итоге сказывается на вашем сервере, и это даже не учитывая время, в течение которого пользователь должен ждать завершения всех отдельных HTTP-запросов на стороне клиента.

Чтобы смягчить это, вы можете использовать служебный пакет, такой как Uglify, для минимизации и объединения ваших файлов JavaScript и CSS. Объедините это с средством запуска задач, таким как Grunt, и вы легко сможете автоматизировать процесс и не беспокоиться об этом. Достаточно функциональный файл Grunt (с использованием плагина grunt-contrib-uglify ) может выглядеть примерно так:

 module.exports = function(grunt) { 
 
 grunt.initConfig({ 
 uglify: { 
 options: { 
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n' 
 }, 
 dist: { 
                files: { 
                'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>'] 
                } 
 } 
 } 
 }); 
 
 grunt.loadNpmTasks('grunt-contrib-uglify'); 
 grunt.registerTask('default', ['uglify']); 
 }; 

Уменьшите свое промежуточное ПО

Я не говорю, что вам никогда не следует использовать промежуточное программное обеспечение, очевидно, что это необходимо, и есть много причин для использования промежуточного программного обеспечения в ваших приложениях Express, но легко пойти за борт и скопировать все промежуточное программное обеспечение, которое вы видите в других приложениях. Просмотрите свой список зависимостей и решите, действительно ли вам нужно все, что вы установили (файлы cookie, сеансы, i18n, регистраторы запросов и т. Д.).

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

 var express = require('express'); 
 var debugMiddleware = require('my-debug-middleware'); 
 
 var app = express(); 
 
 if (process.env.NODE_ENV !== 'production') { 
 app.use(debugMiddleware()); 
 } 

Увеличить максимальное количество сокетов

По умолчанию HTTP-сервер Node.js имеет ограничение пула сокетов всего 5. Это очень консервативное число, и большинство серверов могут обрабатывать гораздо большее количество сокетов, чем это.

В качестве альтернативы вы можете разрешить как можно больше сокетов:

 var http = require('http'); 
 var https = require('https'); 
 
 http.globalAgent.maxSockets = Infinity; 
 https.globalAgent.maxSockets = Infinity; 

Изменить : это относится только к Node v0.10 и старше. Начиная с версии maxSockets для maxSockets (как для http и для https ) установлено значение Infinity .

Используйте Cache-Control

Вы можете установить HTTP-заголовок, который сообщит браузеру пользователя, что нужно кэшировать только что полученный контент. Обычно это хорошая идея для статических ресурсов (JS, CSS и т. Д.), Которые меняются нечасто. Для назначения настроек кеша для всего приложения используйте:

 var express = require('express'); 
 var app = express(); 
 
 app.use(express.static(__dirname + '/public', { maxAge: 31557600 })); 

Это назначит настройки кеширования для всего в public каталоге. Для более детального управления вы можете настроить кеширование на основе отдельных запросов / маршрутов:

 var express = require('express'); 
 var app = express(); 
 
 app.get('/index.html', function (req, res) { 
 res.setHeader('Cache-Control', 'public, max-age=86400'); 
 res.render('index.html'); 
 }); 

Заключение

Имейте в виду, что вы можете найти отличные советы, просматривая веб-сайты с открытым исходным кодом, такие как платформа для ведения блогов Ghost. Эти приложения разрабатываются и используются тысячами людей, поэтому обычно вы можете найти отличные полезные фрагменты, о которых иначе вы бы не услышали.

Есть немало вещей, которые вы можете сделать за пределами Express, чтобы ускорить процесс, поэтому, если вы еще этого не сделали, попробуйте Redis, Nginx и другие механизмы кэширования, чтобы улучшить свое приложение. Поверьте, это того стоит.

Есть еще советы по производительности Express? Дайте нам знать об этом в комментариях!


Смотрите также