2016-12-31 101 views
0

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

  • 如果所有的数据的时间段选择在导航器,那么所有的数据由我的服务器提供,并加载由图表 。所以它和我的 一样,现在我没有延迟加载。那么有什么区别?
  • 为什么在 上面提到的示例代码中有第二个没有任何URL参数的getJSON()方法?它的以下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 ]); 

回答

2

延迟加载演示背后的想法是,你只获取必要的点数,所以如果你有包含170万点的数据,你永远不会加载这么多的点到图表。

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

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

最后一个问题的答案取决于您的数据格式是否正确或者您没有。如果这样做,可以避免在客户端循环数据并直接将其加载到图表。如果格式不正确,则必须预处理数据,以便图表能够正确显示它们。理想情况下,您希望数据在您提出请求后采用正确的格式 - 所以如果可以的话,您应该在服务器端进行。

+0

谢谢。如果由于网络故障导致频繁的数据请求和中断,是否有更好的解决方案?你知道Poloniex或TradingView如何处理这个问题吗? – saitam

+0

我不知道这些网站如何处理它,但我不认为这应该是问题,除非网站活动显着增长。我夸大地提到它只是为了指出一些缺点。 – morganfree