Stranger Than Usual

Br-Br-Br-Brotli!

Ich habe ja schon einmal erwähnt, dass ich einen gewissen Kompressionsfetisch habe. Nein, nicht wie in diesem xkcd-Comic. Mehr so wie in diesem xkcd-Comic: There is no actual porn in there, I'm just turned on by data compression.

Als ich 2020 dieses Blog überarbeitet und auf statische Seiten umgestellt habe, habe ich auch gut optimierte, statische Kompression eingebaut: Zopfli als gzip-kompatible, langsame aber effektive Kompression und Brotli als die neuere Variante, die insbesondere HTML besser komprimiert und auch deutlich schneller als Zopfli ist (von der Geschwindigkeit eher mit herkömmlicher gzip-Kompression vergleichbar).

Nun habe ich damals angemerkt, dass Brotli noch nicht mit nginx funktioniert. Grund dafür war, dass ich das nginx-Brotli-Modul manuell hätte kompilieren müssen, mit Zugriff auf den nginx-Quellcode in der richtigen Version, das heißt ich hätte jedes Mal, wenn nginx oder das Brotli-mod ein Update bekommen hätten, den ganzen Murks noch einmal machen müssen. Das ist nicht low-maintenance, und so hätte ich wichtige Sicherheitsupdates vielleicht aufgeschoben. Nein danke.

Vor Kurzem bin ich aber auf Debian 12 Bookworm (Debian-Distributionen sind nach Toy Story-Charakteren benannt) umgestiegen. Und da gibt es jetzt endlich ein Paket namens libnginx-mod-http-brotli-static. Von da an war alles ganz einfach: Paket installiert, brotli_static: on; in die nginx-Konfiguration gehängt, nginx neu geladen. Fertig.

Was macht das mit den Dateigrößen? Schauen wir uns doch zum Beispiel mal die HTML-Datei der Homepage dieses Blogs an, und zwar die bevor dieser Post hier veröffentlicht wurde:

  • home.html: 44900 byte
  • home.html.gz: 16550 byte
  • home.html.br: 15322 byte

Durch die Kompression allgemein kann die Größe also auf knapp 37% reduziert werden. Brotli verbessert die Kompression im Vergleich zu Zopfli noch einmal um mehr als ein kiB oder etwa 8%, und es läuft dabei deutlich schneller.

Alle modernen Browser unterstützen das. Ich überlege echt, ob ich nicht die Zopfli-Kompression komplett herausnehmen soll, das würde die Buildzeiten für mein Blog drastisch verkürzen, denn Zopfli ist momentan mit Abstand der zeitaufwändigste Teil. Als Fallback gäbe es ja immer noch die unkomprimierte Version. Aber erst einmal lasse ich es wie gehabt laufen, nur dass jetzt Brotli auch tatsächlich benutzt wird.