How Network First Strategy Works in Service Workers

The Network First strategy (also known as Network Falling Back to Cache) is a caching pattern used in JavaScript service workers to prioritize retrieving the most up-to-date resources directly from the server. By intercepting incoming network requests, attempting to fetch live data from the network, updating the local cache with the latest response, and falling back to the cache only when the network fails, this strategy guarantees that users always receive the freshest content whenever an internet connection is available.

The Core Mechanism of Network First

When a web application requests an asset—such as an HTML document, API data, or frequently updated dynamic content—the service worker intercepts the request through the fetch event listener.

Instead of checking the local cache storage first, the service worker immediately forwards the request to the network using the fetch() API. If the network request succeeds, the service worker takes two simultaneous actions: 1. It creates a clone of the fresh network response and stores it in the Cache Storage using cache.put(). 2. It returns the original response directly to the browser to render the page.

If the network request fails due to network instability, server downtime, or the user being offline, the fetch() promise rejects. The service worker catches this rejection and retrieves the most recent valid version of the resource saved in the cache using caches.match().

self.addEventListener('fetch', (event) => {
  event.respondWith(
    fetch(event.request)
      .then((networkResponse) => {
        // Check if the response is valid
        if (!networkResponse || networkResponse.status !== 200 || networkResponse.type !== 'basic') {
          return networkResponse;
        }

        // Clone the response and update the cache
        const responseToCache = networkResponse.clone();
        caches.open('dynamic-cache-v1').then((cache) => {
          cache.put(event.request, responseToCache);
        });

        return networkResponse;
      })
      .catch(() => {
        // Fallback to cache if the network fails
        return caches.match(event.request);
      })
  );
});

Why Network First Guarantees Fresh Content

Network Timeout Optimization

A common enhancement to the standard Network First pattern is the Network First with Timeout strategy. In standard implementations, slow network connections (“Lie-Fi”) can cause long wait times before the request fails and falls back to the cache. By wrapping the fetch() request in a timeout promise (e.g., 2–3 seconds), the service worker can automatically fall back to the cached copy if the network takes too long to respond, balancing resource freshness with fast load times.