我正在通过 ajax 调用在 div 中加载 .html 文件的全部数据。html 页面包含HTC(html 组件)与页面上的元素绑定所需的链接、脚本标签。
页面结构如下:
我正在使用 jQuery 加载这样的 HTML 页面
<body>
<input type="radio" class="openpage" id="0001">
<input type="radio" class="openpage" id="0002">
<input type="radio" class="openpage" id="0003">
<input type="radio" class="openpage" id="0004">
<div id="loadPage"></div>
<script>
$(document).ready(function(){
$(".openpage").on("click",function(){
$("#loadPage").load($(this).attr("id")+".html",function(){
//load a page with many htc bindings and external references
//trigger some onload functions which are not called automatically in IE
//confirmed this is in chrome
});
});
})
</script>
</body>
这样做的问题是 IE 内存不断堆积,因为单击单选按钮以加载页面,并且在加载几个页面后浏览器停止响应。我可以在任务管理器中看到内存在增加。
该应用程序在 IE 5、6、7、8、9 和 IE10 的怪癖模式下运行。我试图在 chrome 中复制相同的场景,它显示没有问题。所以我认为这是 IE 特定的内存管理相关问题。
我读了很多文章,但我不相信。我也在 SO 上读过这个问题,但它建议只加载页面的一部分,这在我的情况下是不可接受的。这篇文章似乎相关,但我不确定究竟是什么导致内存泄漏我的情况。
上面的整个主体实际上是在一个 iframe中。因此,作为一种解决方法,我在单击 8 次单选按钮后重新加载包含主页的框架。我试图在每次加载之前清除东西:
$("#loadPages").empty();
$("#loadPages").find("*").off();
$.ajaxSetup({ cache: false });
但是没有任何效果。所以我怀疑jquery是否可以清除通过htc注册的事件。
1)如果你能解释一下这种情况下内存泄漏的原因,那就太好了。
2)通常为什么加载许多资源后浏览器会发生内存泄漏。这在现代浏览器中不会发生,但为什么会在旧浏览器中发生。
3)有没有办法在不刷新框架的情况下释放浏览器内存。
4)有没有办法检查浏览器内存中的所有资源。