我已经做了一些研究(JavaScript closure and memory issues),但没有完全理解JS关闭以及它们如何影响内存泄漏。我正在进行更多的研究,因为我问这个问题试图更好地理解它,但是我想我会看看是否有人能够看到这个问题,并在我这样做时诊断问题。JQuery关闭内存泄漏
我在我的网站上使用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秒重复更新一个新的数据流表。
感谢您的任何建议和帮助。
我不认为这是一个封闭的问题。在您发布的代码中,我无法检测到关闭。 –
不相关,但您应该避免在此处使用setInterval b/c,它可能会在首次调用完成之前再次调用summaryCall。相反,尝试使用summaryCall完成后调用setTimeout。 – tkane2000
什么是'.tmpl()'?请链接到插件文档。它可能需要一些'destroy'调用来忘记以前附加的数据吗? – Bergi