1

私は一日のほとんどの間、次の問題に取り組んできましたが、まったく前進していませんでした。私は現在、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回は私の愚かなことが原因です...

4

1 に答える 1

0

だから私は問題の根底にたどり着いたと信じています...削除の骨の折れるプロセスの後、IEは私が定義した特定のCSSクラスに関連付けられた要素をクリーンアップしていなかったことがわかりました:

.shadow {
border-collapse: separate; 
-moz-box-shadow:    2px 2px 6px 3px #777;
-webkit-box-shadow: 2px 2px 6px 3px #777;   
box-shadow: #666 0px 2px 4px;   
**behavior: url(/btms/resources/css/PIE.htc);**
position: relative;
}

動作値が問題でした (もう使用されていませんが、IE 8 をサポートするアプリケーションを最初に開発していたときにうっかり残してしまいました。皮肉なことに、PIE は IE 8 の CSS3 サポートを追加することを目的としていますが、この場合、IE 9 で認識された参照を任意のjQuery によって削除された後でも IE がそれらの要素リソースを解放するのを妨げているクラスに関連付けられている要素)。願わくば、この投稿が他の誰かの同じ苦しみ\フラストレーションを救うことを願っています...

于 2012-07-09T16:32:31.383 に答える