2011-08-03 18 views
0

私は、ページの読み込みを高速化するためにjavascriptの読み込みを遅延するように構築しました。ウェブサイトを展開するには、YIU圧縮器を使用してスクリプトを最小限に抑えます。スクリプトには2つのバージョンがあります.1つは圧縮され、元のものはありません。例:example-min.jsおよびexample.js。いくつかのjavascriptは、機能が提供されるときにのみ読み込まれ、時にはより多くのスクリプト(プラグインのアイデア)が必要になる場合があります。JavascriptでYIU圧縮プログラムでjavascriptを圧縮しているかどうかを検出します。

「ホスト」jsファイルが圧縮されている場合は、他のjsファイルが必要な場合は知りたいので、圧縮されている場合は、jsファイルの縮小版が読み込まれます。そうでない場合(開発中)、orginialファイルをロードします。例えば

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の圧縮機で圧縮された //:Firefoxが表示されます

o.isJsMinified=function(){s=o.isJsMinified.toString(),ss='s= ';return (s.indexOf(ss+'o.is')<0);}; 

function() { 
    s = o.isJsMinified.toString(), ss = "s= "; 
    return s.indexOf(ss + "o.is") < 0; 
} 

機能は、Firefoxに失敗し、それは常に、それが圧縮されていない 'と言います'。誰かがこのための回避策を知っていますか?

+0

なぜgsのためにdownvote誰かがこの閉じられたトピックですか? – Codebeat

+0

あなたの質問、特に既存の回答がある質問を拝見しないでください。私はここであなたの編集をロールバックしましたが、もう一度やってはいけません。 –

答えて

0

HTTPヘッダーは、圧縮が要求されて有効になっているかどうかを指定しますが、there's no easy way to read themです。開発用に特別なFirefox拡張機能が必要な場合があります。

おそらく、変更を行う適切な場所はサーバーにあります。特定のヘッダーが指定されていて、リクエスタのIPアドレスがローカルの場合は、展開されていないスクリプトを送信します。

+0

ありがとうございますが、そうではありません。あなたはgzip圧縮について話しています。 – Codebeat

1

私はあなたが本当にここで事を複雑にしていると思います。うわー、あなたはjs/productionjs/debugのようにあなたのサーバに2つのフォルダを作成してみてはどうでしょうか? javascriptファイル内には、生産性があるかデバッグされているかを示すフラグが1つあります。同様に考えると、そのようなフォルダは不要です。

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

あなたは.minと区別することができます。あなたが本当に必要とするのは、コードにグローバル変数DEBUGを設定することだけです。

+0

私は事を過度に複雑化していません、私は例を示しています。私はあなたが言っていることを理解しています。しかし、私はデバッグなどで何かをフラグしたくない。 – Codebeat

+0

@Erwinus:問題は、スクリプトファイルが圧縮されているかどうかを確実に判断できないことです。私はもちろん、圧縮ファイルにとって非常に典型的なものを見つけようとすることもできますし、コンプレッサーがファイルに残している何らかの「コメント」を見張っているかも知れませんが、かなり信頼性がありません。 – jAndy

+0

また、他のブラウザでもうまく機能しています。問題はFirefoxです。 Function.toString()は '現状'の代わりに書式付きテキストを返します。 – Codebeat

関連する問題