Service Worker Usage Guide:Claude Code 实战指南
了解service worker usage guide:Claude Code 实战. 包含实用技巧和代码示例。
Service Workerの役割
Service Workerは浏览器と网络の間に位置するプロキシで、オフライン支持・缓存制御・プッシュ通知などを実現します。PWA(Progressive Web App)の中核技術ですが、ライフサイクルや缓存戦略の理解が是必要的。借助 Claude Code,目的に合ったService Workerを正确地实现可以。
Service Workerの注册
> Service Workerを注册するユーティリティを作って。
> 更新検知と用户への通知も含めて。
export async function registerServiceWorker() {
if (!('serviceWorker' in navigator)) {
console.log('Service Worker非対応のブラウザです');
return;
}
try {
const registration = await navigator.serviceWorker.register('/sw.js', {
scope: '/',
});
// 更新の検知
registration.addEventListener('updatefound', () => {
const newWorker = registration.installing;
if (!newWorker) return;
newWorker.addEventListener('statechange', () => {
if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
// 新しいバージョンが利用可能
showUpdateNotification(registration);
}
});
});
console.log('Service Worker登録完了:', registration.scope);
} catch (error) {
console.error('Service Worker登録失敗:', error);
}
}
function showUpdateNotification(registration: ServiceWorkerRegistration) {
if (confirm('新しいバージョンが利用可能です。更新しますか?')) {
registration.waiting?.postMessage({ type: 'SKIP_WAITING' });
window.location.reload();
}
}
缓存戦略の实现
> Cache First、Network First、Stale While Revalidateの3つの缓存戦略实现。
// sw.js
const CACHE_NAME = 'app-cache-v1';
const STATIC_ASSETS = ['/', '/index.html', '/styles.css', '/app.js'];
// Cache static assets on install
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => cache.addAll(STATIC_ASSETS))
);
});
// Cache First(静的アセット向け)
async function cacheFirst(request) {
const cached = await caches.match(request);
if (cached) return cached;
const response = await fetch(request);
const cache = await caches.open(CACHE_NAME);
cache.put(request, response.clone());
return response;
}
// Network First(API向け)
async function networkFirst(request) {
try {
const response = await fetch(request);
const cache = await caches.open(CACHE_NAME);
cache.put(request, response.clone());
return response;
} catch {
const cached = await caches.match(request);
return cached || new Response('オフラインです', { status: 503 });
}
}
// Stale While Revalidate(ニュースフィード向け)
async function staleWhileRevalidate(request) {
const cache = await caches.open(CACHE_NAME);
const cached = await cache.match(request);
const fetchPromise = fetch(request).then((response) => {
cache.put(request, response.clone());
return response;
});
return cached || fetchPromise;
}
// Routing
self.addEventListener('fetch', (event) => {
const { request } = event;
const url = new URL(request.url);
if (request.destination === 'image' || url.pathname.match(/\.(css|js|woff2?)$/)) {
event.respondWith(cacheFirst(request));
} else if (url.pathname.startsWith('/api/')) {
event.respondWith(networkFirst(request));
} else {
event.respondWith(staleWhileRevalidate(request));
}
});
オフライン页面
// オフライン時のフォールバック页面
self.addEventListener('fetch', (event) => {
if (event.request.mode === 'navigate') {
event.respondWith(
fetch(event.request).catch(() => caches.match('/offline.html'))
);
}
});
バックグラウンド同步
// オフライン時に队列に入れ、オンライン復帰時に发送
self.addEventListener('sync', (event) => {
if (event.tag === 'sync-pending-data') {
event.waitUntil(syncPendingData());
}
});
async function syncPendingData() {
const db = await openDB('pending-requests');
const requests = await db.getAll('queue');
for (const req of requests) {
try {
await fetch(req.url, req.options);
await db.delete('queue', req.id);
} catch {
break; // まだオフラインなら中断
}
}
}
总结
借助 Claude Code,缓存戦略の選定からオフライン支持、バックグラウンド同步まで、Service Workerの活用を高效地实现可以。PWA全般はProgressive Web App开发を、缓存戦略的详细信息请参阅缓存戦略。
Service Worker的详细信息请参阅MDN Web Docs - Service Worker API。
免费 PDF:5 分钟看懂 Claude Code 速查表
只需留下邮箱,我们就会立即把这份 A4 一页速查表 PDF 发送给你。
我们会严格保护你的个人信息,绝不发送垃圾邮件。
把 Claude Code 变成真正能带来结果的工作流
先领取中文说明的免费 PDF,再进入英文商品页选择合适的教材。如果你需要团队落地、流程设计或内容变现支持,也可以直接咨询。
本文作者
Masa
深度使用 Claude Code 的工程师。运营 claudecode-lab.com——一个涵盖 10 种语言、超过 2,000 页内容的科技媒体。
相关文章
Claude Code 的 7 个 CLAUDE.md 模板 | 可以直接复制到真实项目
面向个人应用、内容站、API、团队仓库和遗留代码库的 7 个实用 CLAUDE.md 模板,附常见失败案例。
Claude Code Approval 与 Sandbox 指南 | 日常安全使用的实战设置
用可直接参考的 settings、hooks、失败案例与流程示例,讲清楚 Claude Code 的 allow / ask / deny / sandbox 应该怎么分。
Claude Code 完全入门指南 2026 | 从零到实战应用的 7 个步骤
专为 Claude Code 新手打造的完整入门指南。从安装到融入真实开发工作流——涵盖 Masa 刚开始使用时踩过的所有坑。