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

Resolving Javascript/jQuery memory leak issues in $.post

本文关键字:jQuery 内存 泄漏 问题 Javascript post 中的 解决      更新时间:2023-09-26

我有一个内存泄漏的问题,我试图在一个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>"
}

由于我在回调的实际主体中没有执行任何操作,我怀疑这个data没有从作用域中消除,而是聚集在内存中。我试过在回调结束时将其设置为null,但这并没有奏效。这在chromefirefox(两者的早期和最新版本)上进行了测试。我错过什么了吗?有什么想法会有帮助的,谢谢。

确实没有可靠的方法来强制javascript进行垃圾收集。

您可以尝试将这一行添加到另一行中以释放内存:

query = null;
delete query;

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

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

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