在IE7中从内存onunload / onbeforeunload中删除iframe内容

时间:2013-07-23 14:54:29

标签: javascript memory iframe memory-leaks

我有一个iframe通过ajax加载到我的页面中。在每个间隔上,新的iframe会覆盖旧的iframe。出于某种原因,iframe内容在IE7中保留在我的内存中。我确定它是iframe的内容,因为当我将一个小网站加载到iframe时,内存大小会缓慢上升。当我将大型网站加载到框架中时,每次刷新都会更快。

我希望每次调用间隔时都清除内存中的iframe内容。我尝试了下面的脚本(这个用于window.onunload - 我也尝试过每个间隔)但两个都不起作用并将iframe内容保留在我的内存中,直到我结束浏览器会话。

// Remove iframecontents
window.onunload = function() {
    $('iframe').each(function(i, frame) {
        frameDoc = frame.contentDocument || frame.contentWindow.document;
        frameDoc.removeChild(frameDoc.documentElement);
    });
}

// Remove iframe with jQuery
window.onunload = function() {
    $('iframe').each(function(i, frame) {
        $(frame).remove();
    });
}

如果有办法从内存中删除iframe中的内容而不必重新启动浏览器?

这些解决方案似乎也不起作用: Iframes and memory management in Javascript jQuery DOMWindow script doesn't release memory

1 个答案:

答案 0 :(得分:1)

我从Windows 7开始使用IE的经验一直是你无法明确强制它进行垃圾收集。它与Windows动态内存管理一起使用。如果您的系统整体内存不足,那么IE将开始更频繁地释放内存。如果你有大量的可用内存,它将一直持续到你杀死进程为止。

然而,确实每个页面(或iframe)确实吸收了一定数量的内存,并且只有在您离开时,IE才会卸载大部分内存。这对于SPA应用程序(单页面应用程序)来说是一个糟糕的情况。因此,首先要明智地编写代码来降低内存使用率,这一点更为重要。