## 概要 [[🦉Another Quick Switcher]]のダイアログを表示させるとき、初期化処理に少し時間がかかる。性能のいい端末では問題ないが、性能の悪い端末ではラグが生じる。 ## 解決策 ノートの内容に変更がない場合は、前回使ったキャッシュをそのまま使えるような機構を実装する。 ## メモ `onload`で以下のリスナーを使って、変更を生じた場合のみ最終更新日時を書き換える。 ```ts this.app.metadataCache.on("changed", (file) => { console.log("changed"); }); this.app.metadataCache.on("deleted", (file) => { console.log("deleted"); }); ``` ダイアログ表示のときにそれが変わっていなければキャッシュを、変わっていたら新規生成を行う。 ### 懸念点 - ダイアログを表示のたびに新しいインスタンスが生成される - のでダイアログの中にキャッシュを保存することはできない - 外からキャッシュを放り込んでインスタンスを生成すると、ダイアログインスタンスがメモリリークしそう - DBやファイルなどを使うとそちらのオーバーヘッドの方が時間かかる可能性もある - モバイルで動くかどうかとかも含めて... - キャッシュと最終更新日時はグローバルモジュールを用意して、それを利用するのがよさそう - 検索コマンドごとにキャッシュを管理する必要がある ### ボトルネックはindexingなのか? 速度を計測してみたら、indexingよりもクエリなし状態でのsuggestにかかる時間の方が3倍程度遅いことが分かった。 キャッシュによる高速化対応自体の価値はあるが、この対応をしてもsuggestが速くならない限り、体感速度はあまり変わらなそう...今この対応をやるべきではない気がする。