はじめに

ちょっと前に次のエントリを読んだ。Zstandardは知っていたが、Brotliという圧縮アルゴリズムはその時知らなかった。BrotliもZstandardもどちらももう10年近く前に発明された圧縮アルゴリズムになる。

静的ページなので事前圧縮を採用!

せっかくなので、このobfuscatism.netをホストしているウェブサーバーもBrotli対応しようと考えた。 調査した結果、静的ページしかないので次の前者を選んだ

  • あらかじめファイルを圧縮(pre-compression)しておき、アクセスがあったとき圧縮済みのファイルを転送させる。静的ページに有効
  • Apacheでのmod_gzipのように、動的にアクセスされたファイルを圧縮して転送する。mod_brotli(Apache)や、brotli on;nginx)オプションなどがある

後者は動的コンテンツなどに有効であるが、オンザフライで圧縮がかかる(圧縮済みのデータはキャッシュされないはず)ため静的コンテンツのみの場合にCPUリソースを余計に消費してしまう。

Claude AI曰く、最低1KB以上のファイルが圧縮に適しているらしい。小さすぎるとオーバーヘッドが大きいというのもなんとなくわかる。

Apache 2.4に適用

静的コンテンツの場合、mod_rewrite などでリクエストを書き換えたりしたのであるが(gzipで伝統的なやり方の様子)、mod_filterで AddOutputFilterByType DEFLATE といったファイルを他より先に圧縮していて中々Brotli圧縮済みのファイルが転送されずに困るといいうこともあった。 最終的には無事Brotliも有効化できた。

まとめ

Chromeの開発ツールなどを見て、Brotli圧縮済みのファイルが転送されていたり、転送速度も確認できて満足だった。 しかし、obfuscatism.net自体すごく軽いウェブサイト、ブログなのでgzipで事足りるという説もある 😇

ほぼ自己満足ではあるが、採用できて良かった。爆速になったかは定かではない。。。