私は完全にajaxに基づいたWebアプリケーションに取り組んでいます。2 つの主要なセクションがあります。左パネルにはリンクがあります。リンクがクリックされると、右側のパネルのコンテンツが ajax を介して動的に読み込まれます。ajax 呼び出しは、html と javascript の両方を含む json エンコードされた応答を返します。サンプルの page1.php ファイルを次に示します。
$output=array();
ob_start();
include("page1html.php");
$output['html']=ob_get_clean();
ob_start();
include("page1script.php"); //page1script.php return the page specific script
$output['script']=ob_get_clean();
echo json_encode($output);
ここにサンプルpage1script.phpがあります
<script>
ajaxscript = { //namespace
init: function () {
},
foo: function () {
}
};
</script>
他のページも同じスタイルですが、html とスクリプトが異なります。(そのため、大きなファイルになるため、グローバルjsファイルを作成していません..ページ固有のjsのみをロードしたい)。
//this is onclick of link
updatecontents("page1.php"); ...
updatecontents("page2.php"); and so on
これが私のjsです
var xhr;
var ajaxscript = null;
function updatecontents(addrs) {
if(xhr) xhr.abort();
$('#mainpanel').html('<div class="loader"></div>');
$('#ajscript').html('');
ajaxscript = {}; //remove the previous functions in the namespace; This is where I cleanup the old functions
xhr=$.ajax({
url: addrs,
dataType : 'json',
success: function(response) {
if(response.html)
$('#mainpanel').html(response.html);
if(response.script)
$('#ajscript').html(response.script);
if(typeof(ajaxscript.init)=='function') ajaxscript.init();
},
error: function () {}
});
}
これは私が達成できる最高のものです...しかし、リンクをクリックするたびに成長するFirefoxのfirebugスクリプトタブ: js//eval/seq/ の下のリストが増えていることに気付きました。これにより、リンクをクリックするたびにスクリプトがメモリに読み込まれ、ブラウザのキャッシュに残っているように感じます. 私が正しい道を進んでいるかどうか、またはどのような最適化が必要かについて、専門家の意見を聞きたいです。