Estou escrevendo um aplicativo Web que precisa armazenar dados JSON em um cache pequeno e de tamanho fixo do servidor via AJAX (pense em: cotas Opensocial ). Eu não tenho controle sobre o servidor.
Preciso reduzir o tamanho dos dados armazenados para permanecer dentro de uma cota do lado do servidor e esperava poder compactar o JSON com string no navegador antes de enviá-lo ao servidor.
No entanto, não consigo encontrar muita coisa nas implementações de JavaScript do Gzip. Alguma sugestão de como posso compactar os dados no lado do cliente antes de enviá-los?
javascript
ajax
compression
gzip
David Citron
fonte
fonte
Respostas:
Editar Parece haver uma solução LZW melhor que lida com seqüências de caracteres Unicode corretamente em http://pieroxy.net/blog/pages/lz-string/index.html (Agradecimentos a pieroxy nos comentários).
Não conheço nenhuma implementação gzip, mas a biblioteca jsolait (o site parece ter desaparecido) tem funções para compactação / descompactação LZW. O código é coberto pela LGPL .
fonte
Eu tive outro problema, não queria codificar dados no gzip, mas decodificar dados compactados . Estou executando o código javascript fora do navegador, por isso preciso decodificá-lo usando javascript puro .
Levei algum tempo, mas descobri que na biblioteca JSXGraph existe uma maneira de ler dados compactados em gzip.
Aqui é onde eu encontrei a biblioteca: http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/ Existe até um utilitário independente que pode fazer isso, JSXCompressor , e o código é licenciado pela LGPL.
Basta incluir o arquivo jsxcompressor.js no seu projeto e, em seguida, você poderá ler os dados compactados em gzip codificados na base 64:
Entendo que não era o que você queria, mas ainda respondo aqui porque suspeito que isso ajude algumas pessoas.
fonte
<?php..
bit? .. Estou perguntando porque é passado para odecompress
método.14:16:28.512 TypeError: e.replace is not a function[Weitere Informationen] jsxcompressor.min.js:19:12201
Acabamos de lançar o pako https://github.com/nodeca/pako , port of zlib para javascript. Eu acho que agora é a implementação js mais rápida de deflate / inflate / gzip / ungzip. Além disso, possui licença democrática do MIT. Pako suporta todas as opções zlib e seus resultados são binários iguais.
Exemplo:
fonte
var inflate = require('pako/lib/inflate').inflate; var text = inflate(zipped, {to: 'string'});
@Redsandro aqui está como eu uso pako.incorrect header check
Portamos uma implementação do LZMA de um módulo GWT para JavaScript autônomo. Chama -se LZMA-JS .
fonte
Aqui estão alguns outros algoritmos de compactação implementados em Javascript:
fonte
Não testei, mas há uma implementação em javascript do ZIP, chamada JSZip:
http://jszip.stuartk.co.uk/
https://stuk.github.io/jszip/
fonte
Eu acho que uma implementação genérica de compactação JavaScript do lado do cliente seria uma operação muito cara em termos de tempo de processamento, em oposição ao tempo de transferência de mais alguns pacotes HTTP com carga útil não compactada.
Você fez algum teste que lhe desse uma idéia de quanto tempo resta para economizar? Quero dizer, a economia de largura de banda não pode ser o que você procura, ou pode?
fonte
A maioria dos navegadores pode descomprimir o gzip em tempo real. Essa pode ser uma opção melhor do que uma implementação de javascript.
fonte
Você pode usar um applet Java de 1 pixel por 1 pixel incorporado na página e usá-lo para compactação.
Não é JavaScript e os clientes precisarão de um tempo de execução Java, mas farão o que você precisa.
fonte