generated at
scrapbox.Project.pagesはキャッシュして使
scrapbox.Project.pagesgetterであり、アクセスするたびにscrapbox内部のページリストがdeep cloneされる
一旦生成した pages を使い回す設計にしないといけない

振り返り(takker-workflow@0.0.1)を自動生成するUserScriptにあった↓のコードがUIをblockingしてしまっていた
js
// 生成する振り返りページの日付リスト const dates = eachDayOfInterval(interval).filter((date) => { const title = reviewTitle(date); const page = scrapbox.Project.pages.find((page) => page.title === title); return !page || !page.exists; });
2023-03-10時点で eachDayOfInterval(interval).length === 129 だったため、129回もクソデカ配列の生成と破棄を繰り返すことになっていた
メモリが死んでしまう!
電力も食う
2022-11-03時点では配列の長さが1だったため、気づかなかったのだろう
日が経過するに連れてfilterする回数が増え、だんだんUIブロックが気になるようになってきた
日刊記録sheetを自動生成するUserScriptにも同様の記述があり、4秒程度かかっていた
これにより、いつもscrapboxを立ち上げるたびに約10秒もUI threadがblockingされていた
当初はtop-level awaitのせいかと思って対策を施したが、全く改善されなかった
2023-03-10にChrome Developer Toolsを使ってmobile版scrapboxの起動状況を調べた結果、scrapbox.Project.pagesの生成が原因だとわかった

この事情はscrapbox.Page.linesも同じ
こっちはページ内の行数が少なければ大きな問題にならない


#2023-03-10 14:16:06