2012-12-13 50 views
1

我正在创建一个基于javascript的html仪表板。为了刷新仪表盘图表中的值我写了下面的代码:setInterval()方法中的内存泄漏

var chart, options; 

function loadDynamicData() {    
    var data = window.parent.getDynamicData(); 
    var dataArray = data.split(','); 

    for(var i = 0; i < chartData.length; i++) { 
     chartData[i].data.pop(); 
     chartData[i].data.push(parseInt(dataArray[i],10)); 
    } 
} 

$(document).ready(function() { 
    //initialize options here 
    setInterval(function() { 
     loadDynamicValues(); // loads dynamic values through ajax 
          // and updates options 
     chart = new Highcharts.Chart(options); 
    }, 300000); 
}); 

但问题是,当我在浏览器中很长一段时间(约1小时)运行此,所使用的内存去并且浏览器变得无法响应。如果我删除setInterval()方法并运行一次内部的代码,那么没有问题。

这里有什么问题?

+2

而且,Highchaets.Chart构造函数是做什么的?一般来说,如果我们看到'setInterval()'中运行的所有代码,我们只能回答这个问题。 – jfriend00

+0

@ShivanRaptor我编辑了这篇文章。 – manas

+0

@ jfriend00它包含在由HighCharts提供的HighCharts.js文件中。它不可能给出所有'Highcharts.Chart()'在这里做的事情。 – manas

回答

3

请在创建新图表之前做一个chart.destroy()。

if (chart) chart.destroy;

这是测试的链接。 http://www.highcharts.com/tests/?file=memory-chart-destroy

+0

当图表首次被创建时,它会给出一个错误:''图表'为空或不是对象' – manas

+0

@silent_warrior:你的意思是第一个图表对象没有被破坏吗? – closure

+0

对不起,如果忘记提及您应该检查未初始化的变量!写如图(chart)chart.destroy; – closure