我正在开发一个在 iframe 中呈现内容的嵌入式系统。它使用signalR(基于ajax)和jquery。随着时间的流逝,浏览器变得越来越慢,内存使用量也越来越高。所以我希望消除所有潜在的内存问题。
当新页面加载到 iframe 中时,我附加单击和焦点事件处理程序。
就在要替换 iframe 页面之前,我取消附加它们。
但是,如果我检查 $.cache(在使用 Firefox 的 PC 上进行测试时,因此与我的真实系统不完全相同),它仍然显示 $.cache 每次重新加载 iframe 时都会获得越来越多的元素。
这是正确的做事方式吗?还有什么我可以尝试的吗?为什么 $.cache 不断增长?
(如果您有兴趣,我正在使用带有 Midori 浏览器的树莓派(运行 Linux),尽管我可以选择其他(主要是 Web-kit)浏览器)。
我用 Javascript 来更改 iframe 内容......
hubProxy.client.loadPage = function (pageFilename, pageType) {
frameNode = $("#myIframe").contents();
$("a", frameNode).off();
$("#myIframe")[0].src = pageFilename;
};
编写一个包装 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 大小等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)