Service Workers and Caching to the Rescue!

Deniz Sultanoğlu
3 min readApr 2, 2024

--

Imagine your website as a restaurant. You want customers to be served quickly and enjoy their meals. Service workers and caching are like having a super-efficient waiter and a well-stocked pantry working together.

The Super Waiter: Service Workers

  • This special waiter (the service worker) runs in the background, separate from the main website.
  • It can intercept orders (requests) from customers (browsers).
  • It can even remember things (cache content) to serve them faster next time.

The Well-Stocked Pantry: Caching

  • The pantry (cache) stores popular dishes (website resources) customers order a lot.
  • This way, the waiter (service worker) can grab those dishes right away without having to cook them again (fetch from the server).
  • The pantry isn’t huge, so the waiter throws out old dishes (outdated resources) to make room for new ones (fresh content).

How They Work Together

  1. First Visit: The customer (browser) visits the restaurant (website) for the first time. The waiter (service worker) takes the order (requests resources) and gets everything from the kitchen (server).
  2. Smart Waiter: The waiter notices some popular dishes (resources) and stores them in the pantry (cache) for next time.
  3. Faster Service: The customer returns! This time, the waiter checks the pantry (cache) first. If the dishes (resources) are there and fresh, they’re served immediately — much faster!
  4. Keeping it Fresh: The waiter knows the menu (content) can change, so it checks with the kitchen (server) occasionally to see if anything’s new.

Benefits for Your Website (Restaurant):

  • Faster Loading Times: Customers get their food (see the website) quicker, especially on repeat visits.
  • Happier Customers: They don’t have to wait as long, leading to a better experience.
  • Offline Enjoyment: Even if the kitchen (server) is closed (no internet), the waiter can still serve some dishes (cached content) from the pantry.

Let’s write an example:

First of all, we should create a file ServiceWorker.js

const cacheName = 'my-static-cache'; // Give your cache a name

// Install event: This happens when the service worker is first registered
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(cacheName) // Open the cache with the specified name
.then(function(cache) {
// Add an array of URLs to cache
return cache.addAll([
'/', // Cache the root of your website
'/index.html', // Cache your main HTML file
'/styles.css', // Cache your stylesheet
'/script.js', // Cache your JavaScript file
]);
})
);
});

// Fetch event: This happens whenever the browser tries to fetch a resource
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request) // Try to find the requested resource in the cache
.then(function(response) {
if (response) {
// If found in cache, return the cached response
return response;
}
// If not found, fetch from the network and update the cache
return fetch(event.request)
.then(function(response) {
return caches.open(cacheName)
.then(function(cache) {
// Cache the fetched response for future use
cache.put(event.request, response.clone());
return response;
});
});
})
);
});

Therefore, we have to add the file to service-worker API.

if ("serviceWorker" in navigator) {
window.addEventListener("load", () => {
navigator.serviceWorker
.register("./serviceWorker.js")
.then((registration) => {
console.log(
"Service Worker registered with scope:",
registration.scope
);
})
.catch((error) => {
console.log("Service Worker registration failed:", error);
});
});
}

Now we can serve the dinner more efficiency.

Remember:

  • Not all browsers have the super waiter (service worker) yet, but it’s becoming more common.
  • The waiter needs to know when to throw out old dishes (invalidate cache) to keep things fresh.
  • Keep an eye on how your website runs after adding this system. You might need to adjust things a bit for the best results.

Conclusion:

By using service workers and caching, you can make your website run smoother and keep your visitors happy, just like that amazing restaurant with the super-efficient waiter!

--

--