2016-12-31 76 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