Экспресс и соединение, похоже, удалили свои функции gzip, потому что они были слишком неэффективными. Есть ли надежные решения для gzip с express-js в настоящее время?Экспресс-статический контент gzip
ответ
Connect 2.0 добавлена поддержка compress() промежуточного программного обеспечения на основе new zlib stuff с тем, что только что вышел в 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 во время предварительной фиксации крючка при развертывании с помощью мерзавца:
-----> 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: [email protected]'>=2.0.0- <3.0.0-'
Как вы можете видеть, что они все еще используют старую версию узла (0.4.7).
UPDATE:
На самом деле, я мог бы получить Heroku для развертывания путем добавления соответствующего engines
раздел в package.json
:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
И эти результаты при использовании HTTP тестер сжатия:
UPDATE июня 2014
хия, если вы читаете это сейчас. Не забывайте, что вышеизложенное относится только к Express 2.0.
Экспресс 3.0 и 4.0 используют другой синтаксис для включения сжатия HTTP, см. Сообщение на бензине чуть ниже.
Я не смог заставить его работать с Express 2.5.1. –
@AndreyLushnikov: Вы должны 'use()' 'compress' ** перед **' static'. 'compress' [заменяет] (https://github.com/senchalabs/connect/blob/2.3.9/lib/middleware/compress.js#L77-91)' res.write' и 'res.end', так что он может передавать данные через zlib. Если 'static' перед' compress', он обрабатывает весь запрос до того, как промежуточное программное обеспечение 'compress' имеет возможность запускать и исправлять методы' res'. Стивен, я обновил ваш ответ, чтобы поменять вызовы 'use()'. – josh3736
@ gasolin утверждает, что Express 3.0 теперь поддерживает 'compress()'. Если вы читаете это, не могли бы вы обновить свой ответ? – HyderA
Если вы искали номер npm, возможно, вы встретили node-compress.
Не должно быть слишком сложно вводить его в качестве промежуточного программного обеспечения в экспресс.
Я также искал НПМ и найти, например:
https://github.com/tomgallacher/gzippo
gzippo произносятся gzippo является GZIP промежуточного слоя для Connect с помощью Сжать для лучшей производительности.
Gzippo недавно был разработан (2 дня назад), который я думаю, что это хорошая вещь. Я не могу рассказать вам об использовании продукции. Вы должны сами проверить/сравнить его. Я также, вероятно, использовал бы CDN для живого сайта или Nginx для размещения моих статических файлов вместо некоторого модуля nodejs.
Мы используем gzippo в производстве для большой британской газеты. Красота настройки сжатия содержимого на уровне узла заключается в том, что вы можете просто поместить Ларни, Squid или CDN вверх по течению, и он будет подчиняться заголовкам http и хранить кэшированную копию на молнии на прокси/CDN для всех последующих запросов. Это сохраняет конфигурацию кеша с кодом узла и в вашем git/svn и т. Д. – serby
Connect будет поддерживать новый ZLIB материал в узле в следующем выпуске
Его добавили сейчас, см. Сообщение ниже. –
Express 3.0 теперь имеет сжатие() поддержка:
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
РЕДАКТИРОВАТЬ для Express 4.0, сжатие стать отдельным промежуточного программного обеспечения. Таким образом, вы должны установить и импортировать его использовать:
var compress = require('compression');
app.use(compress());
Express '4.x' удаляет почти все промежуточное ПО, включая' compress'. Теперь вы можете использовать промежуточное программное обеспечение Connect 'compression': https://github.com/expressjs/compression. –
Это требует дополнительных шагов в heroku –
В каких обстоятельствах срабатывает триггер сжатия?Я просто добавил его, но написал 'res.send', и никакого содержимого gzipped не появилось. Требуется ли 'res.end' или какой-либо другой триггер? – CMCDragonkai
- 1. Safari Не принимает gzip-контент?
- 2. Как кэшировать сжатый контент Apaches GZIP
- 3. Как сохранить Gzip-контент в Aerospike (кеш)?
- 4. gzip сжимает динамический контент с помощью symfony2
- 5. спросить у сервера, чтобы не gzip-контент
- 6. Как сделать fuseki подавать gzip-контент?
- 7. Развернуть gzip-контент на Amazon S3
- 8. gzip или нет gzip
- 9. «Неподдерживаемый контент-кодирование: gzip, gzip» при отправке формы с помощью механизации
- 10. Какая строка кодирования сообщает веб-серверу НЕ отправлять gzip-контент?
- 11. .Net Web API 2 POST, потребляющий сжатый контент gzip
- 12. Есть ли какой-нибудь контент, который мне не нужно gzip?
- 13. Могу ли я gzip-compress весь мой html-контент (страницы)
- 14. Как узнать, обслуживает ли мой сервер GZip-контент?
- 15. wikipedia servers gzip content
- 16. Весна gzip vs Tomcat gzip
- 17. WebPack GZIP против экспресс Gzip
- 18. GZIP без использования IIS?
- 19. содержание сжат GZIP ожидается
- 20. node.js gzip распаковать xmlhttprequesr.responseText
- 21. gzip без поддержки сервера?
- 22. (nginx) Gzip за запрос против статического gzip
- 23. Запись gzip-файла с помощью gzip
- 24. HDF сжатие gzip против сжатия GZIP ASCII
- 25. WCF Gzip по запросу POST
- 26. GZip-сжатие ответа REST
- 27. gzip HttpWebRequest
- 28. IronPython gzip
- 29. Декомпрессия GZIP
- 30. Gzip decpressing
Использование Nginx-х GZIP – dumitru
В случае, если это по-прежнему актуальна для кого-то: Как я хотел служить, являющегося файлом статические файлы, но не хотел над головой делать это на fly я написал небольшую обертку поверх express.static, которая позволяет обслуживать все готовые файлы gziped. Это было бы полезно, если бы вы интегрировали gzipping html/css/js-файлы в свой процесс сборки. Модуль можно найти на npm: [express-static-gzip] (https://www.npmjs.com/package/express-static-gzip) – Tobi