web-dev-qa-db-fra.com

Chrome DevTools "désactiver le cache": que fait-il en dehors de rien (pour les scripts de service worker)

J'essaie de tester le comportement de mon site en supposant que le cache de disque local est vide. Je sais qu'il existe des moyens d'effacer le cache et de faire Ctrl-F5, etc. à chaque fois, mais il y a aussi une case à cocher "Désactiver le cache" dans l'onglet Réseau qui semble être devrait faire ce que je recherche après .. c'est-à-dire désactiver le cache.

Mais, lorsque j'efface le cache, active cette option et que F5 recharge mon site plusieurs fois, voici ce que je vois:

 enter image description here

La ressource a été mise en cache et est servie à partir du cache, même si "désactiver le cache" est activé! Alors, que fait cette option?

MODIFIER

Peut-être que ce comportement que je constate concerne uniquement la mise en cache de scripts de service worker? Si vous chargez cette page (un exemple lié à ce guide aux ouvriers du service), au moins pour moi le fichier sw.js est récupéré à partir de la mémoire cache du disque même avec l'option "désactiver la mémoire cache" activée.

8
drmrbrewer

Question interessante!

Dans la capture d'écran que vous avez fournie, la colonne Name est coupée. Par conséquent, je ne peux pas dire quelle ressource est encore servie à partir du cache disque. Je suppose que c'est un script de service worker, basé sur la description de votre "EDIT".

La question à laquelle je répondrai alors est la suivante: "Comment les scripts du serveur de mise en cache du navigateur fonctionnent-ils?"

  1. Lorsqu'un logiciel est enregistré, le navigateur enregistre le script dans une base de données distincte dans le cache du disque. Je l'appellerai simplement base de données SW, mais notez que ce n'est pas un terme officiel. Notez que si l'agent de service appelle importScripts(), ces scripts sont également stockés dans la base de données SW. Notez également que lorsqu'un navigateur de service est mis à jour, le navigateur remplace le script actuellement stocké dans la base de données SW par le nouveau script. Ceci est la mise en œuvre Chrome , d'autres navigateurs peuvent le faire différemment. 1
  2. Chaque fois que vous chargez la page, le navigateur émet une requête invisible (c'est-à-dire que vous ne pouvez pas le voir dans DevTools) pour savoir s'il existe des mises à jour du script de l'agent de maintenance. IMO, DevTools devrait exposer cette requête afin que les développeurs aient une meilleure idée du cycle de vie du logiciel .
    • Si un octet du script est différent, le navigateur met à jour le script SW dans la base de données SW.
    • Si le script SW n'a pas changé, le navigateur le sert uniquement à partir de la base de données SW. This est la requête que vous voyez dans DevTools. OMI, il est trompeur que DevTools décrit cette demande en tant que (from disk cache). Idéalement, il devrait avoir un autre nom pour indiquer que ce cache n'est pas affecté par la case à cocher Disable Cache.

Donc, dans ce cas, vous avez raison: la case à cocher Disable cache ne fait rien. Si vous voulez vous assurer que votre cache est complètement effacé (y compris les tâches de l'agent de service):

  1. Accédez au volet Clear Storage , assurez-vous que toutes les cases à cocher sont activées, puis cliquez sur Clear Site Data.
  2. Alors que DevTools est toujours ouvert, appuyez longuement sur le bouton Reload de Chrome, puis sélectionnez Vider Cache et Hard Reload. Voir https://stackoverflow.com/a/14969509/1669860 pour une explication de ces différentes options.

    Empty cache and hard reload

1 J'ai reçu cette information d'Alex Russell, ingénieur Chrome et co-auteur de la spécification service worker

11
Kayce Basques

En plus de l'option de désactivation du cache, vous pouvez maintenant cliquer avec le bouton droit de la souris sur le volet réseau des outils de développement et choisir "Effacer le cache" dans le menu contextuel.

Vous pouvez également utiliser ce plug-in si vous devez effacer le cache fréquemment: https://chrome.google.com/webstore/detail/jpfbieopdmepaolggioebjmedmclkbap

1
mrid