Sembra che Express e Connect abbiano rimosso le loro funzioni gzip perché erano troppo inefficienti. Esistono attualmente soluzioni affidabili per gzip con express-js?Contenuto statico gzip espresso
risposta
Connect 2.0 ha aggiunto il supporto per compress() middleware basato sul new zlib stuff con che si è appena uscito in Nodo Nucleo API.
Si può fare uso di questo nel vostro Server Express con l'aggiunta di una dipendenza per la connessione 2.0 nel package.json
del file:
{
...
dependencies: {
"connect" : "2.x",
"express" : "2.x",
// etc..
}
}
e quindi applicare la seguente logica nella configurazione app espresso:
// 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);
Si prega di notare che questa roba è ancora piuttosto nuova e mentre potrei farlo funzionare localmente, la mia applicazione cloud Heroku si lamentava della dipendenza da Compress 2.x durante il pre-commit hook quando si distribuisce tramite git:
-----> 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-'
Come si può vedere, che stanno ancora utilizzando una vecchia versione di nodo (0.4.7).
UPDATE:
In realtà, ho potuto ottenere Heroku per distribuire questo con l'aggiunta corrispondente engines
sezione nel package.json
:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
e questi sono i risultati quando si utilizza un http tester di compressione:
UPDATE giugno 2014
Hiya, se state leggendo questo ora. Non dimenticare che la roba di cui sopra è rilevante solo per Express 2.0.
Express 3.0 e 4.0 utilizzano una sintassi diversa per abilitare la compressione http, vedere post di gasolin appena sotto.
Non riuscivo a farlo funzionare su Express 2.5.1. –
@AndreyLushnikov: Devi 'use()' 'compress' ** prima di **' static'. 'compress' [sostituisce] (https://github.com/senchalabs/connect/blob/2.3.9/lib/middleware/compress.js#L77-91)' res.write' e 'res.end' in modo che può proxy i dati tramite zlib. Se 'static' è prima di' compress', gestisce l'intera richiesta prima che il middleware 'compress' abbia la possibilità di eseguire e applicare i metodi' res'. Steven, ho aggiornato la tua risposta per scambiare le chiamate 'use()'. – josh3736
@gasolin indica che Express 3.0 ora ha il supporto 'compress()'. Se stai leggendo questo, potresti aggiornare la tua risposta? – HyderA
Se hai cercato il npm potresti aver trovato node-compress.
Non dovrebbe essere troppo difficile iniettarlo come middleware in espresso.
ho anche cercato NPM e trovato per esempio:
https://github.com/tomgallacher/gzippo
gzippo pronunciato gzippo è un middleware gzip per Connect utilizzando Compress per migliorare le prestazioni.
Gzippo è stato recentemente sviluppato (2 giorni fa) che credo sia una buona cosa. Non posso parlarti dell'uso della produzione. Dovresti testarlo/confrontarlo da solo. Probabilmente userei anche un CDN per un sito live o Nginx per ospitare i miei file statici invece di qualche modulo nodejs.
Stiamo utilizzando gzippo in produzione per un grande quotidiano del Regno Unito. La bellezza della configurazione della compressione del contenuto nel livello nodo è che si può semplicemente mettere Varnish, Squid o un CDN upstream e obbedirà alle intestazioni http e conserverà una copia compressa nella cache sul proxy/CDN per tutte le richieste successive. Ciò mantiene la configurazione della cache con il tuo codice nodo e nel tuo git/svn ecc. – serby
Collegare sosterrà il nuovo materiale zlib nel nodo nella prossima release
E 'stato aggiunto ora, vedi post sotto .. –
Express 3.0 ha ora comprimere() Supporto:
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
EDIT per Express 4.0, comprimere diventare il middleware separata. Quindi, è necessario installare e l'importazione di usarlo:
var compress = require('compression');
app.use(compress());
Express '4.x' ha rimosso quasi tutto il middleware, incluso' compress'. Puoi ora utilizzare il middleware 'compression' di Connect ora: https://github.com/expressjs/compression. –
richiede passaggi aggiuntivi in heroku –
In quali circostanze si attiva la compressione?L'ho appena aggiunto ma ho scritto 'res.send' e non è uscito nessun contenuto gzip. Richiede 'res.end' o qualche altro trigger? – CMCDragonkai
- 1. Contenuto statico non gzip in IE9 da IIS7
- 2. Fornisce contenuto gzip da django
- 3. come gzip il contenuto in asp.net MVC?
- 4. Django: contenuto statico non trovato
- 5. Retrofit: come analizzare la risposta di GZIP senza codifica del contenuto: gzip header
- 6. Come servire il contenuto statico in Nancy
- 7. Come eseguire il contenuto statico in Rails?
- 8. Come servire contenuto statico da tomcat
- 9. Compilare contenuto statico per un sito web
- 10. Come ottenere JMeter per richiedere il contenuto gzip?
- 11. Abilita mod_deflate per inviare codifica del contenuto: gzip
- 12. Come determinare la lunghezza del contenuto di un file gzip?
- 13. Comprimere il contenuto con PHP ob_start() vs Apache Deflate/Gzip?
- 14. Posso comprimere gzip tutto il mio contenuto html (pagine)
- 15. Come ottenere il contenuto gzip di invio come risposta PHP
- 16. Spring gzip vs Tomcat gzip
- 17. iPhone e gzip
- 18. Rallentatore Espresso
- 19. Disabilita compressione GZIP per client IE6
- 20. GZip fasci system.web.optimization
- 21. Errore test Espresso fallito
- 22. Escludere HttpModule dall'esecuzione di contenuto statico su IIS7
- 23. In che modo Rails distribuisce il contenuto statico al pubblico?
- 24. Teorico: è possibile/fattibile servire il contenuto statico tramite Websockets?
- 25. UITableView raggruppato con contenuto statico e dinamico nello storyboard iOS5
- 26. Qual è il cloud più semplice per contenuto Web statico
- 27. Fornisce contenuto statico da un file jar con Jetty?
- 28. Jetty: reindirizzamento da HTTP a HTTPS per contenuto statico
- 29. Come posso avviare Jetty8 per pubblicare solo contenuto statico?
- 30. IIS 8 401.3 con ACL e contenuto statico
Usa nginx gzip – dumitru
Nel caso in cui questo è ancora rilevante per qualcuno: Come ho voluto servire i file statici gziped ma non volevo l'overhead di fare questo sul vola ho scritto un piccolo wrapper in cima a express.static, che permette di servire file gziped già pronti. Questo sarebbe utile se hai integrato gzipping di file html/css/js nel tuo processo di compilazione. Modulo può essere trovato su npm: [express-static-gzip] (https://www.npmjs.com/package/express-static-gzip) – Tobi