2011-12-12 33 views
1

我有一个内存泄漏问题,我试图使用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,但这并没有办法。这已在chromefirefox(两者的更早版本和最新版本)上进行了测试。我错过了什么吗?任何想法都会有帮助 - 谢谢。

+0

是什么浏览器您使用?这个'doSearch'函数是如何调用的? –

+0

你如何检索内存消耗?内存也可以用于浏览器缓存,在这种情况下,它不会将其称为内存泄漏。您可以发送一些nocache标题来避免这种情况。 –

+0

@DarinDimitrov我用过Firefox/Chrome。 'doSearch()'函数可以通过一个按钮或通过一个每隔60秒左右调用一次的设置 - 忘记间隔来调用。 – sa125

回答

-1

JSON格式需要有引号为每个键

尝试

data = { 
    "success" : true/false, 
    "html" : "<div id='results'>.....</div>" 
} 

我说的是服务器端的字符串输出

+0

在这种情况下,服务器是基于python的,并返回格式正确的json对象。我只是在剪报:)削减角落 – sa125

+0

这似乎没有解决内存问题... – benekastah

0

实在没有可靠的方法来强制的JavaScript做垃圾采集。

你可以尝试加入这一行一起旨在释放内存的其他线路:

query = null; 
delete query;