web-dev-qa-db-fra.com

Comment forcer le technicien de service à mettre à jour?

J'utilise sw-precache pour générer mon travail de service avec Polymer Processus de construction CLI, il est donc destiné à mettre à jour le hachage des fichiers mis à jour pour signaler la nécessité de mettre à jour le cache. Mais mon contenu mis à jour n'est pas remplacé dans le cache, il obtient donc une ancienne version si je rafraîchis avec ctrl + r mais la nouvelle version si je rafraîchis avec ctrl + shift + r. Cela peut être dû au fait que mon technicien de service n'est pas mis à jour.

Ce document déclare que

S'il y a même une différence d'un octet dans le fichier du travailleur de service par rapport à ce qu'il a actuellement, il le considère comme nouveau.

, mais que se passe-t-il si mon nouvel employé de service ne change pas un octet? (comme cela se produit si un seul hachage a changé). Comment configurer le sw-precache pour mettre à jour le travail de service à chaque nouvelle demande?

12
Jp_

Si le hachage d'un fichier change, cela suffit pour garantir que le fichier JavaScript du service worker généré par sw-precache changements. Cela, à son tour, suffit à déclencher le flux de mise à jour du service worker.

Si vous ne voyez pas de flux de mise à jour déclenché lors des tests, cela peut être dû au fait que le fichier JavaScript du service worker est servi avec des en-têtes de mise en cache HTTP qui le font extraire du cache du navigateur plutôt que du réseau.

Voir https://stackoverflow.com/a/38854905/385997 pour une discussion sur la façon dont les en-têtes de mise en cache HTTP entrent en jeu, et les meilleures pratiques à cet égard.

10
Jeff Posnick

'sw-precache' a été remplacé par Workbox qui génère des hachages pour les fichiers que vous souhaitez précacher et les ajoute au code source de votre technicien de service (je ne sais pas si sw-precache fonctionne de la même manière, la réponse de Jeff suggère que c'est le cas). Si l'un des fichiers que vous souhaitez précacher change - et que vous réexécutez votre build - les hachages mis à jour dans votre technicien de service sont mis à jour, ce qui garantit à peu près que le technicien de service sera "au moins un octet différent".

Lorsque vous rechargez (ctrl-r) ou revisitez votre application, le navigateur récupérera le technicien de service qui y était inscrit. Et, si cet employé de service a changé, il sera "mis en file d'attente" pour gérer l'application. Mais il ne commencera à gérer l'application que lorsque vous fermerez tous les onglets avec l'application ouverte, puis en ouvrirez un nouveau.

Lorsque vous actualisez (shift-ctrl-r) il se chargera toujours sans contrôleur ce qui n'est pas la même chose que d'utiliser votre nouveau technicien de maintenance.

Pour les tests pendant le développement, j'utilise ignorer l'attente dans devtools pour que le nouveau technicien remplace l'ancien sans attendre que je ferme tous les onglets.

10
Bitterjug

Comme indiqué dans les réponses précédentes, il existe une limite intégrée de 1 jour (24 heures) pour que le navigateur recherche les mises à jour pour le technicien de service, mais ce dont vous devez être conscient, c'est que vous devez toujours appeler .update() sur votre objet ServiceWorkerRegistration sinon la version originale du fichier sera utilisée.

Lors du test des modifications dans Chrome, je clique toujours avec le bouton droit sur le bouton d'actualisation et sélectionne `` Vider le cache et réinitialisation matérielle '' (les options sont disponibles lorsque les outils de développement sont ouverts) lorsque je travaille sur mon script de service worker.

9
jcaruso