我已经在这个问题上苦苦挣扎了 3 天,希望有人能提供一些我还没有遇到的信息来帮助我(我很绝望!)。提供一些上下文:
浏览器:IE9.0.8112.16421(64位);jQuery 版本:2.0.2
本质上,我正在做的是进行一个简单的 ajax 调用并检索一些信息,然后我将这些信息通过成功处理程序插入到元素中。相关代码行如下所示:
var onLoadViewGroupSuccess = function(data) {
var target = $("#viewGroupContent");
//for(var i=0;i<1000;i++) {
target.empty().html(data);
//}
}
目标对应于以下 html 标记:
<tr id="viewGroupContent">...</tr>
上面注释掉的 for 循环旨在放大问题(通过单个事件单击触发器很难检测到)。基本上,当循环到位时,单次调用的内存从 46MB 变为 ~113MB。
随后的调用表现出相同的行为,内存不断增长。我最初认为这是一个我未能清理的事件处理程序的问题,但排除了这一点,因为我注释掉了我几乎所有的 javascript 逻辑,所以上面的内容基本上就是所有内容(即没有绑定事件处理程序,没有自定义对象或函数调用) - 即不是关闭问题。
将 for 循环移到 ajax 调用之外(因此进行 1000 次 ajax 调用)会导致相同的内存配置文件(因此排除了任何模糊的 ajax 内存泄漏)。我插入的内容是包含大量内容的 TD 标记(即您可以想到的每个 HTML 标记的实例,包括图像),因此想知道我插入的内容是否以某种方式导致泄漏。
我已经阅读了一些关于 IE 自身清理能力的有趣博客文章,包括以下似乎最有希望的文章 ( http://com.hemiola.com/2009/11/23/memory-leaks-in-ie8/ )。不幸的是,到目前为止还没有解决方案或解决方法。
我很茫然,因为我已经将我的应用程序剥离到了最基本的部分,而你无能为力$(...).empty().html(...)
。内存泄漏缓慢但持久....
另外,作为一个仅供参考,我尝试了使用 innerHTML 的非 jQuery 解决方案,DOM 方法来删除表格行并重建它,然后将 ajax 内容插入表格单元格,将丢弃的内容移动到垃圾箱 DIV,然后调用 innerHTML ,一切都无济于事,而且在许多情况下使泄漏变得更糟......