Inhalt

 


Menü Ausschalten

MEngelke.de / JavaScript / LZ77 Dynamic Compressor

Text-Converter

Suchen Drucken eMail 

Bitte JavaScript aktivieren!

Ohne Design Speichern


Beschreibung:

Mit diesem Tool können Sie Texte und JavaScripte mit dem 40 Jahre alten LZ77-Algorithmus packen und wieder entpacken. Die Effizienz liegt bei etwa 40 bis 60 Prozent.
Importieren kann man die zu packenden Daten entweder per Copy'n'Paste oder per Drag'n'Drop Vor dem Import hat man die Möglichkeit den Zeichsatz bestimmen:

  • Auto - Daten werden als Binaer importiert mit automatischer UTF-8 Erkennung
  • Data - Daten werden als Binaer importiert
  • Ansi - Text wird als ISO-8859-1 importiert
  • UTF-8 - Text wird als UTF-8-Text importiert

Die (ge-/ent-)packte Daten lassen ebenfalls per Copy'n'Paste oder per Download exportieren. Mit Hilfe der CRC32 Checksumme läßt sich überprüfen, ob der in/export korrekt war.

 

Folgende Pack-Methoden stehen zur Verfügung:

  • None / Minify - Nicht packen - Optional kann man den JavaScript-Code mit UglifyJS2 kürzen/optimieren lassen
  • LZ77-Static - Die Daten werden mit LZ77 gepackt und die gepackten Daten werden statisch gespeichert. (Feste Größe für die Positionsangaben der Redundanz) Für die 96-Tokens wird ein Zahlensystem gebildet, dass unseren Dezimalsystem ähnelt. (Nur mit 96 Zeichen, statt mit 10 Zahlen)
  • LZ77-Dynamic - Die Daten werden wie "LZ77-Static" mit LZ77 gepackt, aber die gepackten Daten werden dynamisch gespeichert. (Variable Größe für die Positionsangaben der Redundanz) Dabei wird für die 96-Tokens ein Zahlensystem ohne Redundanz verwendet (Beispiel für das Dezimalsystem: 0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12 ...) Zusätzlich werden für den Abstand und die Längenangaben der Redundanz unterschiedliche Kontroll-Token eingesetzt mit denen die Bandbreite der Angaben definiert wird.
  • LZ77-Dynamic Seq - Genau so, wie "LZ77-Dynamic" nur zusätzlich mit Erkennung von Sequenzen (Bringt nur dann bessere Ergebnisse, wenn es viele Unterschiedliche Sequenzen gibt)

LZ77-Buffergrößen:

  • Min. Buffer - Die kleinstmögliche Redundanz. Änderungen können das Packergebnis verbessern oder verschlechtern. (Der sinnvollste Wert ist: 5 und nur im JavaScript-Modus verfügbar)
  • Max. Buffer - Die größtmögliche Redundanz und/oder der größtmögliche Abstand zur Redundanz. (Faustformel: Je höher der Wert, desso langer dauert das Packen und liefert ein besseres Ergebnis, aber die Effizienz sinkt langsam, aber stetig)
  • Low, Medium, High, Max stellen den Max. Buffer auf einen sinnvollen Wert.
 
StufeTokensMax Buffer
13100
279.316
313894.052
42185.828.708

Packstufen im Dynamischen Modus

Im Statischen Modus gibt es zwei verschiedene Packstufen: bis 100 (Einstellig - Nur im JavaScript-Modus verfügbar) und bis 9124 bzw. 9220 (Zweistellig für Abstand, Einstellig für Länge) die nur ein Steuertoken benötigen
Im Dynamischen Modus gibt es Theoretisch kein Limit, aber zum einen wird die Anzahl der Steuertoken von den insgesamt 96-Tokens zu hoch (d.H. die müssten alle entwertet werden) und zum anderen bricht irgendwann der Browser beim packen zusammen. Daher sollte man nicht über Stufe 4 hinausgehen.
Im Dynamischen-Sequenz Modus kommt noch ein Steuertoken für die Sequenz dazu, wo die Angaben für Sequenzlänge und Zeichenlänge nur Einstellig sind.

