亜細亜ノ蛾 - Weblog

[SiteSearch Google]

November 17, 2007

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

[ad]

gzip 圧縮 JavaScript

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

それは、

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

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

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

「圧縮した 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

Google Adsense

コメント

コメントを投稿

"gzip 圧縮した JavaScript ファイルに問題はないのか?" にコメントを投稿することができます(別ウィンドウが開きます)。

トラックバック

このエントリーのトラックバックURL:

"gzip 圧縮した JavaScript ファイルに問題はないのか?"へのトラックバックはまだありません。

過去の記事

カテゴリィ一覧
  1. Movable Type
  2. その他
    1. アイデア
  3. ウェブ
    1. Weblog
    2. Webデザイン
    3. ちょっとイイ話
    4. へぇー(トリビア・雑学)
    5. オモロ
      1. オモロテキスト
      2. オモロニュース
      3. オモロ動画
      4. オモロ画像
    6. ニュース
  4. コンピュータ・エレクトロニクス
    1. PC
      1. Firefox
  5. マンガ・アニメ・ゲーム
    1. アニメ
      1. 新世紀エヴァンゲリオン
    2. オタク
    3. ゲーム
    4. マンガ
      1. 週刊少年ジャンプ
        1. DEATH NOTE
        2. HUNTER×HUNTER
        3. SKET DANCE
        4. バクマン。
  6. 本・音楽・映画・TV
    1. TV・芸能
    2. 映画
  7. 食・健康・生活
    1. ファッション
    2. 食べ物