人気ブログランキング | 話題のタグを見る
『こぶたのラッパ』はサイトを移動しました!
今後はこちらをどうぞ
2006年 09月 30日
世界の片隅で.jgzと言ってみる
AjaxプログラミングにおいてPrototype.jsは非常に重要なライブラリですが、ファイルのサイズが大きいことを理由に良くない!といわれることがしばしばです。

バージョン1.4.0時点で47kbですので、確かに1JavaScriptファイルとしては大きいですし、なんと言ってもテキストのファイルが50kb近くあるというのが生理的に受け付けないのかもしれません(1kgの鉄と1kgの綿はどっちが重い?)。

そんなあなたに(自分もだけど)おすすめなのが、JavaScriptをgzip圧縮する方法。
Windowsの場合、Cygwinを使うかGNU zipなんてのを使えば圧縮できます。

ファイルサイズ | ファイル名
47,445 bytes | prototype.js(デフォルト)
32,717 bytes | prototype_compress.js(Rhinoを使って圧縮)
10,537 bytes | prototype.jgz(gzip圧縮)
9,464 bytes | prototype_compress.jgz(Rhino + gzip圧縮)

このとおり、Rhino と組み合わせることで10kbも切ることができます。
htmlからは、
<script language="javascript" src="/js/prototype_compress.jgz"></script>
で普通に呼び出せます。

ただし、これだけだとブラウザが正しくファイルを解釈してくれないので、次のような.htaccessファイルを作っておきます。
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ".*Safari.*" [OR]
RewriteCond %{HTTP:Accept-Encoding} !gzip
RewriteRule (.*)\.jgz$ $1\.js [L]

AddType "text/javascript;charset=UTF-8" .jgz
AddEncoding gzip .jgz

自分では試していないですが、Safariはgzip圧縮されたJavaScriptを受け付けてくれないそうなので、.jgzのリクエストがきた場合に.jsを返すように設定します(なのでprototype_compress.jsも隣りに置いておく必要あり)。
ついでにAccept-Encodingも見て、gzipを扱えないブラウザの場合も.jsを返します。

本当は.js.gzという拡張子をつけたかったのですが、AddTypeがこれを認識してくれないので(ピリオドが2つあるから)、仕方なしに.jgzという勝手拡張子を作りました。
IANAに提案しようとか、世界に向けて推進を図ろうなどとおこがましいことは考えていませんので、とりあえずひっそりと書いてみました。
by smilkobuta | 2006-09-30 20:37 | Webサイトシステム

<< 絵本「へびのせんせいとさるのか... タロットのページデザイン >>