service-worker
npx skills add https://github.com/oakoss/agent-skills --skill service-worker
Agent 安装分布
Skill 文档
Service Worker
Overview
Service workers are event-driven scripts that run in a separate thread from the main page, intercepting network requests, managing caches, and enabling offline functionality. Workbox v7.4 (maintained by the Chrome Aurora team) provides a production-ready abstraction over the low-level Cache API and fetch event handling.
When to use: Progressive web apps needing offline support, apps requiring push notifications, background data synchronization, app shell caching, network request optimization with static routing.
When NOT to use: Simple static sites served from a CDN, server-rendered apps with no offline requirements, apps where stale data is unacceptable (use network-only), prototypes where caching complexity is premature.
Quick Reference
| Pattern | API / Tool | Key Points |
|---|---|---|
| Registration | navigator.serviceWorker.register() |
Register in window context, scope defaults to path |
| Precaching | workbox-precaching |
Revision-hashed app shell, injected at build time |
| Cache-first | CacheFirst strategy |
Static assets, fonts, images |
| Network-first | NetworkFirst strategy |
API responses needing freshness |
| Stale-while-revalidate | StaleWhileRevalidate strategy |
Balance between speed and freshness |
| Background sync | workbox-background-sync |
Replay failed requests when back online |
| Push notifications | Push API + Notifications API | VAPID keys, server-sent push, offline-first display |
| Static routing | event.addRoutes() in install |
Bypass fetch handler for known routes |
| Skip waiting | self.skipWaiting() |
Activate new SW immediately, use with caution |
| Clients claim | self.clients.claim() |
Control existing tabs without reload |
| Navigation preload | navigationPreload.enable() |
Parallel network request during SW startup |
| Update prompt | workbox-window Workbox class |
Detect updates, prompt user, postMessage to SW |
| Offline fallback | workbox-recipes offlineFallback |
Serve fallback page when cache and network fail |
| Cache expiration | workbox-expiration |
maxEntries and maxAgeSeconds per cache |
Browser Support Quick Reference
| Feature | Chrome | Firefox | Safari | Edge |
|---|---|---|---|---|
| Service Workers | 40+ | 44+ | 11.1+ | 17+ |
| Background Sync | 49+ | No | No | 79+ |
| Periodic Sync | 80+ | No | No | 80+ |
| Push API | 50+ | 44+ | 16.4+ | 17+ |
| Navigation Preload | 59+ | 99+ | 15.4+ | 18+ |
| Static Routing API | 123+ | No | No | 123+ |
| Background Fetch | 74+ | No | No | 79+ |
| Storage Persistence | 52+ | 55+ | 15.2+ | 79+ |
Common Mistakes
| Mistake | Correct Pattern |
|---|---|
| Caching API responses with CacheFirst | Use NetworkFirst or StaleWhileRevalidate for dynamic data |
| Calling skipWaiting unconditionally | Prompt user before activating to avoid breaking in-flight navigations |
| Not versioning precache manifests | Use workbox-build or workbox-webpack-plugin to inject revision hashes |
| Ignoring cache storage limits | Implement cache expiration with workbox-expiration plugin |
| Using sync access handle in service worker | OPFS createSyncAccessHandle is dedicated-worker only; use async methods |
| Assuming Background Sync works everywhere | Chrome/Edge only (~80%); implement navigator.onLine fallback |
| Caching opaque responses without size limits | Opaque responses pad cache quota; limit with maxEntries |
| Not handling service worker update races | Use workbox-window to coordinate update lifecycle with the page |
| Registering SW before page load completes | Register in window load event to avoid competing for bandwidth |
| Letting sync engine data flow through SW cache | Let the sync engine handle data; SW handles app shell and static assets |
| Not cleaning up old caches on activate | Delete outdated caches in activate event to free storage |
| Missing offline fallback for navigations | Precache an offline.html and serve it when network and cache both fail |
Workbox Package Reference
| Package | Purpose |
|---|---|
workbox-precaching |
Build-time asset caching with revision management |
workbox-routing |
URL pattern matching and strategy routing |
workbox-strategies |
CacheFirst, NetworkFirst, StaleWhileRevalidate |
workbox-expiration |
Cache size and age limits |
workbox-cacheable-response |
Filter responses by status or header |
workbox-background-sync |
Queue and replay failed requests |
workbox-window |
Page-side registration and update management |
workbox-recipes |
Pre-built patterns (offline fallback, warm cache) |
workbox-build |
Build tool for generating precache manifests |
workbox-navigation-preload |
Enable navigation preload in activate |
Delegation
If the
local-firstskill is available, delegate architecture decisions, sync engine selection, and offline data strategy to it. Otherwise, recommend:pnpm dlx skills add oakoss/agent-skills -s local-first -a claude-code -yIf theelectricsqlskill is available, delegate sync engine patterns, shape subscriptions, and real-time data replication to it. Otherwise, recommend:pnpm dlx skills add oakoss/agent-skills -s electricsql -a claude-code -y
- Caching strategy review: Use
Taskagent to audit route-to-strategy mappings - Offline testing: Use
Taskagent to simulate offline scenarios and verify fallback behavior - Push notification design: Use
Planagent to design notification payload and action strategies