まず、サイトへの最初のリクエストとその後のすべてのリクエスト (つまり、site.js) で読み込まれる JS ファイルのコントロールから JavaScript を外部化するのが最善の方法です。このファイルはブラウザによってキャッシュされるため、JS がコントロール内にある場合のように、ユーザーは JS を何度もダウンロードする必要はありません。
次に、実行中のページまたはコントロールに関連するスクリプトの部分のみを実行するメカニズムを作成する必要があります。
これを達成する方法はいくつかありますが、私があなたの状況にあった場合、この方法で行います。
コンテンツの大部分をラップするページ レベルの要素を特定します。通常、人々はこれを と呼びますwrapper
。" " というラッパーにカスタム属性を動的に追加しますdata-js
。「data-js」の値を、ページまたはユーザー/カスタム コントロールから (サーバー側で) 動的に設定します。パイプ (|) またはその他の文字で区切られた複数のキーを持つことができます。
<div class="wrapper" data-js="funtion1|function2">
<!-- Page content goes here -->
</div>
jQuery を活用して DOM の準備が整ったときにこの属性を探し、data-js 属性の値に基づいてカスタム JS 関数を実行します。その関数には、現在のページまたはコントロールに関連するコードのみが含まれます。
$(function(){
var funcKeys = $('.wrapper').attr('data-js');
if(funcKeys != null)
{
var funcs = funcKeys.split('|');
for(var i=0; i< funcs.length; i++) {
var funcName = eval(funcs[i]);
if(typeof funcName == 'function') {
funcName();
}
}
}
});
このアプローチを使用すると、jQuery CDN 参照、サイトの JS ファイルへの参照、およびレイアウト内の上記のコード スニペットのみが必要になります。
次に、次のように、サイト固有の JS ファイルにページ/コントロール固有の関数を含めるだけです。
function function1() {
alert("This is function 1");
}
function function2() {
alert("This is function 2");
}
これが役立つことを願っています。
参考までに、私はあなたがそれがどのように機能するかを試すためのフィドルもセットアップしました:
http://jsfiddle.net/hh84f/1/