4

我正在开发一个在 iframe 中呈现内容的嵌入式系统。它使用signalR(基于ajax)和jquery。随着时间的流逝,浏览器变得越来越慢,内存使用量越来越高。所以我希望消除所有潜在的内存问题。

当新页面加载到 iframe 中时,我附加了 click 和 focus 事件处理程序。

就在要替换 iframe 页面之前,我取消附加它们。

但是,如果我检查 $.cache(在使用 firefox 的 PC 上进行测试,因此与我的真实系统不完全相同)它仍然显示 $.cache 每次重新加载 iframe 时都会获得越来越多的元素。

这是做事的正确方法吗?还有什么我可以尝试的吗?为什么 $.cache 增长?

(如果您有兴趣,我正在使用带有 Midori 浏览器的树莓派(运行 linux),尽管我可以选择其他(主要是 web-kit)浏览器)。

我用来更改 iframe 内容的 Javascript...

hubProxy.client.loadPage = function (pageFilename, pageType) {
    frameNode = $("#myIframe").contents();
    $("a", frameNode).off();  
    $("#myIframe")[0].src = pageFilename;
};
4

1 回答 1

1

编写一个包装器 div 来保存您的 iframe 容器,例如...

<div id="myIframeWrapper"></div>

现在您可以在前一个 iframe 页面之后进行清理,这可以通过完全清除 DOM 中与前一个 iframe 相关的所有内容来完成,然后在调用 loadPage 函数时使用构造函数创建一个新的 iframe。

hubProxy.client.loadPage = function (pageFilename, pageType) {

    var myNewIframe = '<iframe id="myIframe" src="' + pageFilename + '"></iframe>';

    // Remove old iframe from the DOM and replace with new iframe
    if ($("#myIframe")) {
        $("#myIframeWrapper").empty().append( myNewIframe );
    }

    var frameNode = $("#myIframe").contents();
    $("a", frameNode).off();
};

您会注意到分配 iframe 源的原始行已被删除,因为它已在新构造函数中说明。这还具有能够使用构造函数添加其他 iframe 属性的好处,例如 iframe 大小等。

于 2013-09-06T09:42:48.260 回答