由于我的数据量每天变大(现在>一周内有200万个MySQL行),因此图表加载时速度很慢。我想异步加载方法是正确的方法(http://www.highcharts.com/stock/demo/lazy-loading)。 我试图实现它,但它不起作用。到目前为止,我可以通过URL参数提供我的数据,例如http://www.url.de/data?start=1482848100&end=1483107000,但在示例代码中我无法理解几件事:
加载数据的方法更好?:
这一个: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 ]);
答案 0 :(得分:2)
延迟加载演示背后的想法是你只获取必要的点数,所以如果你的数据包含1.7百万点,你就不会在图表上加载这么多点。
基于Highcharts演示。您没有加载过多的点,而是要求已经分组的点数,每日点数为170万,您将导航器设置为“全部”。 (时间范围1998 - 2011),您不需要每日数据,因此响应将包括每月积分。收益是:获取较少量的数据(12 * 14 = 168而不是1.7百万),避免客户端的繁重处理数据(处理,分组等) - &gt;降低客户端的内存和CPU使用率,加快图表加载速度。
数据请求采用JSONP格式。有关其优势的更多信息here。实际上,url有3个参数 - 强制conv
和可选callback=?
- 表示点时间范围及其密度。第一个请求没有启动/停止参数,因为服务器已经设置了一些默认值。移动导航器后,会请求更详细的点并将其加载到图表中。这是延迟加载的缺点 - 移动导航器后,您的请求需要一组新数据 - &gt;由于网络故障导致频繁的数据请求和中断。
您上一个问题的答案取决于您是否拥有适当格式的数据,或者您不知道。如果这样做,您可以避免在客户端循环数据并直接将其加载到图表中。如果格式不正确,则必须预处理数据,以便图表能够正确显示它们。理想情况下,您希望数据在请求后以正确的格式显示 - 如果可以,您应该在服务器端执行此操作。