解决在$ .post中使用Javascript/jQuery内存泄漏问题
我有一个内存泄漏问题,我试图使用jQuery-1.7.1在webapp中跟踪。该应用正在向服务器发送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(两者的更早版本和最新版本)上进行了测试。我错过了什么吗?任何想法都会有帮助 - 谢谢。
JSON格式需要有引号为每个键
尝试
data = {
"success" : true/false,
"html" : "<div id='results'>.....</div>"
}
我说的是服务器端的字符串输出
在这种情况下,服务器是基于python的,并返回格式正确的json对象。我只是在剪报:)削减角落 – sa125
这似乎没有解决内存问题... – benekastah
实在没有可靠的方法来强制的JavaScript做垃圾采集。
你可以尝试加入这一行一起旨在释放内存的其他线路:
query = null;
delete query;
是什么浏览器您使用?这个'doSearch'函数是如何调用的? –
你如何检索内存消耗?内存也可以用于浏览器缓存,在这种情况下,它不会将其称为内存泄漏。您可以发送一些nocache标题来避免这种情况。 –
@DarinDimitrov我用过Firefox/Chrome。 'doSearch()'函数可以通过一个按钮或通过一个每隔60秒左右调用一次的设置 - 忘记间隔来调用。 – sa125