JavaScript-Code:

Mit dieser Option wird für die gepackten JavaScript-Daten ein Entpackcode Generiert, der zwischen 130 Bytes und 434 Bytes groß sein kann. (Abhängig von Packart, Buffergröße und Browserkompatibilität)
Folgende Unteroptionen stehen zur Verfügung:

  • Small und Universal - Hiermit bestimmen Sie, ob der Decrunch-Header möglichst kurz oder Kompatible zu älteren Browsern sein soll
  • Eval und Write - Damit bestimmen Sie, wie der entpackte Code gestartet werden soll.
  • Minify und Optimize - Bevor der JavaScript-Code gepackt wird, kann er mit UglifyJS2 gekürzt oder optimieren werden
  • Escape UTF-8 - Sollte der JavaScript-Code UTF-8-Zeichen enthalten, die Probleme beim entpacken machen, kann diese hiermit Maskieren/Entwerten
  • Control Chars - Mit dieser Option können Schwierige Zeichen (' " \) mit Steuerzeichen ersetzt werden. Je nach häufigkeit, kann der gepackte Code nochmal verkürzt werden.
 

Werden die Daten ohne JavaScript-Header gepackt, dann werden zuerst alle Token ausgegeben, nochmal das erste Token und dann die gepackten Daten.
unlz77.js.gz - Beispiel Quelltext zum entpacken von LZ77 (Static / Dynamic) ohne JavaScript-Header

Browser Benchmark:

Test-Rechner: Lenovo ThinkPad SL510 unter Windows 10 (Prozessor: Intel Mobile Core 2 Duo T6670 2.2GHz)
Test-Datei: jquery-3.1.1.min.js 86.709 Bytes (CRC32: EFE4997E)
LZ77 Dynamic Compressor Version: 1.1 (11.11.2016)

 
BrowserVersionStatic 100Static 9220Dynamic 100Dynamic 9316Dynamic 894052
Edge (1)38.14393.0.02.5 sec84 sec3.6 sec139 sec674 sec
Internet Explorer (1)11.321.14393.01.6 sec56 sec4.0 sec152 sec529 sec
Iron54.0.2850.01.1 sec39 sec1.2 sec38 sec130 sec
Firefox (1)49.0.21.3 sec40 sec1.1 sec46 sec158 sec
Google Chrome54.0.2840.991.2 sec34 sec1.1 sec35 sec118 sec
K-Meleon (1)75.11.6 sec52 sec1.5 sec52 sec183 sec
Opera41.2353.561.2 sec36 sec1.1 sec36 sec127 sec
QupZilla (2)2.0.21.0 sec27 sec1.0 sec28 sec95 sec
Gepackte Größe von jquery-3.1.1.min.js73.49650.80770.52948.05945.704
 
  1. Unterstützt keine Fortschrittsanzeige in der Titelleiste
  2. Unterstützt kein Drag'n'Drop

Danksagungen:

  • packer - Vermutlich einer der ersten JavaScript-Kompressoren
  • lz77js - Ein weiterer LZ77-Packer (Mit eigenen Decrunch-Header)
  • lz77 - Noch ein LZ77-Packer mit Quelltext (Hat ein Bug: Window length geht nicht fehlerfrei über 6148 hinaus)
  • lz77-kit - Verschiedene Quelltexte zum LZ77-Packer in einigen Programmiersprachen
  • lz77-datenkompression - Ein Video über LZ77-Kompression in Deutsch

Programm History:

v1.0 (05.11.2016)

  • Erste öffentliche Version
 

v1.1 (11.11.2016)

  • Auto-Charset Erkennung bei Drag'n'Drop
  • Drag'n'Drop/Upload erlaubt unbekannte Dateitypen
  • Fortschrittsanzeige verbessert
  • Zeitanzeige wird beim Testen angegeben
 

v1.2 (20.11.2016)

  • Download nun mit ANSI-Kodierung möglich

 << Humor | Home | Kategorie >><< Kennwortschutz | Java Script | Text-Converter >>