Service Worker 是一种特殊的 Worker:它独立于页面、没有 DOM、页面关闭后仍可被事件唤醒,能在 fetch 请求经过时决定返回缓存、转发网络或两者结合。注册后经 installing/installated/activating/activated 生命周期,install 阶段预缓存核心资源,activate 阶段清理旧缓存。
它必须以 HTTPS 部署(localhost 例外),作用域只能在注册路径之下。Cache API 是配套的存储:cache.put 写入请求响应对,cache.match 匹配读取。配合 Cache First / Network First / Stale While Revalidate 等策略,就能实现离线可用、弱网秒开的资源缓存体系。
// 注册(页面脚本) if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then(function (reg) { console.log('注册成功,作用域:', reg.scope); }).catch(function (err) { console.log('注册失败', err); }); } // sw.js 核心逻辑 var CACHE = 'app-v1'; self.addEventListener('install', function (e) { e.waitUntil(caches.open(CACHE).then(function (c) { return c.addAll(['/index.html', '/style.css']); })); }); self.addEventListener('fetch', function (e) { e.respondWith(caches.match(e.request).then(function (r) { return r || fetch(e.request); })); });