解决$ .post中的Javascript / jQuery内存泄漏问题

时间:2011-12-12 09:35:35

标签: javascript jquery performance memory-leaks

我有一个内存泄漏的问题我试图在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 (两者的早期和最新版本)上测试的。我错过了什么吗?任何想法都会有所帮助 - 谢谢。

2 个答案:

答案 0 :(得分:0)

实际上没有可靠的方法强制javascript进行垃圾回收。

您可以尝试添加此行以及用于释放内存的其他行:

query = null;
delete query;

答案 1 :(得分:-1)

JSON格式需要为每个键添加引号

尝试

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

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