【发布时间】:2013-03-14 18:03:12
【问题描述】:
我试图弄清楚为什么 IE 在将 AJAX 请求的 HTML 页面包装到 jQuery 对象中进行处理时会泄漏内存。用户可能会访问页面并让它停留几分钟或几小时,因此页面使用 jQuery 的 ajax 方法每分钟几次获取新数据,然后我将页面的重要部分替换为新的预渲染数据。
此时,我已将其范围缩小为一次调用 - 当调用 $(data) 来包装 HTML 字符串时,内存会出现一点峰值,并且似乎从未被垃圾回收。随着时间的推移,使用了数百 MB,我不得不重新加载页面或重新启动 IE。
This fiddle 能够重现该问题。它使用 AJAX 请求页面,然后在紧密循环中调用$(data) 以夸大泄漏。 Chrome 和 Firefox 似乎都像我预期的那样做出反应(内存被回收),但 IE 表现不佳。惊喜。
使用 Process Explorer,我发现在运行上述小提琴两次后内存消耗急剧增加。
我目前在标准模式下使用 IE9。
为什么会这样?有解决办法吗?
更新
这是一个fiddle,它在不使用 AJAX 的情况下演示了该问题。
【问题讨论】:
-
我看到内存增加了,但很快就被释放了。即使增加到 10000 次迭代也有相同的结果。
-
@KevinB 我相信您在 IE10 标准下对其进行了测试,因为我做了同样的事情并看到了资源被释放,但是正如 Pwninstein 在 IE9 上提到的完全不同的故事,我做了一次并看到了我的资源从 50MB 到 350MB 并留在那里......
-
我这台机器上没有 IE10。 Windows 7 IE9
-
@KevinB 什么浏览器/操作系统?我可以用 Win7 (x64) + IE9.0.8112 (x86) 的小提琴来重现它
-
我确实看到了泄漏。让我们缩小一点。如果你简单地使用foobar,就没有泄漏。我们需要缩小范围,找出导致它的确切原因,排除 ajax 请求。
标签: jquery ajax internet-explorer memory-leaks