#VariousComplements ## 概要 `Current vault complement`をコマンド実行しなくても自動で行うようにする。 ## 課題 パフォーマンス。特に以下3点。 - **差分更新できる仕組み** - ファイルpathをキーにしてトークンを配列で持たせる - 更新するファイルのkeyに対するvalueを削除して、reindexingした結果をぶちこむ - トークンはユニークにしてもしなくてもいい - 結局、Vault全体でUniqにする必要があるから - Providerのデータ持ち方は変えたくない - 1文字目をkeyに.. Word配列をvalueに.. - valueが重複するWordは削除する - **読み込むタイミング** - Auto save時 - 可能なら一番精度は高い - Current file complementが不要になる - ファイル変更時 - パフォーマンス面では既存ユーザーにも安心 - Current file complementとは棲み分ける - **読み込みとサジェストにかかる時間** - サジェストは現状維持が望ましい - 読み込みは.. - 2秒に1回なら数十msが限界 - できれば1桁ms - ファイル移動時なら100ms~200msでも許容できる ## パフォーマンスについて `{key: [...values]}`をflat化した場合の違い。 ```ts function* flatt(m: { [key: string]: number[] }): Iterable<number> { for (const [key, value] of Object.entries(m)) { yield* value; } } // こっちより const m = Object.values(mapping2).flat(); // こっちのほうが2倍速い const m = Array.from(flatt(mapping2)); ```