今回の結論は、修正による不具合の有無を考慮しない場合は、良い結果になりました。
また javascript を圧縮するツールはすでにあるので、そちらがお勧めです。
http://fnya.cocolog-nifty.com/blog/2007/08/yui_compressor__57c4.html
http://webos-goodies.jp/archives/51182388.html
http://dogmap.jp/2007/09/06/minify-javascript/
http://fnya.cocolog-nifty.com/blog/2009/10/microsoft-ajax-.html
http://aspnet.codeplex.com/releases/view/34488
prototype.min.js.2010-04-13.gz
original→ prototype.js change → prototype.min.js.2010-04-13.gz yuicomp → yuicompressor-2.4.2 (java -jar yuicompressor-2.4.2.jar -o prototype.yuicompressor-2.4.2.js prototype.js) ajaxmin → Microsoft Ajax Minifier 1.1 (ajaxmin.exe /H prototype.js -o prototype.ajaxmin.js)
(1) original | (2) change | (3) yuicomp | (4) ajaxmin | |
---|---|---|---|---|
未圧縮 | 136.58 KB | 78.03 KB | 79.56 KB | 77.67 KB |
圧縮 | 30.66 KB | 22.99 KB | 23.88 KB | 22.73 KB |
(1) - (2) | (1) - (3) | (1) - (4) | (2) - (3) | (2) - (4) | 未圧縮 | 58.54 KB | 57.02 KB | 58.91 KB | -1.53 KB | 0.37 KB |
---|---|---|---|---|---|
圧縮 | 7.67 KB | 6.78 KB | 7.93 KB | -0.89 KB | 0.26 KB |
結果としては javascript(prototype.js) が使えて、ファイル圧縮(gzip, deflate) が使えないというブラウザはほとんど無いことと、一度 ステータスコード 200 (ファイルデータ有り) で取得したファイルは、変更しない場合で If-Modified-Since をブラウザが送ってくる限り ステータスコード 304 (ファイルデータ無し) で返すことを合わせて考えるのであれば、大規模なサイトであっても、あまり意味は無いということがわかりました。
しかし始めて訪れたサイトで javascript が少しでも早く実行されるというのは良いと思います。
それぞれ動作確認していません。それぞれオプションを吟味していません。ajaxmin は /H を付けていますので、内容が変化しています。change が善戦している理由には、警告や注意やエラーになる場合のある変更があるため、というのもあると思います。
読み込んでエラーにならないことを確認したブラウザは Firefox 3.6.3 です。
先頭のコメントは残しています。
今回の javascript を短くする方法は、下記になります。
- 前々回の修正を行う。
- 前回の修正を行う。
- eval の部分を考慮していないので、不具合が発生する場合が有ります。
- この例の場合の圧縮するツールの詳細
SpiderMonkey
jsparsenodetree
php コマンド (5.2.13-pl0-gentoo)
gzip コマンド (1.4)
javascript を短くしてみましょう 第1回
javascript を短くしてみましょう 第2回
javascript を短くしてみましょう 第4回
javascript を短くしてみましょう 第5回
追記: jslint で prototype.js を通すテスト結果。
//============================ // Warning. 括弧が無い場合 var a=1; if(a==1) a=2; // Warning. セミコロンの無い場合 var a=1; if(a==1) {a=2} // OK var a=1; if(a==1) {a=2;} //============================ // Error. tryでセミコロンが無い場合 var a=1; switch(a){case 1:try{break}catch(e){}} // Warning. if文を使える場合 var a=1; switch(a){case 1:try{break;}catch(e){}} //============================ // Warning. var a = new Date; var a = new Array; var a = new Array(); // OK. var a = new Array(0); var a = new Date(); //============================ // __iterator__, __proto__ // Error. if (a.__proto__){} // Warning. if (a["__proto__"]){} //============================ // Error. return a=1; // OK. return (a=1); //============================ // var では無いカンマ区切り // Error. a=1, b=2; // OK. 意味同じはず。 a=1; b=2; //============================ // Error. a = void 0; // OK. a = undefined; // OKでは無い。変更可能。 undefined = null; a = undefined;
結果としては、無理でした。
0 件のコメント:
コメントを投稿