Express y connect parecían haber eliminado sus funciones gzip porque eran demasiado ineficaces. ¿Hay alguna solución confiable para gzip con express-js actualmente?Contenido estático Express gzip
Respuesta
Connect 2.0 ha añadido soporte para compress() middleware basado en la new zlib stuff con que acaba de salir de la API nodo central.
Puede hacer uso de esto en su servidor expresa mediante la adición de una dependencia para conectar 2.0 en su package.json
archivo:
{
...
dependencies: {
"connect" : "2.x",
"express" : "2.x",
// etc..
}
}
y luego aplicar la siguiente lógica en la configuración de su aplicación expresa:
// 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);
Tenga en cuenta que esta materia es bastante nueva y aunque pude hacer que funcione localmente, mi aplicación en la nube Heroku se quejó de la dependencia de Compress 2.x durante el gancho pre-confirmación cuando se despliega a través de 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-'
Como se puede ver, todavía están usando una versión antigua de nodo (0.4.7).
ACTUALIZACIÓN:
En realidad, podría conseguir Heroku para desplegar esto añadiendo el apartado correspondiente engines
en el package.json
:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
y estos son los resultados cuando se usa un http Probador de compresión:
actualización de junio de 2014
Hiya, si usted está leyendo esto ahora. No olvide que las cosas anteriores solo son relevantes para Express 2.0.
Express 3.0 y 4.0 utilizan una sintaxis diferente para habilitar la compresión http, ver publicación de gasolin justo debajo.
No pude hacer que funcione en Express 2.5.1. –
@AndreyLushnikov: Debes 'usar()' 'comprimir' ** antes de **' static'. 'compress' [reemplaza] (https://github.com/senchalabs/connect/blob/2.3.9/lib/middleware/compress.js#L77-91)' res.write' y 'res.end' para que puede proxy datos a través de zlib. Si 'static' está antes de' compress', maneja toda la solicitud antes de que el middleware 'compress' tenga la oportunidad de ejecutar y parchear los métodos' res'. Steven, he actualizado tu respuesta para intercambiar las llamadas 'use()'. – josh3736
@gasolin afirma que Express 3.0 ahora tiene soporte 'compress()'. Si estás leyendo esto, ¿podrías actualizar tu respuesta? – HyderA
Si ha buscado la npm es posible que haya encontrado node-compress.
No debería ser demasiado difícil inyectarlo como middleware en express.
también han buscado NPM y se encontró por ejemplo:
https://github.com/tomgallacher/gzippo
gzippo pronunciada gzippo es un middleware gzip para la conexión utilizando Comprimir para un mejor rendimiento.
Gzippo se ha desarrollado recientemente (hace 2 días) que creo que es una buena cosa. No puedo contarte sobre el uso de producción. Debe probarlo/compararlo usted mismo. Probablemente también usaría un CDN para un sitio en vivo o Nginx para alojar mis archivos estáticos en lugar de algún módulo nodejs.
Estamos usando gzippo en producción para un gran periódico del Reino Unido. La belleza de configurar la compresión de contenido en la capa de nodo es que simplemente puede poner Varnish, Squid o CDN en sentido ascendente y obedecerá a los encabezados http y mantendrá una copia comprimida en caché en el proxy/CDN para todas las solicitudes posteriores. Esto mantiene la configuración de caché con tu código de nodo y en tu git/svn etc. – serby
Conectar apoyará el nuevo material zlib en el Nodo en la próxima versión
Se ha agregado ahora, mira la publicación a continuación ... –
Express 3.0 tiene ahora comprimir() soporte:
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
EDITAR para Express 4.0, comprimir convertirse en el middleware separada. Así que hay que instalar y de importación para que lo utilice:
var compress = require('compression');
app.use(compress());
Express '4.x' eliminó casi todo el middleware, incluyendo' compress'. Puede usar el middleware 'compression' de Connect ahora: https://github.com/expressjs/compression. –
requiere pasos adicionales en heroku –
¿En qué circunstancias se dispara la compresión?Acabo de agregarlo pero escribí 'res.send' y no salió contenido gzip. ¿Requiere 'res.end' o algún otro disparador? – CMCDragonkai
- 1. Respuesta de GZip en IIS Express
- 2. Sirviendo gzip contenido de django
- 3. Cómo almacenar contenido Apache GZIP comprimido
- 4. Contenido estático no comprimido en IE9 desde IIS7
- 5. Tomcat aseguró el contenido estático
- 6. Frasco, CherryPy y contenido estático
- 7. ¿Cómo hacer contenido estático en Rails?
- 8. Nginx: ¿busca contenido estático en varios directorios?
- 9. Comprimir contenido con PHP ob_start() vs Apache Deflate/Gzip?
- 10. ¿Cómo puedo aceptar el contenido comprimido gzip usando LWP :: UserAgent?
- 11. Obtener el contenido de la URL en Node.js con Express
- 12. iPhone y gzip
- 13. Deshabilitar compresión GZIP para clientes IE6
- 14. paquetes system.web.optimization GZip
- 15. Actualizado: ¿Mejores prácticas para gestionar contenido estático en Zend Framework?
- 16. cómo crear un VirtualHost para servir solo contenido estático
- 17. Cuál es la nube más fácil para contenido web estático
- 18. imágenes ASP.NET MVC y otros url contenido estático
- 19. ¿Se está publicando contenido estático de un jarfile con Jetty?
- 20. Compilación de contenido estático para un sitio web
- 21. ¿Cómo se sirve contenido estático con JAX-RS?
- 22. Django - sirviendo y administrando permisos para contenido estático
- 23. ¿Cómo comienzo Jetty8 para que solo sirva contenido estático?
- 24. Excluir que HttpModule se ejecute para contenido estático en IIS7
- 25. Cookies de Google Analytics frente a subdominio para contenido estático
- 26. IIS7: Diferencias entre la compresión de contenido estático y dinámico
- 27. iisnode y express
- 28. PHP Manual GZip Codificación
- 29. Desea habilitar la compresión GZip en Weblogic
- 30. ¿Cómo configuro programáticamente gzip en Jetty?
de uso nginx gzip – dumitru
En caso de que esto sigue siendo relevante para alguien: Como quería servir archivos estáticos gziped pero no quería que la sobrecarga de hacer esto en el fly escribí una pequeña envoltura encima de express.static, que permite servir archivos ya compilados. Esto sería útil si integra archivos gzipping html/css/js en su proceso de compilación. El módulo se puede encontrar en npm: [express-static-gzip] (https://www.npmjs.com/package/express-static-gzip) – Tobi