JQuery Closure内存泄漏

时间:2012-09-18 18:14:23

标签: javascript jquery internet-explorer memory-leaks closures

我做了一些研究(JavaScript closure and memory issues),但没有完全理解JS闭包以及它们如何影响内存泄漏。我正在做更多的研究,因为我正在问这个问题,试图更好地理解它,但我想我会看到是否有人可以看到这个并在我做的时候诊断问题。

我在我的网站上使用jQuery更新表格中的数据。它在使用时会缓慢地在内存中爬行,但最大的问题是当用户刷新页面时,它会跳跃大约3MB。在浏览器中打开其他选项卡时会发生类似问题,使用几个小时后可能会使用200MB内存。通过我的阅读,我认为我已经将问题缩小到我的代码中的闭包问题。这是完成大部分工作的主要部分。

$(document).ready(function(){
setDateSelect();
var url_fm_smry=url_fm_smry_base + url_fm_currdate2 + url_region;
$.getJSON(url_fm_smry,function(data)
{
    $('#summaryContainer').empty();
    $('#summaryTblTmpl')                 // Select the template.
    .tmpl(data.d.results)               // Bind it to the data.
    .appendTo('#summaryContainer');     // Render the output.
});

$.getJSON(url_fm_meta + url_region,function(data)
{
    $('#runDTM').empty();
    $('#runDTMTmpl')                     // Select the template.
    .tmpl(data.d.results)               // Bind it to the data.
    .appendTo('#runDTM');               // Render the output.
});

setInterval(summaryCall,5000);});

setDateSelect根据今天的日期加载一个包含可变日期的下拉菜单。

url_fm_smry是一个局部变量,由3个全局变量组成,其他函数需要访问它们。

summaryCall只做上面的确切事情,每隔5秒重复一次,用新的数据流更新表格。

感谢您的任何建议和帮助。

1 个答案:

答案 0 :(得分:0)

在内部,getJSON执行此操作:

getJSON: function( url, data, callback ) { 
    return jQuery.get( url, data, callback, "json" );
}

在此行设置断点并查看函数范围。至少有:

  1. 的jQuery
  2. jQuery.getJSON回调
  3. jQuery.get内部调用
  4. jQuery.get内部回调
  5. 使用命名函数而不是匿名函数直接调用jQuery.get以避免闭包范围。

    <强>参考