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

  • 相关阅读:
    作业2 身份认证(正心13)
    ubuntu16内核升级过程遇到的问题
    「」
    「loj
    「一个经典问题的另一个推导方法」
    「loj
    「XXI Opencup GP of Tokyo」 Count Min Ratio
    「codeforces
    「codeforces
    「Dominator Tree」
  • 原文地址:https://www.cnblogs.com/gossip/p/3689604.html
Copyright © 2011-2022 走看看