0

我做了一些研究(JavaScript 闭包和内存问题),但不完全了解 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 秒重复一次,用新的数据流更新表。

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

4

1 回答 1

0

在内部,getJSON这样做:

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

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

  1. jQuery
  2. jQuery.getJSON 回调
  3. jQuery.get 内部调用
  4. jQuery.get 内部回调

jQuery.get直接使用命名函数而不是匿名函数调用以避免闭包范围。

参考

于 2013-10-09T23:07:52.267 回答