解决$.post中的Javascript/jQuery内存泄漏问题
我在使用jQuery-1.7.1在一个webapp中试图跟踪内存泄漏时遇到了一个问题。该应用程序正在向服务器发出POST请求,以使用复杂的表单检索一些搜索结果。出于泄漏跟踪的目的,我删除了大部分js代码后,裸函数如下所示:解决$.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
$(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;