IEでメモリリークの問題が発生しています。
IEでイベントハンドラーのフックを解除しないと、メモリリークが発生する可能性があることを読んでいます。これは本当ですか?
ユーザーがページを離れるときにイベントハンドラーをデタッチしないことによって、メモリリークが発生する可能性がありますか?
IEでメモリリークの問題が発生しています。
IEでイベントハンドラーのフックを解除しないと、メモリリークが発生する可能性があることを読んでいます。これは本当ですか?
ユーザーがページを離れるときにイベントハンドラーをデタッチしないことによって、メモリリークが発生する可能性がありますか?
Douglas Crockford は、JSscript のメモリ リークに関する優れた投稿をしています(JScript は、JavaScript/ECMAScript の IE の実装です)。
基本的には、IE は DOM と JScript に対して別々のメモリ管理 (およびガベージ コレクション) を行っています。このため、IE は DOM オブジェクトとイベント ハンドラーの間の循環参照をクリーンアップするのに問題があります。
これを回避するには、DOM オブジェクトを破棄するnull
前に、常に DOM オブジェクトからイベント ハンドラーを削除する (または に設定する) ようにします。
一部の古いブラウザには、これに関して問題がありました。登録されたイベント ハンドラーがある場合は、これを考慮してください。
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)