cyano: JavaScriptやCSSを動的にdeflate圧縮するのではなく、あらかじめ圧縮しておいたものを配信することでサーバーのCPUリソースを節約する

事前にjsとかcssを圧縮しておき、リアルタイム圧縮をやめちゃおうという作戦らしいです。

mod_rewriteを使うことで、非対応ブラウザにも対応しています。

説明。まずSetEnvIf Accept-Encoding "gzip"でHTTPリクエストヘッダの中にAccept-Encoding: gzipがあれば、圧縮できる(can_compress_assets)という環境変数を立てます。その後、BrowserMatchでごにょごにょやってるのは、一部ブラウザでgzipの扱いに問題があるため、問題があるブラウザはgzipしてないコンテンツをサーブする(!can_compress_assets)ようにします。

次のRewriteCond、RewriteRuleは環境変数can_compress_assetsがセットされていなかった場合(非圧縮コンテンツを返すべき場合)、例えばprototype.jsがリクエストされたら、非圧縮のprototype.js.ungzを代わりに返すというものです。

最後のHeader set Content-Encoding: gzip env=can_compress_assetsは、圧縮されたコンテンツを返している場合、HTTPレスポンスヘッダにContent-Encoding: gzipを追加するというものです。こうしないとブラウザは返されたコンテンツがgzipされていることを知らないため、解凍してくれません。

deflateを使わないことで、効率をあげられるってお話。圧縮するファイルしないファイルを明示的に分けられるのも便利。

CSSファイルやJavaScriptファイルはサイト内で数十になることも多く、それが数千万回リクエストされるとなると、それらのdeflate処理にかかっていたコストは馬鹿に出来なくなります。こうして予めgzip圧縮しておくことで、それらのコストを削減し、少しでも地球に優しくしようという試みでした。