dcjs, crossfilter - 如何完全处理图表

dcjs, crossfilter - How to completely dispose a chart

我用 dc.js 创建了一个仪表板。在我的仪表板中,有一个复选框允许用户在计数和数量之间切换仪表板行为。为此,我为我的所有组重新创建了具有不同 reduceSumcrossfilter。 (虽然,我不知道这是否是正确的方法。)在重新创建 crossfilter 之后,我还必须重新创建 dc.js 图表。

我认为这可能会导致一些内存泄漏和性能问题,因为我已经为所有图表定义了 filtered 事件,但不知道如何关闭该事件。此外,选中和取消选中复选框后页面速度变慢。

我的问题:是否有另一种方法可以在不重新创建 dc.js 图表的情况下完全更改交叉过滤器数据?如果不是,如何正确删除 dc.js 图表以避免内存泄漏和性能问题?

我会回答第一个问题,但不会回答第二个问题。 (内存泄漏是一个重要的话题,但我不知道答案;如果您怀疑 .on('filtered',...),您可以尝试 .on('filtered', null),但我怀疑这是唯一的循环。)

那么回到如何替换数据。这应该很简单:只需将组和维度重新分配给图表,然后调用 chart.render()render 总是从头开始,所以它应该总是安全的。即使 redraw 经常在替换组和维度后工作,因为 dc.js 图表只是从 group.all() 中提取数据并在维度上设置过滤器,所以他们不太关心你是否替换那些。

减速的一个常见原因是在同一个交叉过滤器实例上创建越来越多的组和维度,但听起来您是从头开始创建交叉过滤器,所以这不是问题所在。