JavaScript: Décompresser / gonfler /unzip /ungzip chaînes
Je suis à la recherche pour le JavaScript de la mise en œuvre de la chaîne de gonflage des algorithmes.
Je veux compresser sur le côté serveur (Java), et le décompresser sur le côté client (JavaScript).
Que j'ai trouvé:
décompressez chaînes de caractères en javascript
Que l'on est marqué comme réponse à une réponse pour le problème est différent. D'autres réponses sont aussi pour quelque chose d'autre (de décompression de fichiers au format ZIP).
JavaScript gonfler mise en œuvre (éventuellement FF 3.6 seulement)
C'est plus proche de ce dont j'ai besoin. Cependant j'aimerais avoir quelques solutions de rechange.
Suggestions?
Merci, Daniel
Mise à jour:
J'ai pas mal de cas d'utilisation spécifiques, s'il vous plaît ne pas répondre "Ne pas faire que dans le JavaScript".
Je suis en train d'écrire une ligne, outil de reporting (une fois généré, il est mis à la statique du magasin) et le dégonflage peut enregistrer méga-octets pour un seul rapport. Je suis contraint par d'autres applications donc je ne peux pas le stocker en tant que fichier zip.
- Le principal problème va être que JavaScript n'a pas d'installations pour la manipulation de données brutes. Tous les chiffres à virgule flottante, et toutes les valeurs de chaîne sont conservés en tant que UTF-16 (caractères de 2 octets). Il n'y a pas de "tableau d'octets" type de données, de sorte que rend la mise en œuvre de compression/décompression beaucoup plus difficile et beaucoup moins efficace.
- Pas vrai, il ya un soutien pour les données binaires au cours des dernières implémentations JavaScript, basé sur Tableau Typé Spécification.
- oui, c'est vrai - qui ne manquera pas d'être utile 🙂
- Le navigateur utilise déjà un C / C++ mise en œuvre de ce dont vous avez besoin, de trouver un moyen d'y accéder par le biais de .js. J'ai écrit un natif .js version de JSON pour le plaisir, et il était environ 100 fois plus lent que le navigateur du C / C++ mise en œuvre.
- Connexes: Voici de Dean Edwards' packer: dean.edwards.nom/packer
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à ce Débordement de Pile question, les réponses il contient des références à plusieurs compression des moteurs de implémenté en javascript. La plupart de ces derniers sont basés sur LZ77.
Je ne sais pas comment tu voudrais qu', mais j'aime ces implémentations:
La première est plus rapide que la seconde, Nous pouvons assurer un serveur rapide, cependant nous ne savons pas les performances de la machine client. Donc je vous recommande de choisir js-dégonfler et d'ajuster votre java (côté serveur) pour gonfler.
https://github.com/dankogai/js-deflate
http://code.google.com/p/gzipjs/
J'ai créé un exemple de travail à l'aide de
pako
, moderne et rapideZlib
port.http://jsfiddle.net/9yH7M/2/
il y a cette bibliothèque graphique qui a une partie, un zlib implémentation en javascript. si vous faites défiler vers le bas de cette page un peu, vous allez voir comme un téléchargement séparé.
http://jsxgraph.uni-bayreuth.de/wp/download/
Cet exemple: http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip
montre comment vous pouvez faire des fichiers ZIP en Javascript. Maintenant, je sais que vous voulez ZLIB ou de compression DEFLATE, plutôt que de ZIP. Mais, ZIP utilise DÉGONFLER, et au sein de la .fichier js, pour cet exemple, il y a un InflatingReader classe qui peut GONFLER comme il lit.
La classe expose ces méthodes:
Vous pouvez utiliser ce code inchangé si vous voulez GONFLER.
Si vous voulez ZLIB (aka unzip), alors il existe un 2-octets de signature que vous avez besoin pour lire et valider avant de lire les octets compressés et les faire GONFLER. Juste modifier le InflatingReader de lire et de vidage de 2 octets, et cela ne sera ZLIB l'amende juste.
J'ai trouvé un travail gonfler mise en œuvre ici:
http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt
Si vous voulez un peu plus propre version des espaces de noms de l'algorithme, celui-ci devrait fonctionner:
https://github.com/augustl/js-inflate
Gardez à l'esprit que gzippé "gonfler" les données sont précédés de deux octets d'en-tête, et suffixé par un à quatre octets somme de contrôle, dont vous aurez besoin à la bande avant de passer à l'algorithme.
Ne pas le faire en JavaScript. Il serait lent et en plus que JS ne fait pas de bien avec les données binaires.
Simplement utiliser gzip codage de transfert sur le côté serveur et votre navigateur vous prendre soin de le décompresser.