gzip 圧縮した JavaScript ファイルに問題はないのか?

シェアする

gzip 圧縮 JavaScript

prototype.jsを10KBにする方法 : 亜細亜ノ蛾 でおなじみ! の asiamoth(オレ)ですが、ずっと気になっていることがありました。

それは、

gzip 圧縮は対応しているが、gzip 圧縮の JavaScript に対応していないブラウザはないのか?」

ということです(いまさらながら)。

prototype.jsを10KBにする方法の続き(.htaccessをスマートに使う) : 亜細亜ノ蛾 という続編記事で書きましたが、

「圧縮した JS へのリクエストに Content-type: application/x-javascript を正しく返せば OK」

というのが、一応の結論でした(いま思ったけど、Content-type: text/x-javascript だと、どうなるだろうか?)。

──でも、本当に? と思ったので、実際に検証してみました。

結論

たぶん、大丈夫。

──という結論に至った、検証方法を公開します。

検証方法

このページ下部にあるファイル(gzip_js_test_var.js など)を用意して、同じディレクトリに置く。

そして、検証のため(こっそりと)このブログから、このように呼び出す。

<script type="text/javascript" src="/path/to/gzip_js_test_var.js"></script>
<script type="text/javascript" src="/path/to/gzip_js_test.js"></script>

そうすると、JavaScript に対応しているブラウザであれば、

  • gzip 圧縮に対応し、gzip 圧縮された JavaScript にも対応
  • gzip 圧縮に対応していないか、無効にしている
  • gzip 圧縮に対応しているが、gzip 圧縮された JavaScrip が読み込めない!

──と、3 通りに分けられるはずです(すべてはアクセス解析が提供する画像ファイルが頼り)。

今回、一番知りたいのは、上記の 3 番目に該当するブラウザが存在するのか、ですね。

検証の結果

さて、設置してから一ヶ月ほど経って、ようやく上記の 3 番目に該当する UAが、一件だけ引っかかりました。それが下記の UA です。

Mozilla/5.0 (compatible; heritrix/1.12.1 +http://netarkivet.dk/website/info.html)

──なんだけど、コイツはボットらしく、ただ単に (X)HTML や JavaScript から URI を拾って叩いているだけみたいです。

上記の 1 番目と 2 番目のログにも残っていたので、これは無視ですね(変なボットには冷たいオレ)。

Safari は?

そのほかの結果も、ページ下部に貼り付けておきます。簡単なブラウザ判定の結果になっていますが、ある程度は役に立つかと思います。

中でも注目なのが、というか、以前最後まで手を焼いた Safari。アクセス数が少ないので何ともいえないですが、

「AppleWebKit/10x.x(Safari/100.x)未満の Safari は gzip 圧縮(の JavaScript?)に未対応、でも非圧縮の JavaScript を読めるからいいんじゃない?」

──という(いつものように中途半端な)結論が出ました。

ref.: userAgent一覧/ユーザーエージェント一覧

あと、妙に「gzip 無効」なブラウザが多いのが、ちょっと気になるところ……。

続報あれば、また記事を書きます。

検証用ファイル

(ここからは、検証用のファイルとデータです)

gzip_js_test_var.js (非圧縮):

var _dummy_00, _dummy_01, gzip_js_test, _dummy_02, _dummy_03;
var _dummy_00=0, _dummy_01=1, gzip_js_test="NG", _dummy_02=2, _dummy_03=3;

gzip_js_test_var.js.gz (gzip圧縮):

var _dummy_00, _dummy_01, gzip_js_test, _dummy_02, _dummy_03;
var _dummy_00=0, _dummy_01=1, gzip_js_test="OK", _dummy_02=2, _dummy_03=3;

上記の二つは、ただ単に gzip_js_test の値を代入しているだけです。gzip の JavaScript ファイルに未対応のブラウザが、うっかりと(文字化けしたまま)読み込んだりしないように、ダミーを混ぜてあります(たぶん意味なし)。

.htaccess:

RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME} !\.gz$
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule .+ %{REQUEST_URI}.gz
ForceType application/x-javascript
AddEncoding x-gzip .gz

この .htaccess によって、gzip 対応ブラウザが「*.js」にアクセスすると、「*.js.gz」を返します。

gzip_js_test.js:

var gzip_js_test_url = '';
switch (gzip_js_test) {
case "OK":
var gzip_js_test_url = "http://( アクセス解析 1 )";
break;
case "NG":
var gzip_js_test_url = "http://( アクセス解析 2 )";
break;
default:
var gzip_js_test_url = "http://( アクセス解析 3 )";
break;
}
document.write('<img src="' + gzip_js_test_url + '" />');

前述の gzip_js_test の値によって、読み込むアクセス解析用の画像を振り分けます。

「アクセス解析 3」を読み込んだ場合、「gzip 圧縮に対応しているので .js.gz を読み込んだのに、ファイルの内容が解析できなかった」とわかります。

各ブラウザのデータ

gzip 圧縮 の JavaScript に対応
JavaScritp は利用可能、gzip 圧縮された JavaScript も読み込み可能
ブラウザ名 割合
Microsoft Internet Explorer 6 6483 (48.69%)
Microsoft Internet Explorer 7 2953 (22.18%)
Firefox 2.0 2680 (20.13%)
Safari 441 (3.31%)
Opera 421 (3.16%)
Mozilla 135 (1.01%)
Microsoft Internet Explorer 5 80 (0.60%)
Firefox 1.5 66 (0.50%)
Netscape 7 26 (0.20%)
Firefox 1.0 14 (0.11%)
不明 9 (0.07%)
Microsoft Internet Explorer 4 2 (0.02%)
NTT DoCoMo 1 (0.01%)
Sleipnir 1 (0.01%)
Netscape 4 1 (0.01%)
Google 1 (0.01%)
gzip 圧縮 は無効(または利用不可)
JavaScritp は無効(または利用不可)、非圧縮の JavaScript を読み込み
ブラウザ名 割合
Microsoft Internet Explorer 6 1351 (73.87%)
Microsoft Internet Explorer 7 187 (10.22%)
Firefox 2.0 142 (7.76%)
Microsoft Internet Explorer 5 78 (4.26%)
Netscape 4 18 (0.98%)
Opera 15 (0.82%)
不明 10 (0.55%)
Safari 7 (0.38%)
Mozilla 5 (0.27%)
PLAYSTATION 3 4 (0.22%)
Netscape 3 3 (0.16%)
Firefox 1.0 3 (0.16%)
SoftBank 3 (0.16%)
Microsoft Internet Explorer 4 1 (0.05%)
Firefox 1.5 1 (0.05%)
NTT DoCoMo 1 (0.05%)
Safari の対応状況

JavaScritp は利用可能、gzip 圧縮された JavaScript も読み込み可能:

  • Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/103u (KHTML, like Gecko) Safari/100.1
  • Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/125.4 (KHTML, like Gecko) Safari/125.9
  • AppleWebKit/3xx.x, AppleWebKit/4xx.x, AppleWebKit/5xx.x は OK

JavaScritp は無効(または利用不可)、非圧縮の JavaScript を読み込み:

  • Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/85 (KHTML, like Gecko) Safari/85
  • Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/85.8.2 (KHTML, like Gecko) Safari/85.8.1
  • Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/85.8.5 (KHTML, like Gecko) Safari/85.8