我有一个内存泄漏的问题我试图在webapp中使用jQuery-1.7.1进行跟踪。该应用程序向服务器发出POST请求,以使用复杂的表单检索一些搜索结果。在我删除了大部分js代码后(出于泄漏跟踪目的),裸函数看起来像这样:
$(function() {
// bind the search action
$('#search-button').unbind('click').click(function() { doSearch(); });
});
function doSearch() {
// get the query string from the search form
var query = $('#search-form').serialize();
// perform search and render results
$.post('/search', query, function(data){
// nothing here now (trying to debug)
data = null;
}, 'json');
query = null;
}
我可以看到,每次点击搜索按钮时内存消耗都会累积大约1MB,即使实际上它没有任何效果。这是一个真正的问题,因为应用程序具有“自动刷新”搜索模式,其中该调用大约每分钟一次 - 因此如果保持活动状态,它将在一段时间后阻塞浏览器。
从服务器返回的data
对象包含一个成功/失败的布尔值,以及一个要呈现的html字符串(如果成功则相当大,大约1Mb左右):
data = {
success : true/false,
html : "<div id='results'>.....</div>"
}
由于我要在回调的实际主体中执行zilch,我怀疑这个data
不会从范围中消除并在内存中聚合。我已经尝试在回调结束时将其设置为null
,但这并没有成功。这是在 chrome 和 firefox (两者的早期和最新版本)上测试的。我错过了什么吗?任何想法都会有所帮助 - 谢谢。
答案 0 :(得分:0)
实际上没有可靠的方法强制javascript进行垃圾回收。
您可以尝试添加此行以及用于释放内存的其他行:
query = null;
delete query;
答案 1 :(得分:-1)
JSON格式需要为每个键添加引号
尝试
data = {
"success" : true/false,
"html" : "<div id='results'>.....</div>"
}
我说的是服务器端字符串输出