ある記事で、メモリ リークを防ぐために、window.unload イベントですべての expandos をクリアするとよい場合があることを確認しました。
なぜこれを行うのか理解できません。
とにかくページを離れると、ブラウザーはすべての DOM とその関連リソースを消去していませんか?
ありがとう、
ブラク・オズドガン
ある記事で、メモリ リークを防ぐために、window.unload イベントですべての expandos をクリアするとよい場合があることを確認しました。
なぜこれを行うのか理解できません。
とにかくページを離れると、ブラウザーはすべての DOM とその関連リソースを消去していませんか?
ありがとう、
ブラク・オズドガン
ねえ、素晴らしい質問です。問題は、JavaScript オブジェクトと DOM ノード間の循環参照にあります。
DOM ノードを指すグローバル JavaScript オブジェクトがあり、そのノードにはオブジェクトに戻る expando プロパティがあるとします。ページがアンロードされると、スクリプト エンジンは JavaScript オブジェクトを「null-out」するため、DOM ノードをポイントしなくなります。ただし、オブジェクトへの参照がまだ (DOM から) あるため、オブジェクトをメモリから解放することはできません。その後、スクリプト エンジンが終了します。
DOM の Expando プロパティは、他のオブジェクトへの参照にすぎません。DOM がクリーンアップされると、それらの参照が壊れますが、オブジェクトがまだ使用されていると想定されます。この例では、DOM はスクリプト エンジンがそれに属するオブジェクトをクリーンアップするのを待ちますが、スクリプト エンジンは既に終了しています。
したがって、問題は、DOM がそれに属するメモリのみを処理し、スクリプト エンジンが同じことを行うと想定していることです。
これが役に立ったことを願っています。
参照: http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx