交叉过滤临时组效率
Crossfilter temporary groups efficiency
我正在将 Crossfilter 与 Vue 集成,想知道效率。
每当 UI 的状态更新时,我都会使用这样的代码进行计算,以从数据集中获取各种指标:
const originKeys = this.dimensions.origin.group().all().map(value => value.key)
此时我意识到每次 UI 更新时调用创建的组都存储在维度的“注册表”中,但由于我没有存储对该组的引用, 它实际上是“丢失”了。
然后,每当数据集更新时,所有这些“丢失”的组都会进行计算,即使结果从未使用过。
这是我猜的,如有错误请指正
计算根据 UI 而变化,因此存储对组的引用毫无意义。
为了克服这个问题,我创建了一个简单的辅助函数,它创建一个临时组并在计算完成后立即处理它。
function temporaryGroup(dimension, calculator) {
const group = dim.group()
const result = calculator(group, dim)
group.dispose()
return result
}
这样使用:
const originKeys = temporaryGroup(this.dimensions.origin, (group) => {
return group.all().map(value => value.key)
})
问题是,是否有更好(更有效)的临时计算方法,如上面的方法?
答案是否定的。您陈述的假设是正确的。这效率不高,并且没有更有效的方法将此库用于临时组。
Crossfilter 专为一组固定维度和组之间的快速交互而设计。
它在设计上是有状态的,仅添加和删除每个组中根据过滤器的更改而更改的特定行。
这对于基于范围的过滤器尤其重要,因为如果您以交互方式拖动画笔,则每次鼠标移动时都会添加一小部分域,并删除一小部分域。
还创建了数组索引来跟踪从数据 -> 键 -> bin 的映射。 One array of keys and one integer array of indices for the dimension, and one integer array of bin indices 为小组。这使得更新速度很快,但对于临时组来说可能效率低下。
如果您没有一组一致的图表,原则上自己进行计算会更有效,使用类型化数组,例如d3-array.
另一方面,如果你这样做是为了符合 Vue 的数据模型,你可能会看到 Vue 是否有一个类似于 React 的“上下文”的概念,其中共享状态与父组件相关联。这就是例如react-dc-js 保留交叉过滤器对象。
我正在将 Crossfilter 与 Vue 集成,想知道效率。
每当 UI 的状态更新时,我都会使用这样的代码进行计算,以从数据集中获取各种指标:
const originKeys = this.dimensions.origin.group().all().map(value => value.key)
此时我意识到每次 UI 更新时调用创建的组都存储在维度的“注册表”中,但由于我没有存储对该组的引用, 它实际上是“丢失”了。
然后,每当数据集更新时,所有这些“丢失”的组都会进行计算,即使结果从未使用过。
这是我猜的,如有错误请指正
计算根据 UI 而变化,因此存储对组的引用毫无意义。
为了克服这个问题,我创建了一个简单的辅助函数,它创建一个临时组并在计算完成后立即处理它。
function temporaryGroup(dimension, calculator) {
const group = dim.group()
const result = calculator(group, dim)
group.dispose()
return result
}
这样使用:
const originKeys = temporaryGroup(this.dimensions.origin, (group) => {
return group.all().map(value => value.key)
})
问题是,是否有更好(更有效)的临时计算方法,如上面的方法?
答案是否定的。您陈述的假设是正确的。这效率不高,并且没有更有效的方法将此库用于临时组。
Crossfilter 专为一组固定维度和组之间的快速交互而设计。
它在设计上是有状态的,仅添加和删除每个组中根据过滤器的更改而更改的特定行。
这对于基于范围的过滤器尤其重要,因为如果您以交互方式拖动画笔,则每次鼠标移动时都会添加一小部分域,并删除一小部分域。
还创建了数组索引来跟踪从数据 -> 键 -> bin 的映射。 One array of keys and one integer array of indices for the dimension, and one integer array of bin indices 为小组。这使得更新速度很快,但对于临时组来说可能效率低下。
如果您没有一组一致的图表,原则上自己进行计算会更有效,使用类型化数组,例如d3-array.
另一方面,如果你这样做是为了符合 Vue 的数据模型,你可能会看到 Vue 是否有一个类似于 React 的“上下文”的概念,其中共享状态与父组件相关联。这就是例如react-dc-js 保留交叉过滤器对象。