2

ある記事で、メモリ リークを防ぐために、window.unload イベントですべての expandos をクリアするとよい場合があることを確認しました。

なぜこれを行うのか理解できません。

とにかくページを離れると、ブラウザーはすべての DOM とその関連リソースを消去していませんか?

ありがとう、

ブラク・オズドガン

4

1 に答える 1

1

ねえ、素晴らしい質問です。問題は、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

于 2010-05-07T04:58:01.210 に答える