关于ie下iframe内存泄露


<!–markdown–>契机

近日,手头上负责的一个项目被报告在IE下会产生严重的内存泄露,在对某一复杂表单进行若干次操作后(大约十次左右)IE进程的内存占用就达到了600M之多,恐怖之极。

过程

由于泄露页面表单中使用了extjs,第一时间怀疑是否是extjs代码内存没有及时释放。但是这个设想很快就被我否定了,因为我发现在发生泄露后不管我怎么跳转页面、重登,甚至关闭ie,进程还是占用着内存。

基于IE的CollectGarbage机制,我们知道,当对象不在他当前上下文的时候,即会失效。
<p><!–more–></p>
本着70%的问题别人都是已经碰到过的原则,我找到了神奇海螺。最后我发现,<font color='red'>IE并没有办法正确的释放iframe所占用的内存</font>,一旦碰到这种iframe里藏着个怪兽的情况下。内存泄露将会非常严重。

解决方案

手工释放iframe的内存。

iframe_child=obj.getElementsByTagName(&#39;iframe&#39;)[0];
    //清空iframe 减轻ie下内存泄露
    if(iframe_child){
        iframe_child.src=&#39;about:blank&#39;;
        iframe_child.contentWindow.document.write(&#39;&#39;);
        iframe_child.contentWindow.document.clear();
        iframe_child.contentWindow.document.close();
        iframe_child.removeNode(true);
    }
    setTimeout(function(){

        obj.wintitle.removeNode(true) ;
        obj.removeNode(true) ;
        obj = null;


    },200);
    if(CollectGarbage){//IE强制回收内存
    CollectGarbage();
    }