JS内存泄漏
最近用JS写了一个控件----div模拟弹出窗口.之前发布过一个版本,网友说有很严重的内存泄漏问题,经过此次修改,已经解决了此问题.对于JS的内存泄漏很很奇怪,一直都没有想过有此问题,也许是只会做java吧,很少考虑内存释放的问题.针对此问题,特意在网上找了一些资料.摘录如下.
1.内存泄漏检测工具.http://outofhanwell.com/ieleak/index.php?title=Main_Page
说明文档:https://ieleak.svn.sourceforge.net/svnroot/ieleak/trunk/drip/docs/index.html
2.如何修正JS的内存泄漏,一些教程:http://outofhanwell.com/ieleak/index.php?title=Fixing_Leaks
1) function loadMyPage() {
var elem = document.getElementById('myelement');
elem.onclick = function () {
window.alert('hi!');
};
}
这段代码就能引起JS的内存泄漏,如果修正:elem = null;
或者
以上两段代码都会引起内存泄漏.
3)如果将一个element从一个elemeng删除最好用 innerHTML="". 如下:
1.内存泄漏检测工具.http://outofhanwell.com/ieleak/index.php?title=Main_Page
说明文档:https://ieleak.svn.sourceforge.net/svnroot/ieleak/trunk/drip/docs/index.html
2.如何修正JS的内存泄漏,一些教程:http://outofhanwell.com/ieleak/index.php?title=Fixing_Leaks
1) function loadMyPage() {
var elem = document.getElementById('myelement');
elem.onclick = function () {
window.alert('hi!');
};
}
这段代码就能引起JS的内存泄漏,如果修正:elem = null;
或者
- function onMyElemClick() {
- window.alert('hi!');
- }
- function loadMyPage() {
- var elem = document.getElementById('myelement');
- elem.onclick = onMyElemClick;
- }
- 2). function Helper(elem)
- {
- this.elem = elem;
- }
- var elem = document.getElementById('elem');
- elem.helper = new Helper(elem);
- var parent = document.getElementById('parent');
- var child = document.getElementById('child');
- // make it easy to find one from the other
- parent.other = child;
- child.other = parent;
3)如果将一个element从一个elemeng删除最好用 innerHTML="". 如下:
- function discardElement(element) {
- var garbageBin = document.getElementById('IELeakGarbageBin');
- if (!garbageBin) {
- garbageBin = document.createElement('DIV');
- garbageBin.id = 'IELeakGarbageBin';
- garbageBin.style.display = 'none';
- document.body.appendChild(garbageBin);
- }
- // move the element to the garbage bin
- garbageBin.appendChild(element);
- garbageBin.innerHTML = '';
- }