私は一日のほとんどの間、次の問題に取り組んできましたが、まったく前進していませんでした。私は現在、IE9 と組み合わせて jQuery 1.7.2 を使用しており、HTML を取得する単純な $.ajax 呼び出しを呼び出しています。その後、HTML は次のように div に挿入されます。
$("#viewContent").html(content);
完全な関連する jQuery コードを以下に示します。
var request = $.ajax({
url: loadUrl,
type: "GET",
cache: false,
data: {command: "loadView", recordid: contextId},
dataType: "html",
error: function (xhr, ajaxOptions, thrownError) {
getViewManager().setMode("ERROR");
handleError(xhr.status, thrownError);
$("#viewContent").parent().removeClass("ajaxLoading");
}
});
request.done(onLoadViewSuccess);
var onLoadViewSuccess = function(content) {
$("#viewContent").parent().removeClass("ajaxLoading");
for(var i=0;i<100;i++) {
$("#viewContent").html(content);
}
content = null;
}
この問題に関しては、コンテンツを 100 回挿入したことに気付くでしょう。for ループは、上昇するメモリ (IE のドリップ メモリ プロファイラーを介して観察) を誇張することのみを目的としています (DOM ノードの総数とともに) IE によって保持されます)。静的な空の文字列に置き換えたため、コンテンツは問題ではなく、 onLoadViewSuccess 関数内で同じことを行います。
var onLoadViewSuccess = function(content) {
$("#viewContent").parent().removeClass("ajaxLoading");
for(var i=0;i<100;i++) {
$("#viewContent").html("<div/>");
}
content = null;
}
つまり、Drip は各 ajax 呼び出しの後に 100 個の新しい DOM ノードを表示し、メモリを着実に増やします。最初のページの読み込みで同じメソッドを呼び出した場合、これが ajax 呼び出しに問題があるように見える理由については、次のとおりです。
$(document).ready(function() {onLoadViewSuccess("<div/>")});
同じ動作は見られません (つまり、for ループ内で html("<div/>") を呼び出すたびに、100 個の新しいノードを作成してすべてメモリに保持するのではなく、IE9 内で置き換えられた DOM ノードを適切にクリアしています。 IE と jQuery の ajax 機能に関して報告されたいくつかの問題を確認しましたが、近いトピックは、以前のバージョンの jQuery で対処された古い IE バージョンに関連しているように見えます...
これは非常に些細なユースケースのように思われるため、基本的な何かが欠けていると思われます。通常、Googleで同様のトピックが見つからない場合、10回中9回は私の愚かなことが原因です...