shiichan

92.1 KB が 2.6 KB に!Cloudflare の共有辞書パススルーが open beta だよ!

やっほー、しぃちゃんだよ!今日は「え、そんなに小さくなるの!?」ってびっくりする圧縮の話だよ。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog から、共有辞書(RFC 9842)の「パススルー(passthrough)」モードが全プランで open beta になったよ!

共有辞書っていうのは、ブラウザがすでにキャッシュしている「前のバージョンのファイル」を辞書にして、オリジンが新しいレスポンスを圧縮する仕組みなの。つまり、バージョン間の差分だけがネットワークを流れるってこと。

今までどうだったの?

これまでの圧縮は Gzip や Brotli みたいに「そのファイル単体」を縮める方式が中心だったの。でも共有辞書を使うと、前バージョンとの差分だけを送れるから、ちょっとした更新なら送るデータが劇的に減るんだよ。

そのやり取りを Cloudflare がちゃんと素通し(パススルー)してくれるのが、今回のアップデートなの。

これで何が変わるの?

数字がすごいの。Cloudflare の社内テストでは、272 KB の JavaScript バンドルが、

the asset shrinks from 92.1 KB with Gzip to 2.6 KB with delta Zstandard against the previous version — a 97% reduction over standard compression

つまり Gzip で 92.1 KB だったものが、前バージョンとの差分 Zstandard だとたった 2.6 KB に。標準の圧縮より 97 % も小さくなったんだって!ダウンロード時間も Gzip 比で 81〜89 % 改善したそうだよ。

深く潜ってみよう

パススルーモードで Cloudflare がやってくれるのは、この 3 つなの。

  • Use-As-DictionaryAvailable-Dictionary ヘッダーを、クライアントとオリジンの間で改変せずに転送する
  • dcb(Dictionary-Compressed Brotli)と dcz(Dictionary-Compressed Zstandard)を、有効な Content-Encoding として端から端まで扱い、再圧縮しない
  • キャッシュキーを Available-DictionaryAccept-Encoding で振り分けて、差分圧縮された各バリアントを正しくキャッシュする

辞書のライフサイクル(どのファイルを辞書にするか、Use-As-Dictionary を付けるか、差分を作るか)はオリジン側の担当。Cloudflare は転送とキャッシュを受け持つ、っていう役割分担だよ。

対応ブラウザは Accept-Encodingdcbdcz を出すもので、今のところ Chrome 130 以降と Edge 130 以降なの。

有効化はゾーンに対して API を 1 回叩くだけ。

curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/settings/shared_dictionary_mode" \
  --request PATCH \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --json '{
    "value": "passthrough"
  }'

Cloudflare ダッシュボードの Speed > Settings > Content Optimization からもオンにできるよ。動きを見たいときは canicompress.com のデモも用意されてるの。

まとめ

  • Cloudflare の共有辞書パススルーが全プランで open beta になったよ
  • 前バージョンとの差分だけを送るから、社内テストでは 92.1 KB → 2.6 KB(97 % 削減)
  • Cloudflare はヘッダー転送・dcb/dcz の素通し・キャッシュ振り分けを担当、辞書管理はオリジン側
  • 対応は今のところ Chrome 130 以降と Edge 130 以降、有効化は API 1 回でオン

頻繁に更新される JS バンドルや大きめの静的アセットを配信してる人には、送信量とダウンロード時間の両方で効いてくる話だよ。試すハードルも低いから、気になったらオンにしてみてね!