JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 68

Question

Can you explain how to use service workers to cache assets and improve performance?

Answer

Service workers are a powerful tool for building offline-first web applications and improving website performance.

Here's a breakdown of how to use them for caching assets:

1. Registering a Service Worker:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => console.log('Service worker registered:', registration))
      .catch(error => console.log('Service worker registration failed:', error));
  });
}
  • Include service-worker.js in your HTML file, and this script will register the service worker when the page loads.

2. The Service Worker (service-worker.js):

self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('my-cache') 
      .then(cache => cache.addAll([
        '/', 
        '/index.html', 
        '/style.css', 
        '/script.js', 
        '/images/logo.png' 
      ]))
  );
});

self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        if (response) {
          return response; // Return cached response
        } else {
          // Fetch from network if not in cache
          return fetch(event.request)
            .then(res => {
              // Clone and cache the fetched response
              const clonedResponse = res.clone();
              caches.open('my-cache').then(cache => cache.put(event.request, clonedResponse));
              return res; 
            });
        }
      })
  );
});
  • install Event: This event fires when the service worker is first installed. Inside it, we use caches.open() to open a cache named "my-cache" and add all the listed assets to it using cache.addAll().

  • fetch Event: This event handles all network requests made by the web page.

    • We check if the requested resource is in the cache using caches.match(event.request). If found, we return the cached response immediately.

    • If not found, we fetch the resource from the network and:

      • Clone the fetched response to keep the original intact for the page.

      • Store the cloned response in the cache for future requests.

      • Return the original fetched response to the page.

Key Points:

  • Caching Strategy: Choose a caching strategy that suits your needs. You can use various techniques like:

    • Cache First: Serve from cache, fetch if not available.

    • Network First: Fetch from network, cache if successful.

  • Expiration: Use expiration headers or TTL (Time To Live) to control how long cached assets are valid.

PreviousQuestion 67NextQuestion 69

Last updated 9 months ago