2011-02-27 7 views
7

Estoy buscando enviar datos desde el servidor en un formato comprimido al cliente (con solicitudes ajax), y luego descomprimir esa información con un navegador? ¿Hay una biblioteca para esto?¿Hay una biblioteca disponible para compresión en Javascript

¡No estoy buscando comprimir archivos javascript!

Gracias ...

EDIT: Creo que la pregunta no era lo suficientemente claro, no quiero para comprimir archivos html, quiero almacenar algunos archivos LZMA comprimido o cualquier otro formato de compresión en el servidor (como una obj), y luego necesito descomprimirlos después de que lo obtuve con AJAX. No compresión/descompresión simultánea con gzip. Apertura de archivos zipeed después de obtenerlos con Javascript.

+0

Para los recursos estáticos, un servidor configurado correctamente ya se va a hacer de compresión para usted, y el navegador descomprimirá automáticamente. Para dinámicas como las que quiere consultar, es más complicado pero también posible. ¿Qué lenguaje de servidor usas? –

+0

Tenga en cuenta que HTTP/1.1 ya admite tres formatos de compresión diferentes ('gzip', 'desinflar' y 'comprimir'). –

+0

@gkaytck: ¿Ayuda algo http://stackoverflow.com/questions/2349210/how-to-compress-data-on-asp-net-and-uncompress-in-javascript? – wilbbe01

Respuesta

6

Su servidor web (y el navegador) deberían ser capaces de manejar esto de forma transparente usando gzip. Cómo se configura esto dependerá del servidor que esté utilizando.

Pagar mod_deflate en apache o habilitar gzip en nginx.

El navegador descomprimirá automáticamente los datos antes de que lleguen a su manejador XHR y puede estar seguro sabiendo que sus datos se comprimieron tanto como fue posible en tránsito.

+0

Esto realmente no se aplica a las respuestas dinámicas. Trucos adicionales son usualmente necesarios para comprimirlos. –

+1

No estoy seguro de qué te hace pensar eso? A menos que estés tratando con algún tipo de aplicación de transmisión.Tanto apache como nginx compilarán alegremente una respuesta dinámica antes de devolverla simplemente agregando la línea relevante para habilitar la compresión. –

0

Esto parece prometedor: http://code.google.com/p/jslzjb/

+3

-1, esa biblioteca está rota, devuelve "bytes" que son mayores que 255. – aaaaaaaaaaaa

+0

Funciona bien para mí, y otras soluciones más desarrolladas (basadas en nodos) se han portado casi textualmente desde ese código, sin mencionar el problema. – Orwellophile

0

Lo dijo Erik, http://code.google.com/p/jslzjb/

Aquí hay algo de código básico para que te va, y la decodificación.

var stringStreamIn = function(s) { 
    this.data = s; 
    this.length = this.data.length; 
    this.offset = -1; 
    this.readByte = function(){ 
     if (++this.offset >= this.length) { 
      return null; 
     } 
     return this.data.charCodeAt(this.offset); 
    }; 
}; 

var stringStreamOut = function() { 
    this.data = ''; 
    this.length = function() { return this.data.length; }; 
    this.writeByte = function(value) { 
     this.data += String.fromCharCode(value); 
    }; 
}; 

var so = new stringStreamOut(); 
var si = new stringStreamIn(atob("XQAAgAD//////////wAnG8AHA8+NCpYMj8Bgfez6bsJh4zoZx3fA+gih10oOa6rwYfkaucJIKX8T69I5iOe8WJwg/Ta7x3eHeDomxR6Vf824NLmKSrWHKdnM9n0D2aipzLbHv5//sTGAAA==")); 
LZMA.decompressFile(si, so); 
console.log(so.data); 
3

que sé, esta es una respuesta muy tarde, pero me encontré con este una alternativa interesante: http://pieroxy.net/blog/pages/lz-string/index.html También cuenta con implementaciones en otros idiomas!

Y mi favorito ahora es pako. Es realmente increíblemente rápido y fácil de usar y compatible con el conocido zlib

Cuestiones relacionadas