프로젝트의 경우 jqPlot을 사용하여 라이브 업데이트 차트를 구현해야합니다.jqPlot을 사용한 라이브 차트 : 성능 문제
다음 jsFiddle를 참조하십시오 http://jsfiddle.net/fracu/HrZcj/242/ 나는 성공적으로 일을 관리
(편의상의 값은 무작위로 생성),하지만 난 성능 문제에 봉착 : 차트 일부 분 후 브라우저의 실행은 차트의 탭을 닫을 때까지 느리게 시작됩니다. (파이어 폭스와 크롬으로 테스트 됨)
나는 특별한 일을하지 않으므로 차트의 값이 저장되는 배열로 매초마다 차트를 리포팅하기 때문에 문제가 어디 있는지 알 수 없다.
내가 가지고있는 또 다른 문제는 x 축의 크기를 조정할 때 "틱"이 차트의 왼쪽에 위치하며 축을 따라 똑같이 분산되지 않는다는 것입니다.
제발 내가 할 수있는 일에 대한 단서를 주시겠습니까?
미리 감사드립니다.
자바 스크립트 :
var plot1 = $.jqplot('chart1', [new Array(1)], {
series: [{yaxis:'y2axis',showMarker:true,fill:false,neighborThreshold:3,rendererOptions:{smooth:true}}],
axes: {
xaxis: {renderer: $.jqplot.DateAxisRenderer,tickOptions:{formatString:'%H:%M:%S'}},
y2axis:{tickOptions:{formatString:'%.2f'}}
},
});
var myData = [], x, y, samples = 0, secsBuffer = 60, refreshInterval = 1, sampleWindow = secsBuffer/refreshInterval;
$("#refreshInterval").change(function() {
clearInterval(cInt);
cInt = window.setInterval(updateSeries, $("#refreshInterval").val() * 1000);
refreshInterval = $("#refreshInterval").val();
sampleWindow = secsBuffer/refreshInterval;
});
$("#secsBuffer").change(function() {
secsBuffer = $("#secsBuffer").val();
sampleWindow = secsBuffer/refreshInterval;
});
function updateSeries() {
if (samples > sampleWindow) {
var diff = samples - sampleWindow;
myData.splice(0, diff);
samples -= diff;
}
x = (new Date()).getTime();
y = Math.floor(Math.random() * 100);
myData.push([x, y]);
plot1.resetAxesScale();
plot1.axes.xaxis.numberTicks = 15;
plot1.axes.y2axis.numberTicks = 15;
plot1.axes.xaxis.min = x - (secsBuffer * 1000);
plot1.axes.xaxis.max = x;
plot1.series[0].data = myData;
plot1.replot();
samples++;
}
cInt = window.setInterval(updateSeries, refreshInterval * 1000);
답장을 보내 주셔서 감사합니다. 이미 내 코드에서 제안하는 것과 같은 일을하고 있습니다. 그러나 myData.splice (0, diff)를 사용하는 myData.shift() 대신에 diff는 샘플 윈도우를 초과 한 배열의 데이터입니다. – Fracu
죄송합니다. 그건 내 실수였다. 나는 그것을 보지 못했다. – GayashanNA