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

  • 相关阅读:
    Nginx配置文件nginx.conf中文详解(转)
    windows Nginx基本使用方法
    phpstorm 找到文件修改历史
    微信小程序模拟点击出现问题解决方法
    设置头像、商品、轮播图为背景图时需要的css
    div左右居中css
    自定义方形复选框
    css 调转180度:transform: rotate(180deg);
    js字符串转数字(小数),数字转字符串
    腾讯地图key秘钥
  • 原文地址:https://www.cnblogs.com/gossip/p/3689604.html
Copyright © 2020-2023  润新知