Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决$.post中的Javascript/jQuery内存泄漏问题_Javascript_Jquery_Performance_Memory Leaks - Fatal编程技术网

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

解决$.post中的Javascript/jQuery内存泄漏问题,javascript,jquery,performance,memory-leaks,Javascript,Jquery,Performance,Memory Leaks,我在使用jQuery-1.7.1在一个webapp中试图跟踪内存泄漏时遇到了一个问题。该应用程序正在向服务器发出POST请求,以使用复杂的表单检索一些搜索结果。出于泄漏跟踪的目的,我删除了大部分js代码后,裸函数如下所示: $(function() { // bind the search action $('#search-button').unbind('click').click(function() { doSearch(); }); }); function doSearch

我在使用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,尽管实际上它什么也不做。这是一个真正的问题,因为该应用程序有一个自动刷新搜索模式,在该模式下,该呼叫大约每分钟进行一次,因此如果保持活动状态,它将在一段时间后阻塞浏览器

从服务器返回的数据对象包含一个表示成功/失败的布尔值,以及一个html字符串,如果成功,该字符串将非常大,大约1Mb:

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

因为我要在回调的实际主体中执行zilch,所以我怀疑这些数据没有从范围中消除,而是聚合在内存中。我曾尝试在回调结束时将其设置为null,但没有成功。这在chrome和firefox的早期和最新版本上都进行了测试。我错过什么了吗?任何想法都会有帮助-谢谢。

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

试一试


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

实际上没有可靠的方法强制javascript执行垃圾收集

您可以尝试将此行和另一行一起添加以释放内存:

query = null;
delete query;

你用的是什么浏览器?这个doSearch函数是如何调用的?如何检索内存消耗?内存也可以用于浏览器缓存,在这种情况下,它不会称之为内存泄漏。您可以发送一些nocache头来避免这种情况。@DarinDimitrov我使用过Firefox/Chrome。doSearch函数可以通过按钮调用,也可以通过每隔60秒左右调用一次的set-and-forget间隔来调用。@Dr.Molle我使用了一些跟踪-linux上的htop和windows上的perfmon+任务管理器。在这两个方面,我看到该进程的内存消耗在每次请求时都会显著增加。如何确定它是缓存还是泄漏?谢谢。在本例中,服务器基于python,并返回正确格式的json对象。我只是在写作中抄近路:
query = null;
delete query;