Узел.js: сжатие Gzip?



я ошибаюсь в поиске этого узла.js не сжимает gzip, и нет никаких модулей для выполнения сжатия gzip? Как можно использовать веб-сервер без сжатия? Чего мне здесь не хватает? Должен ли я попытаться-gasp-портировать алгоритм на JavaScript для использования на стороне сервера?

760   13  

13 ответов:

вот количество модули listed для сжатия:

узел в v0.6.x имеет стабильный модуль zlib в core now-есть несколько примеров того, как использовать его на стороне сервера в документах тоже.

пример (взятый из документов):

// server example
// Running a gzip operation on every request is quite expensive.
// It would be much more efficient to cache the compressed buffer.
var zlib = require('zlib');
var http = require('http');
var fs = require('fs');
http.createServer(function(request, response) {
  var raw = fs.createReadStream('index.html');
  var acceptEncoding = request.headers['accept-encoding'];
  if (!acceptEncoding) {
    acceptEncoding = '';
  }

  // Note: this is not a conformant accept-encoding parser.
  // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3
  if (acceptEncoding.match(/\bdeflate\b/)) {
    response.writeHead(200, { 'content-encoding': 'deflate' });
    raw.pipe(zlib.createDeflate()).pipe(response);
  } else if (acceptEncoding.match(/\bgzip\b/)) {
    response.writeHead(200, { 'content-encoding': 'gzip' });
    raw.pipe(zlib.createGzip()).pipe(response);
  } else {
    response.writeHead(200, {});
    raw.pipe(response);
  }
}).listen(1337);

Если вы используете Экспресс, то вы можете использовать его метод сжатия как часть конфигурации:

var express = require('express');
var app = express.createServer();
app.use(express.compress());

и вы можете найти больше на compress здесь:http://expressjs.com/api.html#compress

и если вы не используете Экспресс... Почему нет?! :)

Примечание: (благодаря @ankitjaininfo) это промежуточное программное обеспечение должно быть одним из первых, которые вы "используете", чтобы обеспечить сжатие всех ответов. Убедитесь, что это выше ваши маршруты и статический обработчик (например. как у меня выше).

Примечание: (благодаря @ciro-costa) начиная с express 4.0,express.compress middleware является устаревшим. Он был унаследован от connect 3.0 и express больше не включает connect 3.0. Проверьте Сжатие Экспресс для получения промежуточного слоя.

1 - Установка сжатие

npm install compression

2 - Использовать

var express     = require('express')
var compression = require('compression')

var app = express()
app.use(compression())

сжатие на Github

вообще говоря, для производственного веб-приложения вы захотите поместить свой узел.в JS приложение за легкий обратный прокси-сервер, например, nginx или конфигурационный файл lighttpd. Среди многих преимуществ этой установки вы можете настроить обратный прокси-сервер для сжатия http или даже сжатия tls без необходимости изменения исходного кода приложения.

хотя вы можете gzip с помощью обратного прокси-сервера, такие как nginx, lighttpd или в лаке. Может быть полезно иметь большинство http-оптимизаций, таких как gzipping на уровне приложения, чтобы вы могли иметь очень детальный подход к тому, что актив для gzip.

Я фактически создал свой собственный модуль gzip для expressjs / connect под названием gzippo https://github.com/tomgco/gzippo хотя новый он делает работу. Кроме того, он использует node-compress вместо нереста unix команды gzip.

как о этой?

узел-компресс
Потоковое сжатие / модуль gzip для узла.js
Чтобы установить, убедитесь, что у вас установлен libz, и запустите:
node-waf configure
узел-это будущее строить
Это поставит компресс.узел двоичного модуля в сборке по умолчанию.
...

В то время как другие прямо указали на использование веб-сервера переднего плана, такого как nginx может обрабатывать это неявно, другой вариант, это использовать nodejitsu это!--5--> отлично node-http-proxy для обслуживания ваших активов.

например:

httpProxy.createServer(
 require('connect-gzip').gzip(),
 9000, 'localhost'
).listen(8000);

этот пример демонстрирует поддержку сжатия gzip с помощью подключение промежуточного программного обеспечения модуль: connect-gzip.

даже если вы не используете express, вы все равно можете использовать их промежуточное программное обеспечение. Элемент модуль сжатия - это то, что я использую:

var http = require('http')
var fs = require('fs')
var compress = require("compression")
http.createServer(function(request, response) {
  var noop = function(){}, useDefaultOptions = {}
  compress(useDefaultOptions)(request,response,noop) // mutates the response object

  response.writeHead(200)
  fs.createReadStream('index.html').pipe(response)
}).listen(1337)

для сжатия файла вы можете использовать ниже код

var fs = require("fs");
var zlib = require('zlib');
fs.createReadStream('input.txt').pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
console.log("File Compressed.");

для распаковки одного файла вы можете использовать ниже код

var fs = require("fs");
var zlib = require('zlib');
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));
console.log("File Decompressed.");

Это было несколько хороших дней с node, и вы правы, чтобы сказать, что вы не можете создать веб-сервер без gzip.

есть довольно много вариантов, приведенных на странице модулей на узле.js Wiki. Я попробовал большинство из них, но это тот, который я, наконец, использование -

https://github.com/donnerjack13589/node.gzip

v1.0 также отсутствует, и до сих пор он был довольно стабильным.

на сегодняшний день, epxress.compress (), кажется, делает блестящую работу этого.

в любом экспресс-приложении просто назовите это.использовать(экспресс.compress ()); я запускаю Локомотив поверх express лично, и это работает красиво. Я не могу говорить ни с какими другими библиотеками или фреймворками, построенными поверх express, но пока они соблюдают полную прозрачность стека, вы должны быть в порядке.

существует несколько промежуточных программ Gzip для Express, KOA и других. Например: https://www.npmjs.com/package/express-static-gzip

тем не менее, Node ужасно плохо справляется с такими интенсивными задачами ЦП, как gzipping, завершение SSL и т. д. Вместо этого используйте "реальные" промежуточные службы, такие как nginx или HAproxy, см. пуля 3 здесь: http://goldbergyoni.com/checklist-best-practice-of-node-js-in-production/

Comments

    Ничего не найдено.