2012-12-13 3 views
1

자바 스크립트 기반 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

처음으로 차트를 만들 때 오류가 발생합니다 :''chart '가 null이거나 객체가 아닙니다' – manas

+0

@silent_warrior : 첫 번째 차트 객체가 파괴되지 않았다는 것을 의미 했습니까? – closure

+0

죄송합니다. 초기화되지 않은 변수를 확인해야한다는 점을 잊어 버린 경우! if (chart)처럼 작성하십시오. chart.destroy; – closure

관련 문제