diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/edge_sw.jpg b/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/edge_sw.jpg
new file mode 100644
index 00000000000000..a2a00575fc5f6e
Binary files /dev/null and b/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/edge_sw.jpg differ
diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/firefox_sw.jpg b/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/firefox_sw.jpg
new file mode 100644
index 00000000000000..603c8155f85ecb
Binary files /dev/null and b/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/firefox_sw.jpg differ
diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/index.md b/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/index.md
new file mode 100644
index 00000000000000..2238cec4226c43
--- /dev/null
+++ b/files/fr/web/progressive_web_apps/tutorials/cycletracker/service_workers/index.md
@@ -0,0 +1,403 @@
+---
+title: "CycleTracker : les service workers"
+short-title: Service workers
+slug: Web/Progressive_web_apps/Tutorials/CycleTracker/Service_workers
+---
+
+{{PWASidebar}}
+
+{{PreviousMenu("Web/Progressive_web_apps/Tutorials/CycleTracker/Manifest_file", "Web/Progressive_web_apps/Tutorials/CycleTracker")}}
+
+Jusqu'à présent, nous avons écrit le HTML, le CSS et le JavaScript de l'application CycleTracker. Nous avons ajouté un fichier de manifeste qui définit les couleurs, icônes, URL et d'autres fonctionnalités de l'application. Notre application web est fonctionnelle ! Toutefois, ce n'est pas encore une application web progressive. Dans cette section, nous écrirons le JavaScript nécessaire pour que notre application web devienne une PWA qui puisse être distribuée comme une application à part entière et qui fonctionne hors-ligne.
+
+Si ce n'est pas déjà fait, copiez les fichiers [HTML](https://github.com/mdn/pwa-examples/tree/master/cycletracker/manifest_file/index.html), [CSS](https://github.com/mdn/pwa-examples/tree/master/cycletracker/manifest_file/style.css), [JavaScript](https://github.com/mdn/pwa-examples/tree/master/cycletracker/manifest_file/app.js), et [celui du manifeste](https://github.com/mdn/pwa-examples/tree/master/cycletracker/manifest_file/cycletracker.json). Respectivement, enregistrez-les avec les noms `index.html`, `styles.css`, `app.js`, et `cycletracker.json`.
+
+Dans cette section, nous allons créer un fichier `sw.js` qui contiendra le script de notre service worker qui convertira notre application web en PWA. Nous avons déjà un fichier JavaScript et la dernière ligne de notre fichier HTML appelle `app.js`. Ce code JavaScript fournit l'ensemble des fonctionnalités de notre application web classique. Plutôt que d'appeler le fichier `sw.js` comme nous l'avions fait pour
+`app.js` en utilisant l'attribut `src` de l'élément [`
+```
+
+Si la propriété est prise en charge, on peut alors utiliser la méthode [`register()`](/fr/docs/Web/API/ServiceWorkerContainer/register) de l'interface [`ServiceWorkerContainer`](/fr/docs/Web/API/ServiceWorkerContainer).
+
+```html
+
+```
+
+Bien que le fragment précédent suffise pour les besoins de l'application CycleTracker, la méthode `register()` renvoie [une promesse (`Promise`)](/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise) qui se résout en un objet [`ServiceWorkerRegistration`](/fr/docs/Web/API/ServiceWorkerRegistration). Pour une application plus robuste, il est préférable de vérifier s'il y a eu une erreur lors de l'enregistrement :
+
+```js
+if ("serviceWorker" in navigator) {
+ navigator.serviceWorker.register("sw.js").then(
+ (registration) => {
+ console.log("Enregistrement du service worker réussi :", registration);
+ },
+ (error) => {
+ console.error(`Échec de l'enregistrement du service worker : ${error}`);
+ },
+ );
+} else {
+ console.error("Les service workers ne sont pas pris en charge.");
+}
+```
+
+### Tâche
+
+Ouvrez le fichier `index.html` et ajoutez l'élément [`
+```
+
+Vous pouvez essayer [l'application CycleTracker fonctionnelle et complète](https://mdn.github.io/pwa-examples/cycletracker/service_workers) et consulter [son code source](https://github.com/mdn/pwa-examples/tree/master/cycletracker/service_workers) sur GitHub. Elle fonctionne, et c'est désormais bien une PWA !
+
+## Débogage des service workers
+
+Étant donné la façon dont nous utilisons le service workers, une fois que celui-ci aura été enregistré, chaque requête utilisera le cache plutôt que de charger du nouveau contenu. Lors du développement, on édite régulièrement le code et on veut généralement tester régulièrement dans le navigateur.
+
+### En incrémentant le numéro de version et avec un rafraîchissement forcé
+
+Pour obtenir un nouveau cache, on peut modifier [le numéro de version](#numéro_de_version) puis demander un rafraîchissement forcé. La méthode pour déclencher un tel rafraîchissement dépend du navigateur et du système d'exploitation :
+
+- Sur Windows : Ctrl+F5, Shift+F5, ou Ctrl+Shift+R.
+- Sur MacOS : Shift+Command+R.
+- Safari sur MacOS : Option+Command+E pour vider le cache, puis Option+Command+R.
+- Sur mobile : allez dans les paramètres du navigateur (Android) ou du système d'exploitation (Samsung, iOS) : dans les réglages avancés, trouvez le paramètre associé au navigateur (iOS) ou aux données des sites web (Android, Samsung), puis supprimer les données pour CycleTracker, avant de recharger la page.
+
+### En utilisant les outils de développement
+
+En général, on préfère éviter d'avoir à mettre à jour le numéro de version à chaque enregistrement dans son éditeur. Avant que vous ayez une nouvelle version de votre PWA prête à être déployée en production et diffusée à tout le monde, vous pouvez désinscrire le service worker plutôt que de modifier le numéro de version.
+
+Vous pouvez désinscrire un service worker en cliquant sur le bouton « Désinscrire » dans [les outils de développement du navigateur](/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools). En effectuant ensuite un rafraîchissement forcé, la page réinscrira le service worker et créera un nouveau cache.
+
+![Capture d'écran du panneau Applications des outils de développement de Firefox avec un service worker arrêté et le bouton Désinscrire](firefox_sw.jpg)
+
+Dans certains outils de développement, il est possible de désinscrire manuellement un service worker, ou de sélectionner les service workers à mettre à jour lors d'un rechargement, ce qui permet de réinitialiser et de réactiver le service worker à chaque rechargement, tant que les outils de développement sont ouverts. Il existe également une option pour passer outre le service worker et charger les ressources depuis le réseau. Ce panneau contient d'autres fonctionnalités que nous n'avons pas abordées dans ce tutoriel, mais qui pourront vous aider lorsque vous créerez des PWA plus avancées avec [la synchronisation](/fr/docs/Web/Progressive_web_apps/Guides/Offline_and_background_operation#periodic_background_sync) et [les messages poussés](/fr/docs/Web/Progressive_web_apps/Guides/Offline_and_background_operation#push), qui sont abordés [dans le guide sur les opérations hors-ligne et en arrière-plan](/fr/docs/Web/Progressive_web_apps/Guides/Offline_and_background_operation).
+
+![Capture d'écran des outils de développement de Edge montrant le panneau des applications dans le contexte d'un service worker](edge_sw.jpg)
+
+Dans l'onglet Application, la fenêtre dédiée aux service workers fournit un lien pour accéder à une fenêtre modale listant tous les service workers du navigateur (et pas uniquement celui de l'application de l'onglet courant). Pour chaque service worker, on a un bouton pour l'arrêter, le démarrer, ou le désinscrire.
+
+![Capture d'écran de la fenêtre listant tous les service workers, on voit deux service workers qui existent pour localhost:8080. On peut les désinscrire à partir de cette fenêtre](edge_sw_list.jpg)
+
+Autrement dit, quand vous travaillez sur votre PWA, vous n'avez pas à mettre à jour le numéro de version pour chaque test de votre application. Attention toutefois, quand vous avez fini vos développements, assurez-vous de mettre à jour la valeur de `VERSION` avant de distribuer la mise à jour de votre PWA. Si vous oubliez ce point, toutes les personnes qui auront déjà installé l'application ou visité votre PWA en ligne ne verront pas votre mise à jour !
+
+## Et c'est fini !
+
+Pour synthétiser, une PWA est une application web qui peut être installée et qui est améliorée progressivement pour fonctionner hors-ligne. Nous avons ici créé une application web complètement fonctionnelle, à laquelle nous avons ajouté deux fonctionnalités : un manifeste et un service worker, ce qui permet d'en faire une PWA. Si vous souhaitez partager votre application avec d'autres, il faut qu'elle soit disponible via une connexion sécurisée. Sinon, si vous souhaitez utiliser CycleTracker pour vous-même, vous pouvez [créer un environnement de développement local](/fr/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/Secure_connection), [installer la PWA](/fr/docs/Web/Progressive_web_apps/Guides/Installing), et c'est tout ! Une fois que l'application est installée, vous n'avez même plus besoin d'exécuter un serveur local.
+
+Félicitations !
+
+{{PreviousMenu("Web/Progressive_web_apps/Tutorials/CycleTracker/Manifest_file", "Web/Progressive_web_apps/Tutorials/CycleTracker")}}