Node.js: compressione Gzip?

Sto sbagliando nel trovare che Node.js non fa compressione gzip e non ci sono moduli là fuori per eseguire la compressione gzip? Come si può usare un server Web senza compressione? Cosa mi manca qui? Dovrei provare a gasp-port l’algoritmo a JavaScript per l’utilizzo lato server?

Ecco il numero di moduli elencati per la compressione :

Il nodo v0.6.x ha ora un modulo zlib stabile nel core – ci sono alcuni esempi su come usarlo sul lato server anche nei documenti.

Un esempio (tratto dai documenti):

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

Se stai usando Express , puoi utilizzare il suo metodo di compressione come parte della configurazione:

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

E puoi trovare ulteriori informazioni su comprimere qui: http://expressjs.com/api.html#compress

E se non stai usando Express … Perché no, amico ?! 🙂

NOTA: (grazie a @ankitjaininfo) Questo middleware dovrebbe essere uno dei primi che “usi” per garantire che tutte le risposte siano compresse. Assicurarsi che questo sia al di sopra delle rotte e del gestore statico (ad es. Come ho sopra).

NOTA: (grazie a @ ciro-costa) Da express 4.0, il middleware express.compress è deprecato. È stato ereditato dalla connessione 3.0 e Express non include più la connessione 3.0. Controlla Express Compression per ottenere il middleware.

1- Installa compressione

 npm install compression 

2- Usalo

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

compressione su Github

In generale, per un’applicazione web di produzione, dovrai mettere l’app node.js dietro un proxy inverso leggero come nginx o lighttpd. Tra i numerosi vantaggi di questa configurazione, è ansible configurare il proxy inverso per eseguire la compressione http o anche la compressione tls, senza dover modificare il codice sorgente dell’applicazione.

Sebbene tu possa gzip usare un proxy inverso come nginx, lighttpd o in vernice. Può essere utile avere la maggior parte delle ottimizzazioni http come gzipping a livello di applicazione in modo da poter avere un approccio molto dettagliato su quale asset gzip.

In realtà ho creato il mio modulo gzip per expressjs / connect chiamato gzippo https://github.com/tomgco/gzippo anche se nuovo fa il lavoro. Inoltre utilizza il nodo-compress invece di generare il comando unix gzip.

Che ne dici di questo ?

node-compress
Un modulo di compressione / gzip streaming per node.js
Per installare, assicurarsi di aver installato libz ed eseguire:
configurazione di nodo-waf
build di nodo-waf
Questo metterà il modulo binario compress.node in build / default.

Mentre come altri hanno giustamente sottolineato utilizzando un server Web front-end come nginx grado di gestirlo in modo implicito, un’altra opzione è quella di utilizzare l’ eccellente nodo-http-proxy di nodejitsu per servire le risorse.

per esempio:

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

Questo esempio dimostra il supporto per la compressione gzip attraverso l’uso del modulo middleware connect-gzip : connect-gzip .

Anche se non stai usando express, puoi comunque utilizzare il loro middleware. Il modulo di compressione è quello che sto usando:

 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) 

Per comprimere il file puoi usare sotto il codice

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

Per decomprimere lo stesso file è ansible utilizzare sotto il codice

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

Sono stati pochi giorni buoni con il nodo, e hai ragione di dire che non puoi creare un server web senza gzip.

Ci sono molte opzioni sulla pagina dei moduli sul Wiki di Node.js. Ho provato la maggior parte di loro, ma questo è quello che finalmente utilizzo –

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

anche la versione 1.0 è fuori ed è stata abbastanza stabile finora.

Ad oggi, epxress.compress () sembra fare un ottimo lavoro.

in qualsiasi app Express chiama this.use (express.compress ()); Sto gestendo la locomotiva sopra espressa e questo sta funzionando magnificamente. Non riesco a parlare con altre librerie o framework costruite sulla sommità di express, ma finché si rispettano la trasparenza dello stack completo si dovrebbe andare bene.

Ci sono diversi middleware Gzip per Express, KOA e altri. Ad esempio: https://www.npmjs.com/package/express-static-gzip

Tuttavia, Nodo è terribilmente cattivo a svolgere attività ad alta intensità di CPU come gzipping, terminazione SSL, ecc. Invece, utilizzare un servizio middleware “reale” come nginx o HAproxy, vedere il punto 3 qui: http://goldbergyoni.com/checklist-best- pratica di nodes-js-in-produzione /