2015-11-01 51 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