・ᴗ・ on Nostr: // #cache を含む URL だけをキャッシュ registerRoute( ({ url }) => url.hash ...
// #cache を含む URL だけをキャッシュ
registerRoute(
({ url }) => url.hash === "#cache", // #cache を含む URL をキャッシュ対象
new NetworkFirst({
cacheName: "avatar-cache",
plugins: [
new ExpirationPlugin({
maxEntries: 200,
maxAgeSeconds: 60 * 60 * 24 * 7, // 7日
}),
{
cacheKeyWillBeUsed: async ({ request }) => {
const url = new URL(request.url);
url.hash = ""; // ハッシュ部分を削除
return url.toString(); // ハッシュを除外したURLをキャッシュキーとして利用
},
},
],
})
);
//この修正により、

という形式のリクエストでもキャッシュを利用可能になります。同時に、

のリクエストも同じキャッシュを利用できるため、柔軟な対応が可能です。
らしい
Published at
2025-01-22 00:01:36Event JSON
{
"id": "a2c84e269f99e4ce7cc481b2d44b22de7d425d1bd5092c65da703c53edca3551",
"pubkey": "5650178597525e90ea16a4d7a9e33700ac238a1be9dbf3f5093862929d9a1e60",
"created_at": 1737504096,
"kind": 1,
"tags": [
[
"r",
"https://example.com/image.jpg#cache"
],
[
"r",
"https://example.com/image.jpg"
],
[
"t",
"cache"
],
[
"t",
"cache"
],
[
"client",
"lumilumi",
"31990:84b0c46ab699ac35eb2ca286470b85e081db2087cdef63932236c397417782f5:1727506446612",
"wss://relay.nostr.band"
]
],
"content": "// #cache を含む URL だけをキャッシュ\nregisterRoute(\n ({ url }) =\u003e url.hash === \"#cache\", // #cache を含む URL をキャッシュ対象\n new NetworkFirst({\n cacheName: \"avatar-cache\",\n plugins: [\n new ExpirationPlugin({\n maxEntries: 200,\n maxAgeSeconds: 60 * 60 * 24 * 7, // 7日\n }),\n {\n cacheKeyWillBeUsed: async ({ request }) =\u003e {\n const url = new URL(request.url);\n url.hash = \"\"; // ハッシュ部分を削除\n return url.toString(); // ハッシュを除外したURLをキャッシュキーとして利用\n },\n },\n ],\n })\n);\n//この修正により、https://example.com/image.jpg#cache という形式のリクエストでもキャッシュを利用可能になります。同時に、https://example.com/image.jpg のリクエストも同じキャッシュを利用できるため、柔軟な対応が可能です。\nらしい",
"sig": "12064d3782502261a7f1374d950e5c3c05a651ea1de2b644f36d3f60ff7b87cae73d19ba246f86783c61b8d27b0d99ec81f4a16aa6299eb760531fac25f98d5d"
}