1

IEでメモリリークの問題が発生しています。

IEでイベントハンドラーのフックを解除しないと、メモリリークが発生する可能性があることを読んでいます。これは本当ですか?
ユーザーがページを離れるときにイベントハンドラーをデタッチしないことによって、メモリリークが発生する可能性がありますか?

4

2 に答える 2

1

Douglas Crockford は、JSscript のメモリ リークに関する優れた投稿をしています(JScript は、JavaScript/ECMAScript の IE の実装です)。

基本的には、IE は DOM と JScript に対して別々のメモリ管理 (およびガベージ コレクション) を行っています。このため、IE は DOM オブジェクトとイベント ハンドラーの間の循環参照をクリーンアップするのに問題があります。

これを回避するには、DOM オブジェクトを破棄するnull前に、常に DOM オブジェクトからイベント ハンドラーを削除する (または に設定する) ようにします。

于 2012-07-12T22:34:34.540 に答える
0

一部の古いブラウザには、これに関して問題がありました。登録されたイベント ハンドラーがある場合は、これを考慮してください。

1) スクリプト エンジンでは、コールバック レジストリが保持されます。イベントは、DOMNode と関数ポインタの 2 つにバインドされます。

2) DOMNode が「消える」可能性があります - 同じことが関数に「起こる」可能性があります (可能性は低いですが)。

次のようなコードは、次のよう<a onclick="a = (a?a+1:0);" id="getme">...に参照する無名関数になりvar anchor = document.getElementById('getme'); anchor.onclickますdelete anchor.onclick

このコードに文句を言う人もいるかもしれませんが、クリックすると確実にアンカーが消去されます。

var a=document.getElementById('getme')
window.detachEvent("onclick", a.onclick);
delete a.onclick;
a.parentNode.removeChild(a)
于 2012-07-12T22:31:45.510 に答える