Czy mylę się, stwierdzając, że Node.js nie ma kompresji gzip i nie ma modułów do wykonywania kompresji gzip? Jak ktoś może korzystać z serwera WWW, który nie ma kompresji? Czego tu brakuje? Czy powinienem spróbować - zdyszać - przenieść algorytm do JavaScript do użytku po stronie serwera?
compression
gzip
node.js
SnickersAreMyFave
źródło
źródło
Jeśli używasz Express , możesz użyć jego metody kompresji w ramach konfiguracji:
var express = require('express'); var app = express.createServer(); app.use(express.compress());
Więcej na temat kompresji można znaleźć tutaj: http://expressjs.com/api.html#compress
A jeśli nie używasz Express ... Dlaczego nie, stary ?! :)
UWAGA: (dzięki @ankitjaininfo) To oprogramowanie pośredniczące powinno być jednym z pierwszych, które „używasz”, aby zapewnić skompresowanie wszystkich odpowiedzi. Upewnij się, że jest to powyżej twoich tras i obsługi statycznej (np. Jak mam to powyżej).
UWAGA: (dzięki @ ciro-costa) Od wersji Express 4.0
express.compress
oprogramowanie pośredniczące jest przestarzałe. Został odziedziczony z Connect 3.0 i Express nie zawiera już Connect 3.0. Sprawdź Express Compression, aby uzyskać oprogramowanie pośredniczące.źródło
This middleware should be placed "high" within the stack to ensure all responses may be compressed.
Upewnij się, że znajduje się on nad Twoimi trasami i statyczną obsługąexpress.compress
oprogramowanie pośredniczące (które zostało odziedziczone z connect 3.0 <) jest przestarzałe (od wersji Express 4.0), ponieważ nie zawiera już connect 3.0 <. Sprawdź github.com/expressjs/compression, aby uzyskać oprogramowanie pośredniczące.1- Zainstaluj kompresję
2- Użyj go
var express = require('express') var compression = require('compression') var app = express() app.use(compression())
kompresja na Githubie
źródło
Ogólnie rzecz biorąc, w przypadku produkcyjnej aplikacji internetowej będziesz chciał umieścić aplikację node.js za lekkim odwrotnym serwerem proxy, takim jak nginx lub lighttpd. Wśród wielu zalet tej konfiguracji można skonfigurować odwrotne proxy do kompresji http lub nawet kompresji tls bez konieczności zmiany kodu źródłowego aplikacji.
źródło
Chociaż możesz użyć gzipa przy użyciu odwrotnego proxy, takiego jak nginx, lighttpd lub w varnish. Większość optymalizacji http, takich jak gzipowanie, może być korzystna na poziomie aplikacji, dzięki czemu można mieć bardzo szczegółowe podejście do tego, jakie zasoby mają być wykonywane przy użyciu programu gzip.
Właściwie stworzyłem własny moduł gzip dla expressjs / connect o nazwie gzippo https://github.com/tomgco/gzippo, chociaż nowy spełnia swoje zadanie. Dodatkowo używa kompresji węzła zamiast odradzania polecenia unix gzip.
źródło
Nawet jeśli nie używasz ekspresu, nadal możesz używać ich oprogramowania pośredniego. Moduł kompresji , co używam:
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)
źródło
Podczas gdy inni słusznie zauważyli, używając front- endowego serwera WWW, który
nginx
może sobie z tym poradzić niejawnie, inną opcją jest użycie doskonałego node-http-proxy firmy nodejitsu do obsługi twoich zasobów.na przykład:
httpProxy.createServer( require('connect-gzip').gzip(), 9000, 'localhost' ).listen(8000);
Ten przykład pokazuje, wsparcie dla kompresji gzip dzięki zastosowaniu connect middleware modułu:
connect-gzip
.źródło
Do skompresowania pliku możesz użyć poniższego kodu
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.");
Do rozpakowania tego samego pliku możesz użyć poniższego kodu
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.");
źródło
A co powiesz na to ?
źródło
Istnieje wiele programów pośredniczących Gzip dla Express, KOA i innych. Na przykład: https://www.npmjs.com/package/express-static-gzip
Jednak Node bardzo źle radzi sobie z wykonywaniem zadań intensywnie wykorzystujących procesor, takich jak gzipping, kończenie SSL itp. Zamiast tego użyj „prawdziwych” usług oprogramowania pośredniego, takich jak nginx lub HAproxy, zobacz punkt 3 tutaj: http://goldbergyoni.com/checklist-best- praktyka-node-js-in-production /
źródło
Na dzień dzisiejszy
epxress.compress()
wydaje się, że wykonuje to świetną robotę.W dowolnej aplikacji ekspresowej po prostu zadzwoń
this.use(express.compress());
.Osobiście prowadzę lokomotywę na ekspresie i to działa pięknie. Nie mogę rozmawiać z żadnymi innymi bibliotekami lub frameworkami zbudowanymi na bazie Express, ale dopóki przestrzegają pełnej przejrzystości stosu, powinno być w porządku.
źródło
Minęło kilka dobrych dni z node i masz rację, mówiąc, że nie możesz stworzyć serwera WWW bez programu gzip.
Na stronie modułów na Wiki Node.js podano wiele opcji. Wypróbowałem większość z nich, ale to jest ten, którego w końcu używam -
https://github.com/donnerjack13589/node.gzip
Wersja 1.0 również została wydana i do tej pory była dość stabilna.
źródło
Użyj kompresji gzip
Kompresja Gzip może znacznie zmniejszyć rozmiar treści odpowiedzi, a tym samym zwiększyć szybkość aplikacji internetowej. Użyj oprogramowania pośredniczącego do kompresji gzip w aplikacji Express. Na przykład:
var compression = require('compression'); var express = require('express') var app = express() app.use(compression())
źródło