Ich schreibe eine Webanwendung, die JSON-Daten über AJAX in einem kleinen serverseitigen Cache mit fester Größe speichern muss (siehe: Offensoziale Kontingente ). Ich habe keine Kontrolle über den Server.
Ich muss die Größe der gespeicherten Daten reduzieren, um innerhalb eines serverseitigen Kontingents zu bleiben, und hatte gehofft, den stringierten JSON im Browser zu komprimieren, bevor ich ihn an den Server sende.
Allerdings kann ich bei JavaScript-Implementierungen von Gzip nicht viel finden. Irgendwelche Vorschläge, wie ich die Daten auf der Clientseite komprimieren kann, bevor ich sie sende?
javascript
ajax
compression
gzip
David Citron
quelle
quelle
Antworten:
Bearbeiten Es scheint eine bessere LZW-Lösung zu geben, die Unicode-Zeichenfolgen unter http://pieroxy.net/blog/pages/lz-string/index.html korrekt verarbeitet (Dank an Pieroxy in den Kommentaren).
Ich kenne keine gzip-Implementierungen, aber die jsolait-Bibliothek (die Site scheint verschwunden zu sein) verfügt über Funktionen für die LZW-Komprimierung / -Dekomprimierung. Der Code wird von der LGPL abgedeckt .
quelle
Ich hatte ein anderes Problem, ich wollte keine Daten in gzip codieren, sondern gzipped Daten decodieren . Ich führe Javascript-Code außerhalb des Browsers aus, daher muss ich ihn mit reinem Javascript dekodieren .
Es hat einige Zeit gedauert, aber ich habe das im JSXGraph gefunden Bibliothek eine Möglichkeit gibt, komprimierte Daten zu lesen.
Hier habe ich die Bibliothek gefunden: http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/ Es gibt sogar ein eigenständiges Dienstprogramm, das das kann, JSXCompressor und der Code ist LGPL-lizenziert.
Fügen Sie einfach die Datei jsxcompressor.js in Ihr Projekt ein, und Sie können dann eine Basis 64-codierte komprimierte Daten lesen:
Ich verstehe, dass es nicht das ist, was Sie wollten, aber ich antworte hier immer noch, weil ich vermute, dass es einigen Menschen helfen wird.
quelle
<?php..
Bit? .. Ich frage, weil es an diedecompress
Methode übergeben wird.14:16:28.512 TypeError: e.replace is not a function[Weitere Informationen] jsxcompressor.min.js:19:12201
Wir haben gerade pako https://github.com/nodeca/pako veröffentlicht , Port von zlib nach Javascript. Ich denke, das ist jetzt die schnellste js-Implementierung von deflate / inflate / gzip / ungzip. Außerdem hat es eine demokratische MIT-Lizenz. Pako unterstützt alle zlib-Optionen und die Ergebnisse sind binär gleich.
Beispiel:
quelle
var inflate = require('pako/lib/inflate').inflate; var text = inflate(zipped, {to: 'string'});
@ Redsandro hier ist, wie ich pako benutze.incorrect header check
Ich habe eine Implementierung von LZMA von einem GWT-Modul in eigenständiges JavaScript portiert. Es heißt LZMA-JS .
quelle
Hier sind einige andere in Javascript implementierte Komprimierungsalgorithmen:
quelle
Ich habe nicht getestet, aber es gibt eine Javascript-Implementierung von ZIP namens JSZip:
http://jszip.stuartk.co.uk/
https://stuk.github.io/jszip/
quelle
Ich denke, eine generische clientseitige JavaScript-Komprimierungsimplementierung wäre eine sehr teure Operation in Bezug auf die Verarbeitungszeit im Gegensatz zur Übertragungszeit einiger weiterer HTTP-Pakete mit unkomprimierter Nutzlast.
Haben Sie Tests durchgeführt, die Ihnen eine Vorstellung davon geben, wie viel Zeit Sie sparen müssen? Ich meine, Bandbreiteneinsparungen können nicht das sein, wonach Sie suchen, oder?
quelle
Die meisten Browser können gzip im laufenden Betrieb dekomprimieren. Dies ist möglicherweise eine bessere Option als eine Javascript-Implementierung.
quelle
Sie können ein in die Seite eingebettetes Java-Applet mit 1 Pixel pro 1 Pixel verwenden und dieses zur Komprimierung verwenden.
Es ist kein JavaScript und die Clients benötigen eine Java-Laufzeit, aber es wird das tun, was Sie brauchen.
quelle