1. DOM オブジェクトに追加された属性はオブジェクトへの参照です。例:
var MyObject = {};
document.getElementById('myDiv').myProp = MyObject;
解決策:
window.onunload イベントに書き込みます: document.getElementById(' myDiv' ).myProp = null;
2. DOM オブジェクトと JS オブジェクトは相互参照します。例:
function Encapsulator(element) {
this.elementReference = element;
element.myProp = this;
}
new Encapsulator(document.getElementById('myDiv'));
解決策:
onunload イベントに次のように記述します: document.getElementById('myDiv').myProp = null;
3.attachEvent を使用してイベントを DOM オブジェクトにバインドします。例:
function doClick() {}
element.attachEvent("onclick", doClick);
解決策:
onunload イベントに次のように記述します: element.detachEvent('onclick', doClick );
4. appendChild を外側から内側に実行します。このときremoveChildを呼び出しても解放できません。例:
varparentDiv = document.createElement("div");
var childDiv = document.createElement("div");
document.body.appendChild(parentDiv);
parentDiv.appendChild (childDiv);
解決策:
appendChild を内側から外側に実行します:
varparentDiv = document.createElement("div");
var childDiv = document.createElement("div"); 🎜>parentDiv.appendChild(childDiv);
document.body.appendChild(parentDiv);
5. 同じ属性を繰り返し書き換えると大量のメモリを占有します (ただし、IE を終了するとメモリは解放されます)。例:
for(i = 0; i hostElement.text = "asdfasdfasdf";
}
このメソッドは、5000 個の属性を定義するのと同等です。
解決策:
実際、解決策はありません:P~~~プログラミング時にこの状況を避けるようにしてください~~
注:
1. 上記の情報は Microsoft の公式 MSDN サイトからのものです。リンク アドレス:
http://msdn.microsoft.com/librar ... e_leak_patterns .asp上記のアドレスにアクセスすると、例や凡例を含む詳細な手順が表示されます。ただ、私の英語があまり上手ではないのでよく理解できませんが、間違いや追加すべきことがあれば、ご指摘ください。
3. MSDNの英語説明では、attachEvent時にメモリの「LEAK」が発生しているため、detachEventを呼び出してもメモリが解放できないと書かれているようですが、その後は改善されるでしょう。デタッチイベント。これが当てはまるかどうかはわかりませんが、英語が得意な方は指摘してください。
4. 実際のプログラミングでは、特に顧客が使用する場合には、これらのメモリの問題が実際に与える影響は大きくありません。しかし、これらの問題はプログラマにとって常に懸念事項です。そんなバグがありますよね?解決できるなら解決するのがベストです。実際、webfx.eae.net などのトップ JS ソース コード サイトでは、ソース コード内のメモリ リリース管理に上記のソリューションが使用されているのを目にします。
jsvm を勉強しているときに、js.lang.System が gc() メソッドを定義していることを発見しました
System.gc = function ()
{
if (System.isIeBrowser())
{
CollectGarbage();
setTimeout("CollectGarbage();", 1) ;
}
}