zoukankan      html  css  js  c++  java
  • 添加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库进行压缩和合并,看能否降低内存溢出。

  • 相关阅读:
    Java之设计模式详解 (转)
    强引用,软引用,弱引用和虚引用总结
    Java基础知识总结
    深入理解Java的接口和抽象类
    Android Studio高级配置
    JS中innerHTML 和innerText和value的区别
    Prompt isNaN 数组 function DOM window.open/close/location/history
    WebForm组合查询
    WebForm分页浏览
    WebForm上传文件FileUpload
  • 原文地址:https://www.cnblogs.com/gossip/p/3689604.html
Copyright © 2011-2022 走看看