Mar*_*ter 11 ajax jquery internet-explorer memory-leaks
我想弄清楚为什么IE在jQuery对象中包装AJAX请求的HTML页面进行处理时泄漏内存.用户可以访问页面并让它静置几分钟或几小时,因此页面ajax每分钟使用几次jQuery 方法来获取新数据,然后我用新的预渲染数据替换页面的重要部分.
在这一点上,我已经将它缩小到一个单独的调用 - 当$(data)被调用来包装HTML字符串,内存峰值一点,并且似乎从来没有被垃圾收集.随着时间的推移,使用了数百MB,我不得不重新加载页面或重新启动IE.
这个小提琴能够重现这个问题.它使用AJAX来请求页面,然后$(data)在紧密循环中调用以夸大泄漏.Chrome和Firefox似乎都像我期望的那样做出反应(内存被回收),但IE表现得很糟糕.惊喜.
使用Process Explorer,我看到在运行上述小提琴后两次内存消耗大幅增加.

我目前正在标准模式下使用IE9.
为什么会这样?有解决方法吗?
这是一个小提琴,演示了不使用AJAX的问题.
我看到了你所看到的,当我更改代码以在每次成功调用时重新分配函数时,神奇的是它没有泄漏(至少在我的环境中)。
所以,我的解决方案很愚蠢,但它似乎对我有用。对你起作用吗?
$(function(){
$.ajaxSetup({ cache: false });
$('#go').click(performCall);
});
function performCall() {
$('#timestamp').text('Working...');
$.ajax({
url: 'http://fiddle.jshell.net/',
success: function(){
var func = function(data, textStatus, jqXHR) {
$('#timestamp').text('Done at ' + new Date());
for(var x = 0; x < 100; x++) {
var $a = $(data);
}
};
func();
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |