ページの読み込みを高速化するために、javascript の読み込みを遅らせる構造を作成しました。Web サイトを展開するために、YIU コンプレッサーを使用してスクリプトを最小限に抑え、速度も向上させています。スクリプトには 2 つのバージョンがあり、1 つは圧縮され、元のバージョンは圧縮されていません。例: example-min.js および example.js。一部の JavaScript は、機能が追加されたときにのみ読み込まれ、場合によっては追加のスクリプトが必要になります (プラグインのアイデア)。
とにかく、「ホスト」jsファイルが圧縮されているかどうか(他のjsファイルが必要な場合)を知りたいので、圧縮するとjsファイルの縮小バージョンがロードされます。そうでない場合 (開発時)、元のファイルをロードします。
例えば:
function myObject()
{
var o = this;
o.isJsMinified = function()
{ s = o.isJsMinified.toString(),ss='s= ';
return (s.indexOf(ss+'o.is')<0);
};
o.require = function( s, delay, baSync, fCallback ) // add script to dom
{
var oo = document.createElement('script'),
oHead = document.getElementsByTagName('head')[0],
f = (typeof fCallback == 'function')?fCallback:function(){};
if( !oHead )
{ return false; }
oo.onload = function() {oo.id='loaded'; f(oo); };
oo.type = 'text/javascript';
oo.async = (typeof baSync == 'boolean')?baSync:false;
oo.src = s;
setTimeout( function() { oHead.appendChild(oo); }, (typeof delay != 'number')?delay:1 );
return true;
};
.....
.....
if( <new functionality found> )
{
if( o.isJsMinified() )
{ o.require('new-min.js',800); }
else { o.require('new.js',800); }
}
.....
.....
}
jsIsMinified() 関数を見ると、トリックを使用して、関数自体 (ソース) がスペース (縮小版) から削除されているかどうかを検出します。ただし、firefox には問題があり、元のフォーマットを返さないため、違いを検出できません。
例: // YUI コンプレッサーで圧縮:
o.isJsMinified=function(){s=o.isJsMinified.toString(),ss='s= ';return (s.indexOf(ss+'o.is')<0);};
Firefox は次のように表示されます。
function () {
s = o.isJsMinified.toString(), ss = "s= ";
return s.indexOf(ss + "o.is") < 0;
}
この関数は firefox で失敗し、圧縮されていないと常に「言います」。誰もこれに対する回避策を知っていますか?