2026 Acceptation front sur Mac distant :
Service Worker — stratégie de mise à jour, caches Safari, canari et retour arrière + checklist en trois temps
Public : équipes PWA / service worker avec actifs hachés. CI Chromium seule = angles morts WebKit et partitionnement. Ce billet livre un tableau Safari vs Chromium, une matrice canari / rollback, des règles pour skipWaiting et clients.claim, un contrat de préfixe et un flux Mac distant. Liens : déploiement + Safari, HTTP/3 double navigateur, CSP / nonces.
01 Tableau des écarts Safari / WebKit et Chromium
Trois douleurs : (1) onglets coincés sur un worker ancien ; (2) Safari « collé » après purge CDN — HTTP + Cache Storage ≠ Chromium ; (3) canari sans fiche rollback entre sw.js et drapeaux.
| Sujet | Safari / WebKit | Chromium |
|---|---|---|
| Install → waiting | Contrôles parfois lents à froid ; panneau SW + Vider les caches entre essais. | États clairs ; Update on reload = dev uniquement. |
| Cache Storage | Quota / éviction différents ; gros précache ⇒ rejets silencieux dans install. |
Labo plus lisible ; surveillez réponses opaques cross-origin. |
| Navigation preload | Feature-detect + log booléen à l’activation. | Souvent là ; masque parfois la latence API. |
| Tiers et iframes | ITP / partitionnement ⇒ iframes et login tiers = tests séparés. | Partitionnement resserré aussi — pas de cache magique. |
| Signal skipWaiting | Swap d’actifs inattendu ⇒ UI de version. | Pareil ; télémétrie controllerchange. |
Alignez les en-têtes : CSP / nonces Safari. En release train, notez dans le ticket la phrase d’acceptation : « même origine, même RELEASE_ID, profils froids » pour éviter les débats sur ce qui était réellement déployé au moment du screenshot.
Matrice canari versus retour arrière
| Scénario | Action canari | Action de retour arrière |
|---|---|---|
| Mauvaise liste de précache | Nouveau worker, STATIC_PREFIX + routes réduites ; anciens caches RO. |
Republier sw.js stable, caches.delete ciblé si besoin. |
| Cache runtime empoisonné | Caches runtime par version API + drapeaux. | Couper version, purge namespace dans activate, reload doux. |
| Choc à l’activation | Pas de skipWaiting auto ; toast sur waiting. |
Hotfix skipWaiting sous astreinte puis politique normale. |
02 Vérifications avant mise en production
Préfixe : APP_SLUG + RELEASE_ID (SHA / semver) + canal → ex. acme-7f3c1b9-static / …-runtime. Après rollback, ne recyclez pas un préfixe servi : bump RELEASE_ID pour la télémétrie.
skipWaiting : auto seulement si coquille statique ou kiosque ; SaaS ⇒ geste user ou postMessage avant activation.
clients.claim : dans activate si besoin de contrôle immédiat des onglets (patch critique) ; sinon risque de handlers mélangés sur formulaires longs.
Checklist trois temps avant prod :
- Contrat. Scope exact, navigation preload oui/non, plafond précache en mébioctets, liste des routes no-store et des réponses ne devant jamais entrer dans
caches.open. - Double install auto. Tests unitaires sur handlers, puis Playwright WebKit et Chromium qui lisent la bannière
RELEASE_IDet confrontent l’URL du script actif au manifeste attendu. - Rollback réel. Déployer un worker volontairement défectueux sur préproduction, appliquer la ligne correspondante de la matrice, chronométrer le retour d’un onglet témoin jusqu’à état sain.
Artefacts : HAR / traces ; joindre au ticket le hash du bundle et l’identifiant de purge CDN pour relier build et réseau.
Références opposables : politique d’activation signée produit ; budget mémoire précache ; bannière de build visible dans l’UI ou la console pour corréler support et ingénierie.
03 Flux de validation sur appareil réel distant
- Slot Apple Silicon. Mac distant, patch OS aligné prod, Safari + Chrome/Edge.
- Profil froid. Fermer onglets origine, vider caches Safari + données site Chromium, double chargement canari.
- État waiting. Seconde build,
waiting, politique prod, hachages réseau. - Hors ligne court. Vérifier
fetch/ fallbacks vs préfixe actif. - Preuve. Captures Storage, URL
sw.js, changelog + id purge CDN.
Une heure sur Mac distant coûte moins qu’un revert en pleine fenêtre marketing.
FAQ Web Inspector pour le pairage distant : sans elle, on perd du temps sur certificats, déconnexions VNC ou cibles iOS non alignées avec le bureau.
04 FAQ
Quand appeler skipWaiting automatiquement ?
Coquilles statiques ou recette interne ; sinon refresh guidé pour éviter HTML ancien + worker neuf. Si vous instrumentez déjà les erreurs JS, ajoutez un compteur sur controllerchange pour voir combien d’utilisateurs subissent une activation surprise.
clients.claim est-il obligatoire après activate ?
Si contrôle immédiat requis ; sinon laisser finir le parcours — surprise fréquente sous Safari.
Pourquoi Safari semble en retard sur Chromium ?
Caches HTTP + SW + partitionnement ≠ Chromium ; même build, caches froids, logs CDN.
unregister suffit-il à chaque incident ?
Exercice OK, brutal hors ligne ⇒ préfixes + caches.delete ciblé.
05 Conversion
Besoin de parité Safari / Chromium sur Apple Silicon ? Réservez un Mac distant, puis tarifs, aide, achat / location sans compte.
Louez un Mac distant pour la signature Safari + Chromium
Validez install, attente et activation sur Apple Silicon réel, annexez les preuves de cache et fermez les tickets release plus vite qu’en expédiant du matériel. Les forfaits MacWww combinent shell, navigateurs et captures sur une machine proche de vos utilisateurs finaux. Parcourez tarifs et aide sans connexion, puis achat / location pour une fenêtre d’acceptation dédiée.