mobx:维护大型计算数据结构

时间:2018-12-21 02:13:27

标签: javascript mobx

Mobx noob在这里。我有一个映射Map的ES6 name -> things

示例:

{
    bob: ['pencil', 'table', 'car'],
    jane: ['laptop', 'pencil'],
    adam: ['car', 'dog', 'house']
}

我有一个@computed Map,它是第一个映射的thing -> names

示例:

{
    pencil: ['bob', 'jane'],
    table: ['bob'],
    car: ['bob', 'adam'],
    laptop: ['jane'],
    dog: ['adam']
}

这是推导函数。

@computed get thingToNames () {
    const thingToNames = new Map()
    for (const [name, things] of this.nameToThings.entries()) {
        for (const thing of things) {
            if (!thingToNames.has(thing)) {
                thingToNames.set(thing, new Set())
            }
            thingToNames.get(thing).add(name)
        }
    }
    return thingToNames
}

无论何时name -> things被突变,thing -> names都会重新计算,对吗?如果我有一百万个names,并且从thing数组中删除了一个things,则至少需要进行一百万次操作才能重新计算thing -> names。如果name -> things经常被突变,我只能想象重新计算thing -> names的性能将有多可怕。

我可以手动维护thing -> names数据结构,但这违背了mobx的口头禅,在这种口头上,任何可以导出的东西都应该被导出。那么如何有效维持thing -> names的mobx方式呢?

0 个答案:

没有答案