Автор оригинала: Scott Robinson.
Вступление
Экспресс Является безусловно, самая популярная веб-каркас для Node.js благодаря его простым API, доступным плагинам и огромным сообществу. Благодаря сообществу, нет нехватки документации и примеров о том, как использовать Core Express API, который отлично, но не всегда сразу понятно, как улучшить производительность вашего веб-приложения, как он растет. Здесь я покажу вам некоторые из самых простых и наиболее эффективных способов улучшить производительность ваших экспресс-приложений.
ГЦИП сжатие
Сжатие GZIP – это не совсем новое для веб-серверов, но это легко забыть, особенно когда вы используете для использования фреймворков, которые включают его по умолчанию. Это одно из тех улучшений, которые чрезвычайно просты в добавлении, и он обеспечивает большой повышение производительности. Сжатие содержимого вашего страницы может Уменьшить размер страницы до 70% Отказ
var compression = require('compression'); var express = require('express'); var app = express(); app.use(compression());
Run Express в режиме производства
По умолчанию Express будет работать в режиме разработки, который легко пропустить, особенно для тех, кто только начинает с Node.js/Express.
Итак, какая разница между режимом производства и развития в любом случае? Оказывается, в режиме разработки шаблоны просмотра читаются из файла для каждого запроса, тогда как в режиме производства шаблоны загружаются один раз и кэшируют. Это сделано, чтобы вы могли легко внести изменения на лету без необходимости перезапустить приложение каждый раз во время разработки. Однако в производственной среде это может значительно уменьшить вашу работу, поскольку вы должны иметь дело с медленным файлом IO по сравнению с гораздо более быстрее.
Счастливчик для вас, высказывание в режиме производства легко. Это просто вопрос установки переменной окружающей среды.
$ export NODE_ENV=production
Будьте осторожны с этим методом, хотя. Если сервер перезапускается, вы потеряете эту переменную среды и вернитесь к использованию режима разработки. Более постоянное решение состоит в том, чтобы установить переменную внутри вашего .bash_profile
:
$ echo export NODE_ENV=production >> ~/.bash_profile $ source ~/.bash_profile
Минифицируйте с UGLIFY
Для каждого веб-сайта, особенно те, кто с множеством стилей и клиентской функциональности, статические активы могут быть огромным сопротивлением производительности. Необходимость отправки нескольких файлов JavaScript и CSS для каждого запроса в конечном итоге принимает свой посылку на вашем сервере, и это даже не рассматривает время, когда пользователь должен дождаться всех отдельных HTTP-запросов, чтобы закончить на стороне клиента.
Чтобы помочь смягчить это, вы можете использовать утилитую пакет, как UGLIFY Чтобы министвовать и объединить файлы JavaScript и CSS. Объедините это с задач бегуном, как Грунт И вы легко сможете автоматизировать процесс и не нужно беспокоиться об этом. Довольно способный хрюкнутый файл (используя плагин grunt-up-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']); };
Уменьшите промежуточное программное обеспечение
Я не говорю, что вы никогда не должны использовать промежуточное программное обеспечение, очевидно, это необходимо, и есть много причин использовать промежуточное программное обеспечение в ваших экспресс-приложениях, но легко пойти за борт и копировать все промежуточное программное обеспечение, которое вы видите другие приложения. Просмотрите свой список зависимостей и решите, что вам действительно нужно все, что вы установили (куки, сеансы, 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;
Редактировать : Это относится только к узлу V0.10 и старше. Как V0.12, Maxsockets
(для обоих http
и https
) установлено на Бесконечность
Отказ
Используйте Cache-Control
Вы можете установить заголовок HTTP, который расскажет, что браузер пользователя кэширует контент, который только что получил. Это является хорошей идеей для статических активов (JS, CSS и т. Д.), которые меняются нечасто. Для присвоения настроек кэша шириной приложений, используйте:
var express = require('express'); var app = express(); app.use(express.static(__dirname + '/public', { maxAge: 31557600 }));
Это присваивает настройки кэша для всего в публичный
каталог. Для более мелкозернистого контроля вы можете установить кэширование на основе индивидуальных запросов/маршрутов:
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'); });
Заключение
Имейте в виду, что вы можете найти отличные советы, просматривая веб-сайты с открытым исходным кодом, как Призрак платформа для блога. Эти приложения разрабатываются и используются тысячами людей, поэтому вы обычно можете найти несколько больших полезных фрагментов, которые вы не услышали бы о ином.
Существует довольно много вещей, которые вы можете сделать за пределами экспресс, чтобы ускорить вещи, поэтому, если вы еще этого не сделаете, проверьте Redis, Nginx и другие механизмы кэширования, чтобы дать вашему приложению. Поверьте мне, это стоит ваше время.
Есть более экспресс-спектакль? Дайте нам знать об этом в комментариях!