ウェブサーバーでBrotli圧縮を有効化した
はじめに
ちょっと前に次のエントリを読んだ。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で事足りるという説もある 😇
ほぼ自己満足ではあるが、採用できて良かった。爆速になったかは定かではない。。。