JS内存泄漏

来源:互联网 发布:手机地图软件下载 编辑:程序博客网 时间:2024/06/14 03:57

 

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;
或者

  1. function onMyElemClick() { 
  2.    window.alert('hi!'); 
  3. function loadMyPage() { 
  4.    var elem = document.getElementById('myelement'); 
  5.    elem.onclick = onMyElemClick; 
  6. 2). function Helper(elem) 
  7.     this.elem = elem; 
  8. var elem = document.getElementById('elem'); 
  9. elem.helper = new Helper(elem); 
  10. var parent = document.getElementById('parent'); 
  11. var child = document.getElementById('child'); 
  12. // make it easy to find one from the other  
  13. parent.other = child; 
  14. child.other = parent; 
以上两段代码都会引起内存泄漏.
3)如果将一个element从一个elemeng删除最好用 innerHTML="". 如下:
  1. function discardElement(element) { 
  2.     var garbageBin = document.getElementById('IELeakGarbageBin'); 
  3.     if (!garbageBin) { 
  4.         garbageBin = document.createElement('DIV'); 
  5.         garbageBin.id = 'IELeakGarbageBin'
  6.         garbageBin.style.display = 'none'
  7.         document.body.appendChild(garbageBin); 
  8.     } 
  9.     // move the element to the garbage bin 
  10.     garbageBin.appendChild(element); 
  11.     garbageBin.innerHTML = ''
原创粉丝点击