我做了一些研究(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秒重复一次,用新的数据流更新表格。
感谢您的任何建议和帮助。
答案 0 :(得分:0)
在内部,getJSON执行此操作:
getJSON: function( url, data, callback ) {
return jQuery.get( url, data, callback, "json" );
}
在此行设置断点并查看函数范围。至少有:
使用命名函数而不是匿名函数直接调用jQuery.get
以避免闭包范围。
<强>参考强>