我真的不知道该怎么办了。我正在我的网络应用程序中开发一个 highstock 图表。数据已正确加载,但一旦我在图表选项中启用 zoomType : 'x',我开始在缩放时出现错误。
我无法正确重现错误。但是,当我尝试沿 xAxis 缩放并选择图表中显示的几乎每个点时,它运行和缩放都很好。但是当我选择一小组点时,浏览器会停止,直到 chrome 关闭。在任务管理器中,我看到内存使用量高达 1GB。我在其他浏览器中测试了它,并得到了同样的错误。我不处理 xAxis 上的事件——它只是放大和缩小。highstockData.jsp 只是一个带有许多时间戳的文件。
tldr:当我选择很多点时,一切正常。当我只选择几个点时,浏览器崩溃并且内存开始泄漏
更新:当我启用 rangeSelector 并单击 1m 时,它也开始建立内存。但是当我再等几分钟(最多 5 分钟)时,它会加载并且内存再次开始下降。
Update2: 我尝试对其进行更多调试。等了将近 5 分钟后,我在 chrome 中截取了 cpu 使用配置文件。http://i.imgur.com/xmqhI.png它说 getnonlineartimeticks 使用了近 80% 的 cpu 使用率。
解决方案:仅供参考。解决了。问题是
xAxis : {
tickInterval : 4
},
强制 xAxis 在一个小的 tickInterval 上导致了所有的麻烦......
这是一些代码:
function initHighstock() {
options = {
chart : {
zoomType : 'x',
renderTo : 'highstockContainer'
},
plotOptions : {
series : {
lineWidth : 0,
marker : {
enabled : true,
radius : 3
},
}
},
navigator : {
enabled : false
},
yAxis : {
min : 0,
max : 24,
tickInterval : 4
},
xAxis : {
tickInterval : 4
},
tooltip : {
shared : false,
formatter : function() {
return '<b>' + Highcharts.dateFormat('%A, %b %e, %Y', this.x) + '</b>' + '<br/>' + 'Time of day: '
+ this.y;
}
},
rangeSelector : {
enabled : true
},
title : {
text : 'Diary'
},
series : []
};
$.get('highstockData.jsp', function(data) {
// Split the lines
var lines = data.split(';');
var series = {
data : []
};
for ( var k = 0; k < lines.length; k++) {
if (lines[k].length > 0) {
var line = lines[k];
var items = line.split(',');
var myDate = new Date(Math.round(items[0] * 1000));
series.data.push([ parseInt(Math.round(myDate.getTime())), parseInt(Math.round(myDate.getHours())) ]);
myDate = null;
}
}
series.data.sort(function(x, y) {
return x[0] - y[0];
});
options.series.push(series);
// Create the chart
var chart1 = new Highcharts.StockChart(options);
chart1.redraw();
});
};