#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未満になったので、数十倍速くなったはず。