国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

在IE下的JS編程需注意的內(nèi)存釋放問題

2024-09-05 00:20:42
字體:
供稿:網(wǎng)友
菜鳥學(xué)堂:
在ie下的js編程中,以下的編程方式都會造成即使關(guān)閉ie也無法釋放內(nèi)存的問題,下面分類給出:

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、給dom對象用attachevent綁定事件。范例:
function doclick() {}
element.attachevent("onclick", doclick);
解決方法
在onunload事件中寫上: element.detachevent('onclick', doclick);


4、從外到內(nèi)執(zhí)行appendchild。這時即使調(diào)用removechild也無法釋放。范例:
var parentdiv =  document.createelement("div");
var childdiv = document.createelement("div");
document.body.appendchild(parentdiv);
parentdiv.appendchild(childdiv);
解決方法
從內(nèi)到外執(zhí)行appendchild:
var parentdiv =  document.createelement("div");
var childdiv = document.createelement("div");
parentdiv.appendchild(childdiv);
document.body.appendchild(parentdiv);


5、反復(fù)重寫同一個屬性會造成內(nèi)存大量占用(但關(guān)閉ie后內(nèi)存會被釋放)。范例:
for(i = 0; i < 5000; i++) {
  hostelement.text = "asdfasdfasdf";
}
這種方式相當(dāng)于定義了5000個屬性!
解決方法:
其實沒什么解決方法:p~~~就是編程的時候盡量避免出現(xiàn)這種情況咯~~


說明:
1、以上資料均來源于微軟官方的msdn站點,鏈接地址:
http://msdn.microsoft.com/librar ... e_leak_patterns.asp
大家可以到上面這個地址中看到詳細的說明,包括范例和圖例都有。只是我英文不太好,看不太懂,如果我上述有失誤或有需要補充的地方請大家指出。

2、對于第一條,事實上包括 element.onclick = funcref 這種寫法也算在其中,因為這也是一個對對象的引用。在頁面onunload時應(yīng)該釋放掉。

3、對于第三條,在msdn的英文說明中好像是說即使調(diào)用detachevent也無法釋放內(nèi)存,因為在attachevent的時候就已經(jīng)造成內(nèi)存“l(fā)eak”了,不過detachevent后情況還是會好一點。不知道是不是這樣,請英文好的親能夠指出。

4、在實際編程中,這些內(nèi)存問題的實際影響并不大,尤其是給客戶使用時,客戶對此絕不會有察覺,然而這些問題對于程序員來說卻始終是個心病 --- 有這樣的bug心里總會覺得不舒服吧?能解決則給與解決,這樣是最好的。事實上我在webfx.eae.net這樣頂級的js源碼站點中,在它們的源碼里都會看到采用上述解決方式進行內(nèi)存的釋放管理。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 夏邑县| 红河县| 资源县| 抚顺县| 阳曲县| 小金县| 阿尔山市| 林口县| 德昌县| 辰溪县| 清水县| 五台县| 常宁市| 疏附县| 壶关县| 牙克石市| 道真| 塘沽区| 甘孜县| 宣恩县| 南郑县| 当涂县| 贵德县| 丹江口市| 喀喇| 婺源县| 汽车| 新昌县| 富民县| 侯马市| 闵行区| 时尚| 栖霞市| 镇沅| 庆安县| 武陟县| 海宁市| 潜山县| 蓬溪县| 富裕县| 木里|