使用Highcharts / Highstock(异步加载)的大数据量

时间:2016-12-31 12:24:40

标签: javascript python highcharts lazy-loading bigdata

由于我的数据量每天变大(现在>一周内有200万个MySQL行),因此图表加载时速度很慢。我想异步加载方法是正确的方法(http://www.highcharts.com/stock/demo/lazy-loading)。 我试图实现它,但它不起作用。到目前为止,我可以通过URL参数提供我的数据,例如http://www.url.de/data?start=1482848100&end=1483107000,但在示例代码中我无法理解几件事:

  • 如果在导航器中选择了所有数据的句点,则所有数据都是 由我的服务器提供并由图表加载。所以和我一样 我现在做的没有延迟加载。那差别呢?
  • 为什么第二个getJSON()方法没有任何URL参数 上面提到的示例代码?它的以下URL是空的。我该怎么做 需要它吗?我不明白: https://www.highcharts.com/samples/data/from-sql.php?callback=

加载数据的方法更好?: 这一个:chart.series[0].setData(data); 或者我到目前为止使用的代码:

var ohlc = [],
volume = [],
dataLength = data.length,
i = 0;
for (i; i < dataLength; i += 1) {
ohlc.push([
data[i]['0'], // date
data[i]['1_x'], // open
data[i]['2_x'], // high
data[i]['3'], // low
data[i]['4'] // close  ]);

1 个答案:

答案 0 :(得分:2)

延迟加载演示背后的想法是你只获取必要的点数,所以如果你的数据包含1.7百万点,你就不会在图表上加载这么多点。

  • 基于Highcharts演示。您没有加载过多的点,而是要求已经分组的点数,每日点数为170万,您将导航器设置为“全部”。 (时间范围1998 - 2011),您不需要每日数据,因此响应将包括每月积分。收益是:获取较少量的数据(12 * 14 = 168而不是1.7百万),避免客户端的繁重处理数据(处理,分组等) - &gt;降低客户端的内存和CPU使用率,加快图表加载速度。

  • 数据请求采用JSONP格式。有关其优势的更多信息here。实际上,url有3个参数 - 强制conv和可选callback=? - 表示点时间范围及其密度。第一个请求没有启动/停止参数,因为服务器已经设置了一些默认值。移动导航器后,会请求更详细的点并将其加载到图表中。这是延迟加载的缺点 - 移动导航器后,您的请求需要一组新数据 - &gt;由于网络故障导致频繁的数据请求和中断。

您上一个问题的答案取决于您是否拥有适当格式的数据,或者您不知道。如果这样做,您可以避免在客户端循环数据并直接将其加载到图表中。如果格式不正确,则必须预处理数据,以便图表能够正确显示它们。理想情况下,您希望数据在请求后以正确的格式显示 - 如果可以,您应该在服务器端执行此操作。