que funciona definicion compress como caracteristicas javascript ajax compression gzip

funciona - Implementación de JavaScript de Gzip



javascript que es (9)

Estoy escribiendo una aplicación web que necesita almacenar datos JSON en un pequeño caché del lado del servidor de tamaño fijo a través de AJAX (piense: cuotas opociales ). 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 gzip el JSON en el navegador antes de enviarlo al servidor.

Sin embargo, no puedo encontrar mucho en la implementación de JavaScript de Gzip. ¿Alguna sugerencia sobre cómo puedo comprimir los datos en el lado del cliente antes de enviarlos?


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, cuenta con licencia democrática del MIT. Pako admite todas las opciones de zlib y sus resultados son binarios iguales.


Aquí hay algunos otros algoritmos de compresión implementados en Javascript:


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.



Porté una implementación de LZMA de un módulo GWT a JavaScript independiente. Se llama LZMA-JS .


Puede usar un applet de 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.


Supongo que una implementación genérica de compresión de JavaScript del lado del cliente sería una operación muy costosa en términos de tiempo de procesamiento en lugar de tiempo de transferencia de unos cuantos paquetes HTTP más con carga útil sin comprimir.

¿Ha realizado alguna prueba que le dé una idea de cuánto tiempo puede ahorrar? Quiero decir, los ahorros de ancho de banda no pueden ser lo que buscas, ¿o sí?


Tuve otro problema, no quería codificar datos en gzip, sino decodificar datos gzip . Estoy ejecutando código javascript fuera del navegador, por lo que necesito decodificarlo utilizando javascript puro .

Me tomó algo de tiempo, pero descubrí que en la biblioteca JSXGraph hay una forma de leer datos comprimidos con gzip.

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 tiene licencia LGPL.

Simplemente incluya el archivo jsxcompressor.js en su proyecto y luego podrá leer una base codificada en 64 datos gzipeados:

<!doctype html> </head> <title>Test gzip decompression page</title> <script src="jsxcompressor.js"></script> </head> <body> <script> document.write(JXG.decompress(''<?php echo base64_encode(gzencode("Try not. Do, or do not. There is no try.")); ?>'')); </script> </html>

Entiendo que no es lo que querías, pero aún respondo aquí porque sospecho que ayudará a algunas personas.


Editar Parece que hay una mejor solución LZW que maneja las 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 .

// LZW-compress a string function lzw_encode(s) { var dict = {}; var data = (s + "").split(""); var out = []; var currChar; var phrase = data[0]; var code = 256; for (var i=1; i<data.length; i++) { currChar=data[i]; if (dict[phrase + currChar] != null) { phrase += currChar; } else { out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0)); dict[phrase + currChar] = code; code++; phrase=currChar; } } out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0)); for (var i=0; i<out.length; i++) { out[i] = String.fromCharCode(out[i]); } return out.join(""); } // Decompress an LZW-encoded string function lzw_decode(s) { var dict = {}; var data = (s + "").split(""); var currChar = data[0]; var oldPhrase = currChar; var out = [currChar]; var code = 256; var phrase; for (var i=1; i<data.length; i++) { var currCode = data[i].charCodeAt(0); if (currCode < 256) { phrase = data[i]; } else { phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar); } out.push(phrase); currChar = phrase.charAt(0); dict[code] = oldPhrase + currChar; code++; oldPhrase = phrase; } return out.join(""); }