Экспресс gzip статический контент - PullRequest
38 голосов
/ 16 июня 2011

Экспресс и подключение, похоже, удалили свои функции gzip, потому что они были слишком неэффективны. Есть ли надежные решения для gzip с express-js в настоящее время?

Ответы [ 5 ]

81 голосов
/ 10 марта 2013

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()); 
31 голосов
/ 18 марта 2012

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).


UPDATE:

На самом деле, я мог бы заставить Heroku развернуть это, добавив соответствующий раздел engines в package.json:

{
    ...
    "engines": {
        "node": ">= 0.6.0 < 0.7.0"
    }
}

А вот результаты использования http-тестера сжатия:

enter image description here

ОБНОВЛЕНИЕ Июнь 2014

Привет, если ты читаешь это сейчас. Не забывайте, что все вышеперечисленное относится только к Express 2.0.

Express 3.0 и 4.0 используют разные синтаксисы для включения сжатия http, см. Сообщение от gasolin чуть ниже.

5 голосов
/ 16 июня 2011

Я также искал npm и нашел, например:

  • https://github.com/tomgallacher/gzippo

    gzippo произносится G-Zippo является GZIP промежуточное ПО для подключения с использованием Compress для лучшей производительности.

Gzippo был недавно разработан (2 дня назад), что я считаю хорошей вещью. Я не могу рассказать вам об использовании продукции. Вы должны проверить / протестировать его самостоятельно. Возможно, я бы также использовал CDN для живого сайта или Nginx для размещения моих статических файлов вместо какого-то модуля nodejs.

3 голосов
/ 12 октября 2011

Connect будет поддерживать новый материал zlib в Node в следующем выпуске

1 голос
/ 16 июня 2011

Если вы искали npm, вы, возможно, сталкивались с node-compress .

Не должно быть слишком сложно внедрить его в качестве промежуточного программного обеспечения в экспресс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...