概述不同资源类型适合不同缓存策略。本文在 Service Worker 中按 `destination` 做策略分发。路由与策略self.addEventListener('fetch', event => { const dest = event.request.destination; if (dest === 'image' || dest === 'font') { event.respondWith(cacheFirst(event, 'static-v1')); } else if (dest === 'script' || dest === 'style') { event.respondWith(staleWhileRevalidate(event, 'assets-v1')); } else if (dest === 'document') { event.respondWith(networkFirst(event, 'pages-v1')); } }); async function cacheFirst(event, name) { const cache = await caches.open(name); const cached = await cache.match(event.request); if (cached) return cached; const res = await fetch(event.request); cache.put(event.request, res.clone()); return res; } async function staleWhileRevalidate(event, name) { const cache = await caches.open(name); const cached = await cache.match(event.request); const networkPromise = fetch(event.request).then(res => { cache.put(event.request, res.clone()); return res; }); return cached || networkPromise; } async function networkFirst(event, name) { const cache = await caches.open(name); try { const res = await fetch(event.request); cache.put(event.request, res.clone()); return res; } catch { const cached = await cache.match(event.request); return cached || new Response('', { status: 503 }); } }

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部