Service Worker Caching — Performance

Service Worker Caching Service Worker adalah JavaScript yang berjalan di background thread terpisah dari halaman. Ia bertindak sebagai proxy antara aplikasi dan

Service Worker Caching

Service Worker adalah JavaScript yang berjalan di background thread terpisah dari halaman. Ia bertindak sebagai proxy antara aplikasi dan jaringan, memungkinkan kita mengontrol sepenuhnya bagaimana request ditangani.

Strategi Caching

1. Network First

// Selalu coba network dulu, fallback ke cache
async function networkFirst(request) {
  try {
    const response = await fetch(request);
    const cache = await caches.open("v1");
    cache.put(request, response.clone());
    return response;
  } catch {
    return caches.match(request); // fallback ke cache
  }
}

Kapan digunakan: API calls, konten yang selalu harus fresh (berita, data real-time)

2. Cache First

// Cek cache dulu, network hanya jika tidak ada
async function cacheFirst(request) {
  const cached = await caches.match(request);
  if (cached) return cached;

  const response = await fetch(request);
  const cache = await caches.open("v1");
  cache.put(request, response.clone());
  return response;
}

Kapan digunakan: Static assets (CSS, JS, fonts, images) — jarang berubah

3. Stale-While-Revalidate

// Return cache segera, update di background
async function staleWhileRevalidate(request) {
  const cache = await caches.open("v1");
  const cached = await cache.match(request);

  // Fetch di background untuk update cache
  const fetchPromise = fetch(request).then((response) => {
    cache.put(request, response.clone());
    return response;
  });

  return cached ?? fetchPromise; // Return cache atau tunggu network
}

Kapan digunakan: Avatar, profile data, konten yang boleh sedikit stale

Lifecycle Service Worker

Register → Install (cache assets) → Activate (hapus cache lama) → Fetch (intercept requests)

Perbandingan Strategi

Strategi Speed Freshness Offline
Cache First Tercepat Mungkin stale
Network First Lambat Selalu fresh Partial
Stale-While-Revalidate Cepat Eventual