Estoy escribiendo una aplicación web que necesita almacenar datos JSON en una pequeña caché del lado del servidor de tamaño fijo a través de AJAX (piense: cuotas operativas ). No tengo control sobre el servidor.
Necesito reducir el tamaño de los datos almacenados para permanecer dentro de una cuota del lado del servidor, y esperaba poder comprimir el JSON en cadena en el navegador antes de enviarlo al servidor.
Sin embargo, no puedo encontrar mucho en el camino de las implementaciones de JavaScript de Gzip. ¿Alguna sugerencia sobre cómo puedo comprimir los datos en el lado del cliente antes de enviarlos?
javascript
ajax
compression
gzip
David Citron
fuente
fuente
Respuestas:
Editar Parece haber una mejor solución LZW que maneja cadenas Unicode correctamente en http://pieroxy.net/blog/pages/lz-string/index.html (Gracias a pieroxy en los comentarios).
No conozco ninguna implementación de gzip, pero la biblioteca jsolait (el sitio parece haberse ido) tiene funciones para la compresión / descompresión LZW. El código está cubierto por la LGPL .
fuente
Tuve otro problema, no quería codificar datos en gzip sino decodificar datos comprimidos . Estoy ejecutando código JavaScript fuera del navegador, así que necesito decodificarlo usando puro javascript .
Me tomó algo de tiempo pero lo encontré en el JSXGraph biblioteca hay una manera de leer datos comprimidos.
Aquí es donde encontré la biblioteca: http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/ Incluso hay una utilidad independiente que puede hacer eso, JSXCompressor , y el código está licenciado por LGPL.
Simplemente incluya el archivo jsxcompressor.js en su proyecto y luego podrá leer los datos comprimidos codificados en base 64:
Entiendo que no es lo que querías, pero todavía respondo aquí porque sospecho que ayudará a algunas personas.
fuente
<?php..
bit? .. Pregunto porque se pasa aldecompress
método.14:16:28.512 TypeError: e.replace is not a function[Weitere Informationen] jsxcompressor.min.js:19:12201
Acabamos de lanzar pako https://github.com/nodeca/pako , puerto de zlib a javascript. Creo que ahora es la implementación js más rápida de deflate / inflate / gzip / ungzip. Además, tiene licencia MIT democrática. Pako admite todas las opciones de zlib y sus resultados son binarios iguales.
Ejemplo:
fuente
var inflate = require('pako/lib/inflate').inflate; var text = inflate(zipped, {to: 'string'});
@Redsandro así es como uso pako.incorrect header check
Porté una implementación de LZMA desde un módulo GWT a JavaScript independiente. Se llama LZMA-JS .
fuente
Aquí hay algunos otros algoritmos de compresión implementados en Javascript:
fuente
No probé, pero hay una implementación de JavaScript de ZIP, llamada JSZip:
http://jszip.stuartk.co.uk/
https://stuk.github.io/jszip/
fuente
Supongo que una implementación de compresión de JavaScript genérica del lado del cliente sería una operación muy costosa en términos de tiempo de procesamiento en lugar del tiempo de transferencia de unos pocos paquetes HTTP más con carga útil sin comprimir.
¿Has hecho alguna prueba que te dé una idea de cuánto tiempo hay para ahorrar? Quiero decir, el ahorro de ancho de banda no puede ser lo que buscas, ¿o sí?
fuente
La mayoría de los navegadores pueden descomprimir gzip sobre la marcha. Esa podría ser una mejor opción que una implementación de JavaScript.
fuente
Puede usar un applet Java de 1 píxel por 1 píxel incrustado en la página y usarlo para la compresión.
No es JavaScript y los clientes necesitarán un tiempo de ejecución de Java, pero hará lo que usted necesite.
fuente