Node.js: сжатие Gzip?

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

Вот список модhive для сжатия :

У узла v0.6.x теперь есть стабильный модуль zlib в ядре – есть несколько примеров того, как использовать серверную часть в документах.

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

// 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); 

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

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

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

И если вы не используете Экспресс … Почему бы и нет, мужик ?! 🙂

ПРИМЕЧАНИЕ: (благодаря @ankitjaininfo) Это промежуточное программное обеспечение должно быть одним из первых, которое вы «используете», чтобы обеспечить сжатие всех ответов. Убедитесь, что это выше ваших маршрутов и статического обработчика (например, как я его выше).

ПРИМЕЧАНИЕ. (Спасибо @ ciro-costa). Поскольку express 4.0, промежуточное программное обеспечение express.compress устарело. Он был унаследован от connect 3.0, и выражение больше не включает connect 3.0. Проверьте Express Compression для получения промежуточного программного обеспечения.

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

 npm install compression 

2- Используйте его

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

сжатие на Github

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

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

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

Как насчет этого ?

Узел-компресс
Модуль streamового сжатия / gzip для node.js
Чтобы установить, убедитесь, что у вас установлен libz, и выполните:
node-waf configure
assembly узла-waf
Это добавит двоичный модуль compress.node в build / default.

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

например:

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

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

На странице модhive на Node.js Wiki имеется множество опций. Я пробовал большинство из них, но это тот, который я, наконец, использую –

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

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

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

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

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

Тем не менее, Узел ужасно плох при выполнении задач с интенсивным процессором, таких как gzipping, завершение SSL и т. Д. Вместо этого используйте «настоящие» сервисы промежуточного программного обеспечения, такие как nginx или HAproxy, см. Bullet 3 здесь: http://goldbergyoni.com/checklist-best- практик из-узлов JS-в-производства /

  • Почтовая папка в C #
  • Gzip против minify
  • Почему BCL GZipStream (с StreamReader) не надежно обнаруживает ошибки данных с помощью CRC32?
  • Действительно простое сжатие коротких строк
  • Как вы программно загружаете веб-страницу в Java
  • Interesting Posts

    Как удалить папки из Windows 7 DriverStore?

    Получить событие удаления приложения в android

    Как получить пользовательскую информацию пользователя от сервера авторизации сервера / пользователя OAuth2

    Как установить задержку в Android?

    Удаленная отладка приложений C ++ с Eclipse CDT / RSE / RDT

    Почему Excel усекает мои 16-значные цифры?

    Как отображать данные из Firestore в RecyclerView с Android?

    Преобразование типа данных datetime2 в тип данных datetime приводило к превышению значения

    Изменение режима доступа к функциям в производном classе

    Формат плавающей точки для std :: ostream

    Почему я получаю строку, не называю тип Error?

    Регистрация кнопки гарнитуры с помощью BroadcastReceiver на Android

    Как сформировать изображение мозаики с помощью GIMP или другого приложения. Используя другие фотографии?

    Как получить группы пользователей в Active Directory? (c #, asp.net)

    Как CountDownLatch используется в многопоточности Java?

    Давайте будем гением компьютера.