2

次のような単純なスクリプトを使用して、Chrome で一連の XHR リクエストを行う場合:

var q = (function DUCK(){
    var x = new XMLHttpRequest();
    x.open('POST', '/someValidPage');
    x.onload = function(){console.log("responded!");}
    x.send();
});

//Just calling XHR a bunch of times to create the bug.
q(); q(); q(); q(); q(); q(); q(); q(); q(); q(); q();
q(); q(); q(); q(); q(); q(); q(); q(); q(); q(); q();

ブラウザーは、すべての呼び出しが行われx.onloadた直後に、一連の 22 個の追加イベント ハンドラー ( ) を作成します。q()これは予想どおりですが、応答がなくなり、オブジェクトが使用されなくなった場合、XHR オブジェクトは、ブラウザーのガベージ コレクターがクリーンアップするために来て、追加のハンドラーをすべて削除するまでメモリに残ります。

オブジェクトの処理が終わったらオブジェクトとイベントを削除したい... x.removeEventHandler('load') などは結果を表示せず、IE8 では動作しません (これもイライラします)。

イベントを正しく切り離し、メモリからオブジェクトを削除するにはどうすればよいですか?

4

0 に答える 0