添加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庫進行壓縮和合並,看能否降低內存溢出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM