ajax 呼び出しを介して .html ファイルのデータ全体を div にロードしています。html ページには、 HTC (html コンポーネント) がページ上の要素とバインドするために必要なリンク、スクリプト タグが含まれています。
ページの構造は次のようになります。
このようなHTMLページをロードするためにjQueryを使用しています
<body>
<input type="radio" class="openpage" id="0001">
<input type="radio" class="openpage" id="0002">
<input type="radio" class="openpage" id="0003">
<input type="radio" class="openpage" id="0004">
<div id="loadPage"></div>
<script>
$(document).ready(function(){
$(".openpage").on("click",function(){
$("#loadPage").load($(this).attr("id")+".html",function(){
//load a page with many htc bindings and external references
//trigger some onload functions which are not called automatically in IE
//confirmed this is in chrome
});
});
})
</script>
</body>
これに伴う問題は、ラジオ ボタンをクリックしてページをロードすると、IE のメモリが増え続け、いくつかのページをロードした後にブラウザが応答を停止することです。タスク マネージャーでメモリが増えているのがわかります。
アプリケーションは IE 5、6、7、8、9 で実行され、IE10 では互換モードで実行されます。Chrome で同じシナリオを再現しようとしましたが、問題はありませんでした。したがって、IE固有のメモリ管理関連の問題だと思います。
私は多くの記事を読みましたが、確信が持てませんでした.SO でこの質問も読みましたが、私の場合は受け入れられないページの一部のみを読み込むことを提案しています.この記事は関連しているようですが、メモリリークの正確な原因はわかりません私の場合。
上記の本文全体は、実際には iframe 内にあります。回避策として、ラジオ ボタンを 8 回クリックした後にメイン ページを含むフレームをリロードします。以下を使用して、各ロードの前にものをクリアしようとしました:
$("#loadPages").empty();
$("#loadPages").find("*").off();
$.ajaxSetup({ cache: false });
しかし、何も機能しません。したがって、jquery が htc を介して登録されたイベントをクリアできるかどうかは疑問です。
1)この場合のメモリリークの理由を説明していただけると助かります。
2) そして一般的に、多くのリソースをロードした後にブラウザでメモリ リークが発生する理由。これは最新のブラウザーでは発生しませんが、古いブラウザーで発生した理由です。
3) フレームを更新せずにブラウザーのメモリを解放する方法はありますか。
4)ブラウザのメモリに存在するすべてのリソースを確認する方法はありますか?