#VariousComplements
## 経緯
[[Twitter]]にて。
https://twitter.com/neachi/status/1520346783620431873?s=20&t=G8F9IAgoLccSfMutno_KkQ
## 現状調査
ログを送っていただいたら[[フロントマター]]のindexingに1.5秒弱かかっていた。。
ログを詳細化して内訳をしたところ、[[フロントマター]]の読み込みとユニーク処理がボトルネックになっていそう。逆にgroupingはほとんど時間がかかっていない。
![[Pasted image 20220501172453.png]]
## 目標値
自分のマシンでファイル変更時の速度を`1~3ms`に抑えたい。
## 対応方針
理想形。
- データの型
- [x] データはファイルの絶対パスをkey、Wordの配列をValueにする
- [x] パフォーマンスはほぼ変わらなそう
- [[フロントマター]]が更新されたら
- [x] 更新されたファイルに対するkeyのvalueを[Front Matter]]で置き換える
- `app.metadataCache.on("changed",`で平気そう
- Wordの配列に変換する
- ここの速度は平気な気がしている
- ユニークにする
- ここは問題. 現状で5msかかっている
- グループ化する
- ここは問題ない. 現状で0.1ms強
### 速度
uniq以外は誤差。
#### Before
```ts
const flatWords = Object.values(this.wordsByCreatedPath).flat();
this.words = uniqWith(
flatWords,
(a, b) => a.key === b.key && a.value === b.value
);
```
平均6.51ms
```
changed metadataCache
created: 0.09999996423721313
flatten: 6.899999976158142
groupby: 0.5
changed metadataCache
created: 0.09999996423721313
flatten: 5.400000035762787
groupby: 0.40000003576278687
changed metadataCache
created: 0.09999996423721313
flatten: 4.900000035762787
groupby: 0.19999998807907104
changed metadataCache
created: 0
flatten: 7.800000011920929
groupby: 0.3999999761581421
changed metadataCache
created: 0.19999998807907104
flatten: 6.899999976158142
groupby: 0.19999998807907104
changed metadataCache
created: 0.09999996423721313
flatten: 7.199999988079071
groupby: 0.30000001192092896
changed metadataCache
created: 0
flatten: 6.899999976158142
groupby: 0.10000002384185791
```
#### After
```ts
const m: { [hash: string]: FrontMatterWord } = {};
Object.values(this.wordsByCreatedPath).forEach((ws) => {
ws.forEach((w) => {
m[w.key + w.value] = w;
});
});
this.words = Object.values(m);
```
平均0.91ms. uniqは**8倍高速化**。
```
changed metadataCache
created: 0
flatten: 1.100000023841858
groupby: 0.3999999761581421
changed metadataCache
created: 0
flatten: 0.8999999761581421
groupby: 0.5
changed metadataCache
created: 0.10000002384185791
flatten: 0.800000011920929
groupby: 0.5
changed metadataCache
created: 0
flatten: 0.800000011920929
groupby: 0.19999998807907104
changed metadataCache
created: 0.10000002384185791
flatten: 1.0999999642372131
groupby: 0.30000001192092896
```
最終的に1ms未満になったので、数十倍速くなったはず。