Service Worker通过缓存策略实现离线访问和性能优化,需先注册并经历安装、激活等生命周期阶段。采用缓存优先、网络优先或先缓存后更新等策略可提升资源加载效率,结合版本控制与缓存清理确保数据有效性,仅在HTTPS或本地环境中使用。

Service Worker 是实现离线体验和高效资源加载的核心技术。通过编写自定义缓存逻辑,可以大幅提升网页性能和可用性。关键在于合理选择缓存策略,结合实际场景动态处理网络请求。
在实现缓存前,需确保 Service Worker 能正确注册并激活。它独立运行在浏览器后台,不依赖页面生命周期。
主要阶段包括:navigator.serviceWorker.register()
根据不同资源类型选择合适策略,平衡速度与更新及时性。
1. 缓存优先(Cache First),适合静态资源优先读取缓存,无则请求网络,并将响应加入缓存。
self.addEventListener('fetch', event => {
if (event.request.destination === 'image') {
event.respondWith(
caches.match(event.request).then(cached => {
return cached || fetch(event.request).then(response => {
const cacheCopy = response.clone();
caches.open('image-cache').then(cache => {
cache.put(event.request, cacheCopy);
});
return response;
});
})
);
}
});优先尝试网络请求,失败时使用缓存兜底。
self.addEventListener('fetch', event => {
if (event.request.url.includes('/api/')) {
event.respondWith(
fetch(event.request).catch(() =>
caches.match(event.request)
)
);
}
});立即返回缓存内容,同时发起网络请求更新缓存。
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(cached => {
const networkFetch = fetch(event.request).then(response => {
if (response.ok) {
caches.open('dynamic-cache').then(cache => {
cache.put(event.request, response.clone());
});
}
return response;
}).catch(() => cached);
return cached || networkFetch;
})
);
});避免缓存无限增长,安装阶段预加载新资源,激活阶段清除过期缓存。
const CACHE_NAME = 'v2';
const PRECACHE_URLS = ['/offline.html', '/style.css'];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME).then(cache => cache.addAll(PRECACHE_URLS))
);
});
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(keys => {
return Promise.all(
keys.filter(key => key !== CACHE_NAME)
.map(key => caches.delete(key))
);
})
);
});基本上就这些。合理组合策略,配合缓存命名和版本控制,就能实现灵活可靠的资源管理。注意只对 HTTPS 站点或本地开发环境使用 Service Worker,否则无法注册成功。
以上就是如何用Service Worker实现智能资源缓存策略?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号