¿Me equivoco al encontrar que Node.js no tiene compresión gzip y no hay módulos para realizar la compresión gzip? ¿Cómo puede alguien usar un servidor web que no tiene compresión? ¿Que me estoy perdiendo aqui? ¿Debo intentar — gasp — portar el algoritmo a JavaScript para uso en el servidor?Node.js: compresión Gzip?
Respuesta
Éstos son modules número de la lista for compression:
¿Qué tal this?
nodo-compresa
un módulo de compresión de streaming/gzip para Node.js
de instalar, asegúrese de que ha instalado libz, y ejecute:
nodo-WAF configurar
acumulación nodo-WAF
Esto pondrá el módulo binario compress.node en compilación/predeterminado.
...
En términos generales, para una aplicación Web de producción, tendrá que poner su aplicación Node.js detrás de un proxy inverso ligero, tal como nginx o lighttpd. Entre los muchos beneficios de esta configuración, puede configurar el proxy inverso para hacer compresión http o incluso compresión tls, sin tener que cambiar el código fuente de la aplicación.
no permita que el nodo sirva archivos estáticos, deje que el proxy se encargue de la compresión, encuentre que es la mejor práctica en prod-env, puede usar nginx o lighty de todos modos para evitar que su usario root ejecute el nodo en el puerto 80 – ezmilhouse
Dependiendo en el uso, realmente consideraría que esta es la respuesta correcta. – prasanthv
@ezmilhouse Incluso si tiene un proxy, su servidor node.js todavía tiene que * servir * esos archivos estáticos al proxy, y no hay razón para perder ancho de banda incluso en las tuberías dentro de la misma máquina. –
Han pasado unos buenos días con el nodo, y tiene razón al decir que no puede crear un servidor web sin gzip.
Hay muchas opciones disponibles en la página de módulos en la Wiki Node.js. Probé la mayoría de ellos, pero este es el que finalmente estoy usando -
https://github.com/donnerjack13589/node.gzip
v1.0 también está fuera y ha sido bastante estable hasta el momento.
Aunque puede gzip utilizando un proxy inverso como nginx, lighttpd o en barniz. Puede ser beneficioso tener la mayoría de las optimizaciones de HTTP, como gzipping en el nivel de aplicación, para que pueda tener un enfoque mucho más detallado sobre qué activos usar gzip.
He creado mi propio módulo gzip para expressjs/connect llamado gzippo https://github.com/tomgco/gzippo aunque es nuevo. Además usa node-compress en lugar de generar el comando unix gzip.
Estoy usando gzippo en un pequeño servidor web node.js ahora, ¡cosas buenas! – bosgood
cómo comprobar si gzip se aplica a los informes estáticos? –
El nodo v0.6.x tiene ahora un núcleo estable zlib module; también hay ejemplos de cómo usarlo en el lado del servidor en los documentos.
Un ejemplo (tomado de los docs):
// 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);
Me encontré con un problema con Internet Explorer no le gustaba el encabezado zlib que resolví utilizando 'createDeflateRaw' en lugar de 'createDeflate' – mark
Mientras que los demás derecha han señalado el uso de un servidor web extremo frontal tal como nginx
puede manejar esta implícitamente, otra opción, es utilizar nodejitsu's excelente node-http-proxy a saque sus activos.
por ejemplo:
httpProxy.createServer(
require('connect-gzip').gzip(),
9000, 'localhost'
).listen(8000);
Este ejemplo demuestra apoyo para la compresión gzip mediante el uso de connect middleware módulo: connect-gzip
.
Si está utilizando Express, a continuación, puede utilizar su método de compresión como parte de la configuración:
var express = require('express');
var app = express.createServer();
app.use(express.compress());
Y usted puede encontrar más información sobre compresa aquí: http://expressjs.com/api.html#compress
Y si estás no usando Express ... ¿Por qué no, hombre? :)
NOTA: (gracias a @ankitjaininfo) Este middleware debe ser uno de los primeros que "usa" para asegurar que todas las respuestas estén comprimidas. Asegúrese de que esté por encima de sus rutas y del controlador estático (por ejemplo, cómo lo tengo arriba).
NOTA: (gracias a @ ciro-costa) Desde la versión 4.0, el middleware express.compress
está en desuso. Fue heredado de connect 3.0 y express ya no incluye connect 3.0. Verifique Express Compression para obtener el middleware.
¿Vota abajo sin comentarios? Déjame saber por qué y espero poder mejorar la respuesta. O siéntase libre de editarse usted mismo. – Milimetric
'Este middleware debe colocarse" alto "dentro de la pila para asegurar que todas las respuestas se puedan comprimir. 'Asegúrese de que esto esté sobre sus rutas y controlador estático – ankitjaininfo
A partir de ahora el middleware' express.compress' (que se heredó de connect 3.0 <) está en desuso (ya que expresa 4.0) ya que no incluye connect 3.0
A partir de hoy, epxress.compress() parece estar haciendo un trabajo brillante de esto.
en cualquier aplicación express simplemente llame a this.use (express.compress()); Estoy ejecutando locomotoras en la parte superior de expresar personalmente y esto está funcionando muy bien. No puedo hablar con otras bibliotecas o frameworks construidos sobre express, pero siempre y cuando cumplan con la transparencia completa de la pila, estarás bien.
Esto realmente no tiene ninguna información nueva, duplica esta respuesta: http://stackoverflow.com/a/14341423/1355166 – gcochard
1- Instalar compresión
npm install compression
2- Utilice que
var express = require('express')
var compression = require('compression')
var app = express()
app.use(compression())
¡Rápido y fácil! +1 –
cómo comprobar si el assest estático es gzip o no. –
mis imágenes no reciben gzip –
Incluso si usted no está usando expreso, usted todavía puede utilizar su middleware. El compression module es lo que estoy 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)
para comprimir el archivo que se puede utilizar a continuación el código
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.");
Para descomprimir el mismo archivo se puede utilizar a continuación el código
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.");
¡Me encantaría ver algún texto descriptivo en esta respuesta! Si bien los fragmentos de código pueden responder la pregunta, es una buena práctica incluir algunas explicaciones para que el OT y el resto del mundo comprendan por qué responde la pregunta. – Clijsters
Bien @Clijsters gracias por la sugerencia. –
Hay hay varios middlewares Gzip para Express, KOA y otros. Por ejemplo: https://www.npmjs.com/package/express-static-gzip
Sin embargo, el Nodo es terriblemente malo en hacer tareas intensivas de la CPU como gzipping, terminación SSL, etc. En su lugar, utilice un servicio de 'reales' middleware como nginx o HAProxy, véase el punto 3 aquí: http://goldbergyoni.com/checklist-best-practice-of-node-js-in-production/
- 1. SignalR wth compresión gzip
- 2. AppEngine compresión gzip
- 3. compresión máxima gzip usando hormiga
- 4. Compresión GZip en WCF WebService
- 5. IIS 7.5 compresión ASP.NET-4 Gzip
- 6. CSS/JS GZip Compresión con Asp.Net
- 7. Deshabilitar compresión GZIP para clientes IE6
- 8. ¿Cómo implementar la compresión GZip en ASP.NET?
- 9. Desea habilitar la compresión GZip en Weblogic
- 10. Habilitación de compresión gzip para Jboss
- 11. compresión gzip para la materia JSF
- 12. Configuración de la compresión gzip en asp.net
- 13. Configuración del nivel de compresión IIS7 gzip
- 14. ¿Por qué la compresión gzip con Internet Explorer no funciona?
- 15. ¿Cómo puedo hacer que funcione la compresión gzip en IIS7?
- 16. ¿Por qué la compresión ASP.NET gzip está corrompiendo CSS?
- 17. Cómo habilitar la compresión GZip en el servidor XAMPP
- 18. ¿Por qué Safari no acepta la compresión GZIP?
- 19. ¿Debo usar un middleware de compresión GZIP o no?
- 20. Habilitar la compresión gzip en el cliente CXF
- 21. ¿Por qué la compresión gzip es más lenta para mí?
- 22. ¿Vale la pena la compresión GZip con AMF
- 23. acelerando solicitudes ajax - ¿se puede aplicar la compresión gzip?
- 24. Flume agent: ¿puedo especificar compresión como gzip o bz2?
- 25. Uso de la compresión gzip en Sinatra con Ruby
- 26. compresión gzip de la respuesta de codificación fragmentada?
- 27. mysqldump compresión
- 28. ¿Hay una biblioteca GZIP J2ME?
- 29. PHP Manual GZip Codificación
- 30. Problemas conocidos con gzip e IE6
Las versiones recientes del nodo incluyen un módulo integrado [zlib] (http://nodejs.org/api/zlib.html) que puede comprimir gzip cualquier secuencia. – Gil
Ahora hay middleware que hace [compresión] (https: //www.npmjs.com/paquete/compresión). – Dabowheel