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, HTML-Code und JavaScripte mit dem 40 Jahre alten LZ77-Algorithmus packen und wieder entpacken. Die Effizienz liegt bei etwa 40 bis 60 Prozent.
Für gepackten HTML-Code oder JavaScripte werden Decrunch-Header in JavaScript generiert, die den Code Automatisch entpacken und starten/anzeigen.

 

Source Import und Result Export

Importieren kann man die zu packenden Daten entweder per Copy'n'Paste oder per Drag'n'Drop. Es wird automatisch eine CRC32 Checksumme erstellt, um zu überprüfen, ob der Import korrekt war.
Das fertige Result kann man entweder herunterladen oder per Copy'n'Paste heraus kopieren.

Zeichensatz:

Vor dem Import/Download hat man die Möglichkeit den Zeichsatz der Quelldatei zu bestimmen:

  • Auto - Daten werden als Binaer importiert mit automatischer UTF-8 Erkennung (Problematisch: ein UTF-8 Zeichen können auch mehrere Ansi-Zeichen sein)
  • Data - Daten werden als Binaer importiert
  • Ansi - Daten werden als Text mit dem ISO-8859-1 Zeichensatz importiert
  • UTF-8 - Daten werden als Text mit dem UTF-8 Zeichensatz importiert

Pack-Methoden:

  • 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,00,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 und lange Unterschiedliche Sequenzen gibt)

Packstufen:

LabelStufeTokensMax Buffer
Low13100
Medium279.316
High313894.052
Max42185.828.708
-/- 991699.823.827.
359.474.800

Dynamischer Modus mit Min. Buffer 5

  • Im Statischen Modus gibt es nur zwei verschiedene Packstufen: bis 100 (Einstellig - Nur im HTML/JavaScript-Modus verfügbar) und bis 9124 bzw. 9220 (Zweistellig für Abstand, Einstellig für Länge) die nur ein Statisches Steuertoken benötigen
  • Im Dynamischen Modus gibt es theoretisch 9 Packstufen, 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 wird alles nach Stufe 3 unrealistisch.
  • Im Dynamischen-Sequenz Modus kommt noch ein weiterer Steuertoken für die Sequenz dazu, wo die Angaben für Sequenzlänge und Zeichenlänge nur Einstellig sind. (Liefert selten bessere Ergebnisse)

LZ77-Buffergrößen:

  • Min. Buffer - Die kleinstmögliche Redundanz. Änderungen können das Packergebnis verbessern oder verschlechtern. Bei einer Änderung, verkleinert/vergrößert sich auch der Max. Buffer der jeweiligen Packstufe (Der sinnvollste Wert ist: 5 und nur im HTML/JavaScript-Modus änderbar)
  • 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.

HTML/JavaScript-Code:

Mit dieser Option wird für die gepackten HTML/JavaScript-Daten ein Entpackcode in JavaScript 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:

  • HTML und JavaScript - Die zupackenden Daten als HTML-Code (Nur Ausgabe) oder JavaScript-Code (Ausführen) interpretieren
  • 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. (Im HTML-Modus ist Eval nicht möglich)
  • Minify und Optimize - Bevor der JavaScript-Code gepackt wird, kann er mit UglifyJS2 gekürzt oder optimieren werden
  • Escape UTF-8 - Sollte der HTML/JavaScript-Code UTF-8-Zeichen enthalten, die Probleme beim entpacken machen, können diese hiermit Maskiert/Entwertet werden
  • 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.

Bedienelemente:

  • Pack - Packt die Daten im Source-Feld. Das fertige Ergebnis wird in Result ausgegeben.
  • Unpack - Entpackt die Daten im Result/Source-Feld. Das fertige Ergebnis wird in Result ausgegeben bzw überschrieben. (Es können auch einige Fremd Decrunch-Header entpackt werden)
  • Test - Entpackt die gepackten Daten im Result-Feld und vergleicht diese mit dem Source-Feld. (Source und Result bleiben unverändert und diese Funktion kann man nicht zusammen mit Minify oder Optimize verwenden)
  • Download - Die Daten im Result-Feld können heruntergeladen werden. (Das Charset wird beim Download beachtet)
  • Reset - Setzt alle Bedienelemente wieder zurück.
  • Choose File - Für ältere Browser, die kein Drag'n'Drop unterstützen.
 

Werden die Daten ohne HTML/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 HTML/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
 

Anmerkungen: (Stand: Juli 2017)
Aktuell sind Chromium / Google Chrome / Iron beim packen die schnelleren. (Dicht gefolgt von QupZilla)
Doch beim entpacken ist Firefox deutlich und mit großen abstand schneller.
Edge und Internet Explorer sind unter Windows 10 immer noch die langsamsten.

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

v1.3 (17.06.2017)

  • Anzeige, welcher Charset beim importieren erkannt wurde
  • HTML-Modus hinzugefügt (Packt eine komplette HTML-Seite mit Decrunch-Header)

v1.4 (13.07.2017)

  • Viele kleine verbesserungen vorgenommen
  • Download-Charset änderbar
  • Eigene Decrunch-Header werden direkt wieder erkannt
  • Konvertierungen von Decrunch-Headern erweitert
  • Entpacken mit Fortschrittsanzeige
  • Optionales Beep nach (Ent-)Packen

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