2014-01-29 82 views
0

我正在使用dygraphs在我正在開發的網絡交易平臺中生成基於畫布的股票圖表 - source here。數據通過WebSocket連接傳送到Web客戶端。如何減少dygraphs圖形的內存佔用量

如果您查看源代碼,您會看到我將數據附加到數組chartData,因爲數據通過套接字(第100行)傳入,然後我將數據傳遞給通過updateOptions(第111行)的dygraphs圖表,導致圖表使用最新數據重繪自己。

這工作正常,它表現良好。但是,大約一個小時後,當圖表中可能會追加10,000個數據項時,頁面(我正在使用Chrome)會崩潰,這可能是由於內存使用情況。數據存儲在圖表和數組(chartData)中,所以我認爲這對於一個網頁來說是一大塊內存。另外,我使用的ExtJS這是一個豬:)

有沒有人有如何減少圖表的內存足跡的建議?

回答

1

除了明顯的「不要使用分機」,我可以提供幾個猜測,但沒有明確的。

如我所假設的那樣,如果大部分使用的數據都不在圖表的當前可見部分,那麼也許您可以簡單地將其刪除。在有足夠的數據填充圖表後,每次將n條記錄添加到結尾時,都會從頭開始拼接n條記錄。

如果數據進入的速度快於您可以舒適地渲染它(不太可能但可能),交換進出幾張圖像:將數據收集到一個組中。按照一定的時間間隔,將該組複製到您的渲染區域,然後使用它渲染新的圖表。渲染完成後,將其放置在DOM中,丟棄舊的。

但是簡單地刪除舊數據可能會解決很多你的問題......

...特別是如果你擺脫內線的。

+0

嗯。這給了我一個想法......除了最近的數據(比如1分鐘),我可以將所有數據平均,並顯示指數移動平均數。然後,我可能會擺脫只顯示一小部分數據... –