Cosenseの静的モード
project内を爆速で表示できるようにする仕組み
静的モードをオンにすると、readonlyになり、その時点のproject内容が全部クライアント側でロードされる
一瞬で表示するためのお膳立てをクライアント側で行うイメージ
(そんなお膳立てが技術的にできるのか、また今のCosenseの仕様上できるかはわからん)
かんたんtakker.icon
api/pages/:projectname/:pagetitleを全ページ分叩いて、IndexedDBなどに保存すればいいだけ
通信は発生しない
(画像どうするかはわからん)
cache APIを使うtakker.icon
ScrapboxのOffline modeはこれを使って画像を表示している
すべての画像をもれなくcacheするには、少々回りくどい方法を使うことになる
リンククリックの画面遷移を滅茶苦茶高速にすれば不要な気がしています /forum-jp/他のページを埋め込みたい#5b25030297c291000039b6d8
これをやれる案として思いついたのですが、どうでしょうsta.icon
いきなりforum-jpはハズいので、まずは井戸端で感触を見る
すでにリンククリックの画面遷移を滅茶苦茶高速にされています認識だと思いますtakker.icon
/shokai/ServiceWorkerをproductionで使ってる話#5b7e79b597c2910000f50300
リンクをホバーしたときfetchして、クリック時にcacheから読み込んでいる
もういっそ2hop先までのリンク全部fetchさせて(狂)綾坂こと.icon
「先行読み込み」設定を追加して、「しない」「リンクホバー」「1 hop link」「1・2 hop link」の4択で……
ネット回線を富豪のように使うことになるのでトレードオフ
ただ、project全体を丸ごとlocalに入れてしまえば、リンクホバー時のfetchが要らなくなるので、さらに早くなると思います
(できるかどうかはわからないが)ローカルでテキストファイル開くくらいの速さが欲しいsta.icon
0.x秒の世界
実装
localにデータを置く方法は、IndexedDBかCache APIのどちらかが妥当
scrapboxはcache apiを使っている
Cache API
ブラウザのキャッシュ機能をJSから使えるようにするAPI
RequestとResponseのペアで保存される
firefoxではなぜか遅いことがある
IndexedDB
ブラウザで使えるDB
十分早い
端末の容量にもよるが、数GB保存することもできる
rendering速度を早める
scrapboxだと難しそう
1文字ごとに<span>で囲む方法をとっているため、どうしても描画に時間がかかる
spanがbottle neckだと思っているけど、計測したわけではないtakker.icon
他にbottle neckがあるかも