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库进行压缩和合并,看能否降低内存溢出。

  • 相关阅读:
    DTD
    JVM-学习笔记持续更新
    MySQL用limit代替SQL Server :top
    正则表达式&&Java文本复杂操作
    JVM核心——JVM运行和类加载全过程
    java动态编译——tools.jar问题
    java-基础
    github for windows 简单的客户端托管代码
    【javascript dom读书笔记】 第九章 CSS-DOM
    【精通css读书笔记】 第八章 布局
  • 原文地址:https://www.cnblogs.com/gossip/p/3689604.html
Copyright © 2011-2022 走看看