Экспресс gzip статический контент
Экспресс и подключение, похоже, удалили свои функции gzip, потому что они были слишком неэффективными. Есть ли надежные решения для gzip с express-js в настоящее время?
5 ответов
В Connect 2.0 добавлена поддержка промежуточного ПО compress(), основанного на новом материале zlib, который только что появился в Node Core API.
Вы можете использовать это в вашем экспресс-сервере, добавив зависимость для подключения 2.0 в вашем package.json
файл:
{
...
dependencies: {
"connect" : "2.x",
"express" : "2.x",
// etc..
}
}
А затем примените следующую логику в конфигурации вашего экспресс-приложения:
// Create static file server with gzip support
var app = express.createServer(express.logger());
app.use(connect.compress());
app.use(express.static(__dirname + '/public'));
app.listen(80);
Обратите внимание, что этот материал все еще довольно новый, и хотя я мог заставить его работать локально, мое облачное приложение Heroku жаловалось на зависимость от Compress 2.x во время ловушки перед фиксацией при развертывании через git:
-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
Using Node.js version: 0.4.7
Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
npm ERR! Error: No compatible version found: connect@'>=2.0.0- <3.0.0-'
Как видите, они все еще используют старую версию узла (0.4.7).
ОБНОВИТЬ:
На самом деле, я мог бы заставить Heroku развернуть это, добавив соответствующий engines
раздел в package.json
:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
И вот результаты при использовании http-тестера сжатия:
ОБНОВЛЕНИЕ Июнь 2014
Привет, если ты читаешь это сейчас. Не забывайте, что все вышеперечисленное относится только к Express 2.0.
В Express 3.0 и 4.0 используется другой синтаксис для включения сжатия http, см. Статью "Газолин" чуть ниже.
В Express 3.0 теперь есть поддержка compress():
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
EDIT для Express 4.0, компрессия становится отдельным промежуточным программным обеспечением. Таким образом, вы должны установить и импортировать, чтобы использовать его:
var compress = require('compression');
app.use(compress());
Я также искал npm и нашел, например:
https://github.com/tomgallacher/gzippo
gzippo произносится как g-zippo - это промежуточное ПО gzip для Connect, использующее Compress для повышения производительности.
Gzippo был недавно разработан (2 дня назад), что я считаю хорошей вещью. Я не могу рассказать вам об использовании продукции. Вы должны проверить / протестировать это самостоятельно. Я также, вероятно, использовал бы CDN для живого сайта или Nginx для размещения моих статических файлов вместо некоторого модуля nodejs.
Connect будет поддерживать новый материал zlib в Node в следующем выпуске
Если вы искали npm, возможно, вы столкнулись с node-compress.
Не должно быть слишком сложно внедрить его в качестве промежуточного программного обеспечения в экспресс.