添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)

1、  现象

每次动态添加iframe时,iexplore.exe进程占据的内存都会增加(大概10M左右),不会自动释放,最终导致内存溢出

2、  解决过程

经过网络的一番搜索,基本上给出的解决方案是清空iframe内容,并移除iframe节点。方法如下:

  var el = document.getElementById("IFrame1");

            if (el) {
                iframe = el.contentWindow;
                
                //清除文档
                el.src = 'about:blank';
                try {
                    iframe.document.write('');
                    iframe.document.clear();

                    CollectGarbage();
                } catch (e) { };

                //清除节点
               var _parentElement = el.parentNode;
                if (_parentElement) {
                    _parentElement.removeChild(el);
            
   }
            }



 

此方法在重新加载iframe时都会释放一定的内存(可以从进程中看到内存的变化),但加载后新增的内存比释放的内存要多很多,再多次加载后还是会导致内存溢出


还有的说是IE的bug,要用CollectGarbage()函数进行垃圾回收,但经过测试,此函数没有效果,内存溢出也不仅仅在IE存在,火狐和谷歌浏览器都有此现象,只是溢出程度较轻

 

    使用$.get替换iframe动态加载html,同样会导致内存溢出,看来不是iframe的原因

 $.get(src, function (data) { //初始將a.html include div#iframe
                    $("#center").empty();
                    $("#center").html(data);
                });

 

3、结论
  上述方法确实释放了一定的内存,但动态加载新的iframe后溢出了更多的内存,看来不仅仅是这方面的原因。后来经过调试代码,发现iframe页面引入了大量的js库,大概有几十种,如果删除一些内存溢出现象就会得到缓解,看来这就是原因。下一步准备对js库进行压缩和合并,看能否降低内存溢出。

posted @ 2014-04-25 19:12    阅读(6923)  评论(1编辑  收藏  举报