✅scrapbox.ioのcacheからtakker99/ScrapBubbleのデータを読み込む
from takker99/ScrapBubble
採用
findLatestApiCache()から読み込む
scrapbox.ioが保存してくれるやつを使わせていただく
以前もそうしていたのだが、cache読み込みが遅かったので、自前で用意したCacheに切り替えた
しかしCache APIの遅さの原因を調べるによると、単にfirefoxで遅いだけのようだった
なので元に戻す
自前のcacheがなぜか更新されないバグがあるのも気になっている
これは別途修正するか
cache読み込みに1秒以上かかるときは、fetch読み込みに切り替える
code:こんなイメージ.ts
const cachePromise = findLatestApiCache(req)
.then((res) => "cache", res);
const timer = sleep(1000).then(() => "timeout");
const first = await Promise.race(cachePromise, timer);
if (first === "timer") {
// fetchも走らせ始める
const networkPromise = fetch(req)
.then((res) => "network", res);
// 先にresolveしたほうから順に返す
// networkPromiseが先にresolveしたら、cachePromiseはyieldせずに捨てる
} else {
// cacheを返した後fetchする
yield await cachePromise1;
yield await fetch(res);
}
設計
Async Generatorを使った
fetchが不要なときはbreakして処理を飛ばせる
code:ts
declare async function* cacheFirstFetch(req: Request):
AsyncGenerator<"cache" | "network", Response, void, unknown>;
for await (const type, res of cacheFirstFetch()) {
const result = getPage.fromResponse(res);
// 処理
// networkからとる必要がなければ、ここで中断させる
if (type === "cache" && !isExpired(res)) break;
}
お蔵入り
Indexed DBにtakker99/ScrapBubbleのデータを格納する案
選択範囲に似ているリンクを入力補完するUserScriptで使っている方法でもある
firefoxでも秒で読み込まれて便利
実装するにはデータ構造を設計しないといけないうえ、ここまで高速化する必要もないので、今はお蔵入りする
2023-01-21
09:06:11 cacheのversion up
08:51:33 merged
#2023-01-21 08:50:02
#2023-01-20 21:02:29
#2023-01-19 19:45:52