Я ошибаюсь, когда обнаруживаю, что Node.js не выполняет сжатие gzip и нет модулей для сжатия gzip? Как можно использовать веб-сервер без сжатия? Что мне здесь не хватает? Должен ли я попытаться - задыхаться - перенести алгоритм на JavaScript для использования на стороне сервера?
compression
gzip
node.js
SnickersAreMyFave
источник
источник
Если вы используете Express , вы можете использовать его метод сжатия как часть конфигурации:
var express = require('express'); var app = express.createServer(); app.use(express.compress());
И вы можете узнать больше о сжатии здесь: http://expressjs.com/api.html#compress
И если вы не используете Express ... Почему бы и нет, чувак ?! :)
ПРИМЕЧАНИЕ. (Спасибо @ankitjaininfo) Это промежуточное ПО должно быть одним из первых, которые вы «используете» для обеспечения сжатия всех ответов. Убедитесь, что это выше ваших маршрутов и статического обработчика (например, как у меня это выше).
ПРИМЕЧАНИЕ: (спасибо @ ciro-costa) Начиная с Express 4.0
express.compress
промежуточное ПО устарело. Он был унаследован от connect 3.0, и Express больше не включает connect 3.0. Проверьте экспресс-сжатие для получения промежуточного программного обеспечения.источник
This middleware should be placed "high" within the stack to ensure all responses may be compressed.
Убедитесь, что это находится над вашими маршрутами и статическим обработчикомexpress.compress
момента промежуточное ПО (которое было унаследовано от connect 3.0 <) устарело (начиная с Express 4.0), поскольку оно больше не включает connect 3.0 <. Проверьте github.com/expressjs/compression, чтобы получить промежуточное ПО.1- Установить компрессию
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 или в varnish. Может быть полезно иметь большую часть оптимизаций http, таких как gzip на уровне приложения, чтобы вы могли иметь более детальный подход к тому, какие ресурсы gzip.
Я фактически создал свой собственный модуль gzip для expressjs / connect под названием gzippo https://github.com/tomgco/gzippo, хотя новый он действительно выполняет свою работу. Кроме того, он использует node-compress вместо запуска команды unix gzip.
источник
Даже если вы не используете экспресс, вы все равно можете использовать их промежуточное ПО. Модуль сжатия является то , что я использую:
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)
источник
Хотя, как правильно указали другие
nginx
, использование внешнего веб-сервера, который может обрабатывать это неявно, другой вариант - использовать отличный node-http-proxy nodejitsu для обслуживания ваших активов.например:
httpProxy.createServer( require('connect-gzip').gzip(), 9000, 'localhost' ).listen(8000);
Этот пример демонстрирует поддержку сжатия GZIP за счет использования подключения промежуточного модуля:
connect-gzip
.источник
Для сжатия файла вы можете использовать приведенный ниже код
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 для Express, KOA и других. Например: https://www.npmjs.com/package/express-static-gzip.
Однако Node ужасно плохо справляется с задачами с интенсивным использованием ЦП, такими как сжатие, завершение SSL и т. Д. Вместо этого используйте «настоящие» сервисы промежуточного программного обеспечения, такие как nginx или HAproxy, см. Пункт 3 здесь: http://goldbergyoni.com/checklist-best- практика-узла-js-в производстве /
источник
Использовать сжатие gzip
Сжатие Gzip может значительно уменьшить размер тела ответа и, следовательно, увеличить скорость работы веб-приложения. Используйте промежуточное ПО сжатия для сжатия gzip в приложении Express. Например:
var compression = require('compression'); var express = require('express') var app = express() app.use(compression())
источник
На сегодняшний день
epxress.compress()
кажется, отлично справляется с этой задачей.В любом экспресс-приложении просто позвоните
this.use(express.compress());
.Я лично управляю локомотивом поверх экспресса, и он прекрасно работает. Я не могу говорить ни с какими другими библиотеками или фреймворками, построенными поверх Express, но если они соблюдают полную прозрачность стека, все будет в порядке.
источник
С node прошло несколько хороших дней, и вы правы, что не можете создать веб-сервер без gzip.
На странице модулей в Node.js Wiki есть довольно много вариантов. Я перепробовал большинство из них, но вот тот, который я наконец использую -
https://github.com/donnerjack13589/node.gzip
v1.0 также вышла, и пока она довольно стабильна.
источник