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 Zeichensatz der Quelldatei zu bestimmen:
Auto - Daten werden als Binaer importiert mit automatischer UTF-8 Erkennung (Problematisch: ein UTF-8 Zeichen können auch mehrere 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)
LZ77-Dynamic Chain - Ebenfalls genau so wie "LZ77-Dynamic", wo zusätzlich gleiche Steuertokens (3 bis max. 23) zu einer Kette zusammen gefasst werden können. (Funktioniert nur bis Packstufe 6 - Je mehr Steuertokens es gibt, des so kürzer ist die Kette)
Packstufen:
Label
Stufe
Tokens
Max Buffer
Low
1
3
100
Medium
2
7
9.316
High
3
13
894.052
Max
4
21
85.828.708
-/-
9
91
699.823.827.
359.474.800
Dynamischer Modus mit Min. Buffer 5
Im Statischen Modus gibt es nur zwei verschiedene Packstufen: bis 100 (Einstellig - Nicht im Format: "Plain-Simple" 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 oder Dynamischen-Chain Modus kommt noch ein weiterer Steuertoken für die Sequenz/Kette dazu, wo die Angaben für Sequenzlänge und Zeichenlänge oder der Kettenlänge nur Einstellig sind.
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 nicht im Format: "Plain-Simple" ä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.
Plain/HTML/JavaScript-Code:
Mit dieser Option wird für die gepackten HTML/JavaScript-Daten ein Entpackcode in JavaScript Generiert, der zwischen 130 Bytes und 404 Bytes groß sein kann. (Abhängig von Packart, Buffergröße und Browserkompatibilität) Folgende Unteroptionen stehen zur Verfügung:
Plain, HTML und JavaScript - Die zupackenden Daten als Daten (RAW-Data), 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 optimiert 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.
Test-Rechner: Lenovo ThinkPad SL510 unter Windows 10 (Prozessor: Intel Mobile Core 2 Duo T6670 2.2GHz) Test-Datei: jquery-3.2.1.min.js 86.659 Bytes (CRC32: 1413FF29) LZ77 Dynamic Compressor Version: 1.5 (03.09.2017)
Browser
Version
Static 100
Static 9220
Dynamic 100
Dynamic 9316
Dynamic 894052
Edge (1)
38.14393.0.0
1.6 s
0.4 s
58 s
1.0 s
1.6 s
0.4 s
98 s
0.9 s
202 s
1.1 s
Internet Explorer (1)
11.1593.14393.0
1.4 s
0.4 s
48 s
1.0 s
2.5 s
0.4 s
87 s
1.1 s
316 s
1.2 s
Iron
60.0.3150.0
0.7 s
0.3 s
24 s
0.4 s
0.8 s
0.2 s
22 s
0.4 s
79 s
0.4 s
Firefox (1)
55.0.3
1.2 s
0.1 s
30 s
0.1 s
1.1 s
0.1 s
32 s
0.1 s
112 s
0.1 s
Google Chrome
60.0.3112.113
0.9 s
0.3 s
22 s
0.4 s
0.9 s
0.3 s
23 s
0.4 s
79 s
0.4 s
K-Meleon (1)
75.1
1.5 s
0.2 s
33 s
0.2 s
1.1 s
0.2 s
33 s
0.2 s
116 s
0.2 s
Opera
47.2631.55
0.9 s
0.3 s
24 s
0.4 s
0.9 s
0.3 s
22 s
0.4 s
77 s
0.4 s
QupZilla
2.1.2
0.7 s
0.2 s
21 s
0.4 s
0.8 s
0.2 s
21 s
0.4 s
71 s
0.4 s
Gepackte Größe von jquery-3.2.1.min.js
70.985 B
50.834 B
70.505 B
48.061 B
45.710 B
Unterstützt keine Fortschrittsanzeige in der Titelleiste
Anmerkungen: (Stand: September 2017) Beim Packen ist QupZilla fast immer der schnellste. (Dicht gefolgt von Chromium / Google Chrome / Iron) Doch beim entpacken ist Firefox deutlich und mit großen abstand der schnellste. (Ganz besonders bei großen Dateien) 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