ホームページ > ウェブフロントエンド > jsチュートリアル > IE JSプログラミング_JavaScriptスキルで注意が必要なメモリ解放の問題

IE JSプログラミング_JavaScriptスキルで注意が必要なメモリ解放の問題

WBOY
リリース: 2016-05-16 18:51:09
オリジナル
962 人が閲覧しました

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上記のアドレスにアクセスすると、例や凡例を含む詳細な手順が表示されます。ただ、私の英語があまり上手ではないのでよく理解できませんが、間違いや追加すべきことがあれば、ご指摘ください。

2. 最初の項目ですが、実はこれもオブジェクトへの参照なので、 element.onclick = funcRef という記述メソッドも含まれています。ページがアンロードされるときに解放される必要があります。

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) ;
}
}

CollectGarbage()はIE独自のメモリ解放関数です

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート