Entpacken komprimierter Html Dokumente mit Javascript
Das Entpacken von Online Inhalten mit Javascript kann sinnvoll sein, sei es um Bandbreite zu sparen oder wertvollen localstorage optimal zu nutzen.
Manche Dokumente werden bei der Html Konvertierung durch redundate Formatinformationen erheblich aufgeblasen. Das kostet nicht nur Bandbreite sondern bei Emailversand auch Speicherplatz im Empfängerpostfach.
In dieser Situation habe ich Möglichkeiten getestet, Html direkt im Browser zu entpacken. Folgende Bibliotheken finden sich im Netz:
- LZ-string --- Javascript Kompression/ Dekompression, Stärken: einfach zu handhaben, kompatibel bis IE7, Url: http://pieroxy.net/blog/pages/lz-string/index.html
- LZMA-JS --- Javascript Kompression/ Dekompression, Stärken: sehr gute Kompression, URL: http://cdn.jwebsocket.org/lzma-js/1.3.7/demos/advanced_demo.html
In meinem Test ergaben sich folgende Werte beim Komprimieren einer 1 MB grossen Tabelle
LZMA - 15 KB
LZ-String - 80 KB
Bei dem komprimierten Ergebnis handelt es sich um Binaerformat, zur Speicherung im Html Dokument muss eine Konvertierung in ein Textformat erfolgen, z. Bsp. Hex oder Base64, dadurch ist ein Aufschlag von 50% faellig, da nur 6 von 8 Bits genutzt werden. Dazu kommt der Overhead für das Dekompresiionsskript (ca. 10 KB).
Obwohl Lzma mit Lempelziff Komprimierung bessere Ergebnisse zeigt, habe ich hier nur die Verwendung von LZ-String getestet, da LZMA keine Kompatibilität zu alten Browsern bietet.
Vorteile komprimierter HTML Dokumente:
- Platzersparnis
- Bandbreite
- geringere Belastung des Empfaengerkontos
- bessere Performance bei langsamer Verbindung
Nachteile:
- weniger kompatibel (im Vergleich zu reinem HTML)
- nicht durchsuchbar (Volltextsuche oder SEO)
- möglicherweise erhöhte Gefahr der Abweisung durch Spam Filter
- Javascript muss aktiviert sein
- Kompressionsergebnis abhaengig vom Content
- overhead durch Kompressions Algorithmus
- zusätzlicher Aufwand bei der Erstellung
Die meisten Vor- und Nachteile liegen auf der Hand. Auf zwei Punkte will ich genauer eingehen:
- Kompatibilität: Javascript muss aktiviert und in der aktivierten Sicherheitszone zugelassen sein. Das mag in vielen Fällen kein Problem sein, schränkt aber den Wunsch nach maximaler Verfügbarkeit und Reichweite ein.
- Durchsuchbarkeit: Hier muss man ein wenig um die Ecke denken. Variante 1 (Versand als Email Anhang): Jedes Dokument, das mir einmal zugesendet wurde, landet bei mir auf einem grossen Haufen irgendwo auf der Festplatte. Falls ich irgendwann über einen Namen stolpere, den ich nicht mehr zuordnen kann, durchsuche ich alle Dateien der letzten Jahre. Diese Möglichkeit entfaellt, da die Inhalte in einem unentzifferbaren Binaerformat vorliegen. Falls das ein Problem darstellt wäre ein workaround eine gezippte Version der Datei mitzusenden. Variante2: Komprimierte Webseiten können von Suchmaschinen nicht gelesen werden - Stichwort SEO. Das kann ein Problem sein (muss aber nicht, Anwendungsfall: Email Adressen verschleiern).
Demo:
Als Vorlage für eigene Versuche kann diese Seite verwendet werden
http://nikolausdulgeridis.de.tl/LZCompressTemplate.htm
Als letztes fehlt noch das Tool um einen Text in einen komprimierten Base64 String zu wandeln:
http://nikolausdulgeridis.de.tl/LZ_demo64.htm