概述App Shell 将应用框架与动态内容分离,适合离线优先。本文给出 SW 内预缓存与路由策略示例。预缓存与路由const SHELL = 'shell-v1';

const SHELL_URLS = ['/', '/index.html', '/app.js', '/styles.css'];

self.addEventListener('install', e => { e.waitUntil(caches.open(SHELL).then(c => c.addAll(SHELL_URLS))); });

self.addEventListener('activate', e => { e.waitUntil(caches.keys().then(keys => Promise.all(keys.filter(k => k.startsWith('shell-') && k !== SHELL).map(k => caches.delete(k))))); });

self.addEventListener('fetch', event => {

const url = new URL(event.request.url);

if (event.request.mode === 'navigate') {

event.respondWith(caches.match('/index.html').then(res => res || fetch(event.request)));

} else if (url.pathname.startsWith('/api/')) {

event.respondWith((async () => {

try { const res = await fetch(event.request); return res; } catch { return new Response('', { status: 503 }); }

})());

}

});

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部