Service Worker
Script JavaScript exécuté en arrière-plan du navigateur, permettant la mise en cache, les notifications push et le fonctionnement hors ligne des applications web.
Mis à jour le 26 janvier 2026
Un Service Worker est un script JavaScript qui s'exécute indépendamment de la page web, agissant comme un proxy programmable entre l'application et le réseau. Cette technologie constitue le fondement des Progressive Web Apps (PWA) en permettant des fonctionnalités avancées comme le fonctionnement hors ligne, la synchronisation en arrière-plan et les notifications push. Contrairement aux scripts classiques, le Service Worker persiste même lorsque la page est fermée.
Fondements
- Thread séparé fonctionnant en arrière-plan, sans accès direct au DOM
- Cycle de vie indépendant (installation, activation, écoute des événements)
- Interception des requêtes réseau via l'API Fetch
- Nécessite obligatoirement HTTPS en production pour des raisons de sécurité
Avantages
- Expérience utilisateur offline : accès au contenu sans connexion internet
- Performance accrue : chargement instantané via le cache local
- Engagement utilisateur : notifications push même application fermée
- Synchronisation en arrière-plan : envoi de données en différé
- Économie de bande passante : réduction des requêtes réseau redondantes
Exemple concret
Voici l'implémentation d'un Service Worker basique avec stratégie de cache "Cache First" :
// Enregistrement du Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log('SW enregistré', reg))
.catch(err => console.error('Erreur SW', err));
}
// Fichier Service Worker (sw.js)
const CACHE_NAME = 'app-v1';
const urlsToCache = [
'/',
'/styles/main.css',
'/script/app.js',
'/images/logo.png'
];
// Installation
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
// Interception des requêtes
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => {
// Cache hit - retourner la réponse
if (response) return response;
// Sinon fetch et mettre en cache
return fetch(event.request).then(response => {
if (!response || response.status !== 200) {
return response;
}
const responseToCache = response.clone();
caches.open(CACHE_NAME)
.then(cache => {
cache.put(event.request, responseToCache);
});
return response;
});
})
);
});
// Activation et nettoyage
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
if (cacheName !== CACHE_NAME) {
return caches.delete(cacheName);
}
})
);
})
);
});Mise en œuvre
- Créer le fichier Service Worker à la racine du domaine (portée maximale)
- Enregistrer le Service Worker depuis le script principal de l'application
- Définir la stratégie de cache adaptée (Cache First, Network First, Stale While Revalidate)
- Implémenter le cycle de vie complet (install, fetch, activate)
- Gérer les versions et la mise à jour du cache
- Tester le comportement offline avec Chrome DevTools (onglet Application)
- Mettre en place un mécanisme de skip waiting pour les mises à jour critiques
Conseil Pro
Utilisez Workbox, la bibliothèque de Google, pour simplifier la gestion des Service Workers. Elle fournit des stratégies de cache préconfigurées, un routing simplifié et gère automatiquement les cas complexes. En production, privilégiez une stratégie hybride : Cache First pour les assets statiques, Network First pour les API, et Stale While Revalidate pour les images.
Outils associés
- Workbox : bibliothèque Google pour simplifier la création de Service Workers
- Chrome DevTools : débogage et inspection (Application > Service Workers)
- Lighthouse : audit des PWA et vérification du Service Worker
- sw-precache / sw-toolbox : anciennes bibliothèques Google (legacy)
- Service Worker Precache Webpack Plugin : génération automatique du cache
- IndexedDB : stockage local pour données complexes accessible au Service Worker
Les Service Workers transforment les applications web en expériences natives, offrant performance et résilience. Pour les entreprises, cette technologie réduit les coûts de bande passante, améliore la rétention utilisateur et permet de maintenir un service minimal même en cas de défaillance réseau. Investir dans une architecture PWA basée sur les Service Workers garantit un avantage concurrentiel significatif sur les marchés à connectivité limitée.
