2015-11-01 52 views
0

我已經用dc.js創建了儀表板。在我的儀表板中,有一個複選框,允許用戶在計數和金額之間切換儀表板行爲。爲此,我重新爲所有組創建了crossfilter,其中reduceSum。 (雖然,我不知道這是否是正確的方式來做到這一點。)重新創建crossfilter我也必須重新創建dc.js圖表​​。dcjs,crossfilter - 如何完全配置圖表

我認爲這可能會導致一些內存泄漏和性能問題,因爲我已經爲我的所有圖表定義了filtered事件,並且不知道如何關閉該事件。同樣在檢查並取消選中複選框頁面後,速度會變慢。

我的問題:是否有另一種方式來徹底改變crossfilter數據,而無需重新創建dc.js圖表​​?如果沒有,如何正確刪除dc.js圖表​​以避免內存泄漏和性能問題?

回答

1

我會回答第一個問題,但不是第二個問題。 (內存泄漏是一個重要的話題,但我不知道答案;如果懷疑.on('filtered',...)你可以嘗試.on('filtered', null)但我有點懷疑這是唯一的循環。)

所以回到如何更換數據。這應該很簡單:只需將組和維度重新分配給圖表,然後致電chart.render()即可。 render總是從頭開始,所以它應該始終是安全的。即使redraw經常在更換組和維後工作,因爲dc.js圖表​​只是從group.all()提取數據並在該維上設置過濾器,所以如果替換這些過濾器,他們並不太在意。

減速的一個常見原因是在同一個crossfilter實例上創建越來越多的組&尺寸,但聽起來好像是從頭開始創建交叉過濾器,所以這不是問題。

+0

謝謝戈登,我會測試你的建議,並會通知你有關結果。 – alisabzevari