DevTools Logo

Service Workers Cheat Sheet

Service worker lifecycle, caching strategies, fetch handling, registration, and offline patterns.

Modern Frontend
service-worker
pwa
caching

A service worker is a script the browser runs in the background to intercept network requests, cache assets, and enable offline support. It sits between the page and the network.

Lifecycle

code
register → install → activate → fetch (idle)
Table
EventPurpose
installPrecache assets; call skipWaiting().
activateClean old caches; call clients.claim().
fetchIntercept requests and serve from cache/network.

Registration

js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js").then((reg) => {
    console.log("Registered", reg.scope);
  });
}

Caching strategies

Table
StrategyPatternUse for
Cache firstCache → network fallbackStatic assets, app shell.
Network firstNetwork → cache fallbackFresh content, API.
Stale-while-revalidateServe cache, update in backgroundImages, non-critical data.
Cache onlyAlways cachePrecache-only assets.
Network onlyAlways networkNon-cacheable requests.

Basic fetch handler

js
self.addEventListener("fetch", (event) => {
  event.respondWith(
    caches.match(event.request).then((cached) => {
      return cached || fetch(event.request);
    })
  );
});

Precache on install

js
self.addEventListener("install", (event) => {
  event.waitUntil(
    caches.open("v1").then((cache) => cache.addAll(["/", "/app.js", "/style.css"]))
  );
  self.skipWaiting();
});

References