L--js内存泄露

简介

  内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的 C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器 垃圾回收方法有bug,会产生内存泄露,以下情况都是基于IE浏览器。

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'));
解决方法:在window.onunload 事件中写上: document.getElementById('myDiv').myProp= null;
 

3 .给 DOM 对象用 attachEvent 绑定事件

function doClick() {}  

element.attachEvent("onclick", doClick); 

解决方法:element.detachEvent('onclick', doClick);

4 .从外到内执行 appendChild 。这时即使调用 removeChild 也无法释放

var parentDiv = document.createElement("div");  

var childDiv = document.createElement("div");  

document.body.appendChild(parentDiv);  

parentDiv.appendChild(childDiv); 

 解决方法:从内到外执行appendChild

5 .反复重写同一个属性会造成内存大量占用 ( 但关闭 IE 后内存会被释放 )

for(i = 0; i < 5000; i++) {  

hostElement.text = "asdfasdfasdf";  

}
//
这种方式相当于定义了5000个属性!

 解决方法:就是编程的时候尽量避免出现这种情况

原文地址:https://www.cnblogs.com/guDouMaoNing/p/4389783.html