我正在尝试制作一个可以长期运行的比特币实时图表,使用 HighStocks 买卖两个数据集,问题是数据都是实时的,因此图表从没有数据开始,并且在这些条件下每 30 秒更新一次HighStocks 似乎并不总是很好玩
我创建了一个非常接近最终代码http://jsfiddle.net/v3z6T/2/的演示!增量设置为 1 秒以加快演示速度,此外,如果您将 adaptToUpdatedData 更改为 true,则在超过最低导航器间隔(30 秒)之前,这会产生显着的滞后效应,所以要小心
我希望导航器区域能够正常工作,但是如果我使用 adaptToUpdatedData 对其进行更新:true 图表在短时间内非常滞后,如果整个浏览器开始无响应并出现脚本延迟错误,我无法让它运行数小时
这对我来说很奇怪,例如以 30 秒的增量运行 8 小时只有 960 个数据点,不足以使用看起来的处理和内存
如果 adaptToUpdatedData 为 false,则图形会快得多,并且更新流正常,直到使用导航按钮之一,则图形不再“实时”,因为新更新超出范围,导航器也从 1970 年开始,而不是系列数据的开始
有谁知道触发导航器刷新的方法,或者当我添加一个新数据点时我可以调用的东西,这将保持导航器区域更新并将图表保持在最新的数据入口点,并且不会阻止页面及时呈现? 或使用 api 或数据的更好方法
希望这是有道理的这个图的整个想法是保持运行几天可能几周,以便随着数据的进展实时查看数据,我不能使用来自 HighStocks 的处理大型数据集示例代码,因为数据都是实时的,而不是提到我并没有真正使用大型数据集,只是不断缓慢的更新
$(function()
{
var curTime = $.now();
var chart = new Highcharts.StockChart({
chart: {
renderTo: 'chartContainer',
zoomType: 'x',
turboThreshold:100,
marker: {
enabled: false,
states: {
hover: {
enabled: true,
radius: 5
}
}
},
shadow: false
},
rangeSelector: {
buttons: [{
count: 30,
type: 'second',
text: '30S'
},{
count: 5,
type: 'minute',
text: '5M'
},{
count: 30,
type: 'minute',
text: '30M'
},{
count: 60,
type: 'minute',
text: '1H'
},{
count: 360,
type: 'minute',
text: '6H'
},{
count: 720,
type: 'minute',
text: '12H'
},{
count: 1,
type: 'day',
text: '1D'
},{
type: 'all',
text: 'All'
}],
inputEnabled: false
},
scrollbar: {
liveRedraw: false
},
title : {
text : 'Live Bitcoin Data'
},
exporting: {
enabled: true
},
navigation: {
buttonOptions: {
theme: {
'stroke-width': 1,
stroke: 'silver',
r: 0,
states: {
hover: {
fill: '#bada55'
},
select: {
stroke: '#039',
fill: '#bada55'
}
}
}
}
},
navigator : {
adaptToUpdatedData: false
},
yAxis: {
title: {
text: 'Price'
}
},
xAxis: {
type: 'datetime'
},
credits: {
enabled: false
},
series: [{
name: 'Sell',
color: '#00FF00',
pointStart: $.now(),
data : [],
tooltip: {
pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',
valueDecimals: 3,
valuePrefix:"$"
}
},{
name: 'Buy',
color: '#FF00FF',
pointStart: $.now(),
data : [],
tooltip: {
pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',
valueDecimals: 3,
valuePrefix:"$"
}
}]
});
setInterval(function() {
var chart = $('#chartContainer').highcharts();
var exchangeSellRate = Math.floor(Math.random()*30)+40;
var exchangeBuyRate = Math.floor(Math.random()*30)+40;
var x = $.now();
chart.series[0].addPoint([x,exchangeSellRate],false,false);
chart.series[1].addPoint([x,exchangeBuyRate],true,false);
}, 1000);
});