0

ページの読み込みを高速化するために、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 で失敗し、圧縮されていないと常に「言います」。誰もこれに対する回避策を知っていますか?

4

2 に答える 2

1

ここで物事を複雑にしすぎていると本当に思います。サーバー上にjs/productionとのような 2 つのフォルダを作成してみませんかjs/debug。JavaScript ファイル内に、それが生産的であるかデバッグであるかを示すフラグが 1 つある場合があります。お気に入り

if( window.DEBUG ) {
    o.require('/js/debug/new.js',800);
}
else {
    o.require('/js/production/new.js',800);
}

考えてみれば、それらのフォルダも不要です。かどうかを区別するだけ.minです。実際に行う必要があるのはDEBUG、コードでグローバル変数を設定することだけです。

于 2011-08-03T16:51:29.440 に答える
0

HTTP ヘッダーは、圧縮が要求されて有効になっているかどうかを示しますが、それらを読み取る簡単な方法はないため、開発用に特別な Firefox 拡張機能が必要になる場合があります。

おそらく、変更を行う適切な場所はサーバー内です。特定のヘッダーが指定されている場合 (およびリクエスターの IP アドレスがローカルの場合) は、縮小されていないスクリプトを送信します。

于 2011-08-03T16:47:00.693 に答える