mobx: поддержка больших вычисляемых структур данных - PullRequest
0 голосов
/ 21 декабря 2018

Mobx Noob здесь.У меня есть ES6 Map, который отображает 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, но это противоречит мантре Мобса, гдевсе, что может быть выведено, должно быть получено.Итак, как мне эффективно поддерживать thing -> names способ MOBX?

...