自称ITアーキテクトの自堕落な日常を綴る日記です。
技術ネタを書こうと始めた日記なのに、文房具ネタの方が多いというのが目下の悩み。
いつも ClamWin の日本語化パッチでお世話になっている X-WORKSの人が圧縮転送のエントリを書いている。
<script type="text/javascript" src="prototype.js.gz"></script>
(中略)
これは素晴らしい!
(中略)
出力のバッファリングを有効にする ob_start と出力バッファを gzip 圧縮するための ob_start コールバック関数 ob_gzhandler。これを合わせて ob_start('ob_gzhandler'); と PHP スクリプトに書くだけで出力が gzip 圧縮されて出力される。万歳!
[gzip 圧縮で転送してみるより引用]
ここまで読んで、「あれ?リンクの .gz ていらなくね?」 「CSS も同じやり方すれば PHP なんて使わなくても良いような…」 と思ったので実験。
基本的には Apache とブラウザがコンテントネゴシエーションに対応している事が前提。ページの表示言語の選択に良く使われる機能だが、ブラウザに対応した圧縮ファイルの選択にも使えるわけだ。
まず prototype.js を使った普通のページ。適当に検索したページ作成。うん、普通に動作する。
ここでアクセスログから転送ファイル量を抜き出し、確認しておく。71260 byte でファイルサイズと一致する
次に prototype.js のコピーを作成し、gzip -9 で圧縮。prototype_comp.js.gz として保存。圧縮前のファイルも prototype_comp.js も作成。
先ほどの HTML の prototype.js のリンクだけ変えたテストページを作成。
アクセスログを見ると同じく 71260 byte 、この時点では圧縮前のファイルが転送されてるっぽい。
似たような事をやっているサイトから設定をコピー。
Options +MultiViews
AddEncoding x-gzip .gz .tgz
実際後で確認したが、この場合 ForceType は要らない様だ。
で、実験してみたがうまくいかない。何度やっても圧縮前のファイルがアクセスされる。
こういうときこそマニュアルを参照。
マニュアルによるとコンテントネゴシエーションを使うにはどうやら拡張子はつけてはいかんらしい。
と言う事で、スクリプトの読み込みを
<script type="text/javascript" src="prototype"></script>
に変更すると無事圧縮後の 16233byte でアクセスされる。
とりあえず動作確認終了して満足してしまったので、CSS の圧縮に対する検討また今度。
以前から知識としては持っていましたが、実際やってみるとなかなかはまりそうですね。(ファイル名の指定とか)
ちなみにマニュアルは Apache2.2 の物を参照しましたが、検証環境は Apache1.3 です。
本当はちらっとコメントだけ残すつもりがエラーになったのでエントリを書くことに。面白かったからいいけど。