J'écris une application Web qui a besoin de stocker des données JSON dans un petit cache côté serveur de taille fixe via AJAX (pensez: quotas sociaux ouvrés ). Je n'ai aucun contrôle sur le serveur.
Je dois réduire la taille des données stockées pour rester dans un quota côté serveur, et j'espérais pouvoir compresser le JSON stratifié dans le navigateur avant de l'envoyer au serveur.
Cependant, je ne trouve pas grand-chose dans la manière des implémentations JavaScript de Gzip. Avez-vous des suggestions sur la façon de compresser les données côté client avant de les envoyer?
javascript
ajax
compression
gzip
David Citron
la source
la source
Réponses:
Modifier Il semble y avoir une meilleure solution LZW qui gère correctement les chaînes Unicode sur http://pieroxy.net/blog/pages/lz-string/index.html (Merci à pieroxy dans les commentaires).
Je ne connais aucune implémentation de gzip, mais la bibliothèque jsolait (le site semble avoir disparu) a des fonctions pour la compression / décompression LZW. Le code est couvert par la LGPL .
la source
J'ai eu un autre problème, je ne voulais pas encoder des données en gzip mais décoder des données gzippées . J'utilise du code javascript en dehors du navigateur, je dois donc le décoder en utilisant du javascript pur .
Cela m'a pris du temps mais j'ai trouvé que dans le JSXGraph bibliothèque il y avait un moyen de lire des données compressées.
Voici où j'ai trouvé la bibliothèque: http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/ Il existe même un utilitaire autonome qui peut le faire, JSXCompressor et le code est sous licence LGPL.
Incluez simplement le fichier jsxcompressor.js dans votre projet et vous pourrez alors lire des données gzippées encodées en base 64:
Je comprends que ce n'est pas ce que vous vouliez mais je réponds toujours ici parce que je soupçonne que cela aidera certaines personnes.
la source
<?php..
bit? .. Je demande parce qu'il est passé à ladecompress
méthode.14:16:28.512 TypeError: e.replace is not a function[Weitere Informationen] jsxcompressor.min.js:19:12201
Nous venons de publier pako https://github.com/nodeca/pako , port de zlib vers javascript. Je pense que c'est maintenant l'implémentation js la plus rapide de deflate / inflate / gzip / ungzip. En outre, il dispose d'une licence MIT démocratique. Pako prend en charge toutes les options zlib et ses résultats sont binaires égaux.
Exemple:
la source
var inflate = require('pako/lib/inflate').inflate; var text = inflate(zipped, {to: 'string'});
@Redsandro voici comment j'utilise pako.incorrect header check
J'ai porté une implémentation de LZMA à partir d'un module GWT en JavaScript autonome. Cela s'appelle LZMA-JS .
la source
Voici quelques autres algorithmes de compression implémentés en Javascript:
la source
Je n'ai pas testé, mais il existe une implémentation javascript de ZIP, appelée JSZip:
http://jszip.stuartk.co.uk/
https://stuk.github.io/jszip/
la source
Je suppose qu'une implémentation générique de compression JavaScript côté client serait une opération très coûteuse en termes de temps de traitement, par opposition au temps de transfert de quelques paquets HTTP supplémentaires avec une charge utile non compressée.
Avez-vous fait des tests qui vous donneraient une idée du temps qu'il vous reste à gagner? Je veux dire, les économies de bande passante ne peuvent pas être ce que vous recherchez, n'est-ce pas?
la source
La plupart des navigateurs peuvent décompresser gzip à la volée. Cela pourrait être une meilleure option qu'une implémentation javascript.
la source
Vous pouvez utiliser une applet Java 1 pixel par 1 pixel intégrée à la page et l'utiliser pour la compression.
Ce n'est pas du JavaScript et les clients auront besoin d'un runtime Java mais il fera ce dont vous avez besoin.
la source