Tu as corrigé, mais l'écran ne change pas — le fonctionnement du cache

Cet article fait partie du cours Les bases de l'informatique, qui construit depuis zéro les connaissances informatiques pratiques indispensables pour programmer et faire du vibe coding.
Si une correction ne s'affiche pas, c'est qu'une ancienne copie subsiste quelque part. Des schémas montrent comment isoler la cause entre le navigateur, le CDN et le serveur public, et comment faire arriver un changement à coup sûr.

Cet article traite du cas où tu as corrigé, mais l'écran ne change pas.

Tu as corrigé le code et déployé, mais quand tu ouvres la page, c'est encore la version précédente.

La cause n'est en général pas le code, mais une ancienne copie qui subsiste quelque part.

Quand une correction ne s'affiche pas, une ancienne copie se trouve quelque part
Corrigé, maisrien ne changeTon navigateurLa distributionLe serveur publicRechargerFaire supprimer la copieRedéployerToi seulTout le mondeTout le monde
À gauche, le symptôme. Une ancienne copie subsiste dans l'un des trois endroits du milieu, et à droite se trouve la façon de l'effacer. Tout à droite, qui voit l'ancienne version dans chaque cas.

Selon que tu es le seul à voir l'ancienne version ou que tout le monde la voit, tu sais où elle subsiste.

Qu'est-ce qu'un cache — renvoyer une copie gardée au lieu d'aller la rechercher

Le cache (cache : un mécanisme qui garde à proximité ce qui a été récupéré une fois et qui, ensuite, le renvoie sans aller le rechercher) existe pour ne pas aller chercher la même chose encore et encore.

Ce qui a été récupéré une fois est gardé à portée de main, et à partir de la deuxième fois, c'est cela qui sert.

En échange de la rapidité, il existe un laps de temps pendant lequel la mise à jour passe inaperçue.

Cette durée de conservation est la durée de validité (max-age : le temps pendant lequel une copie gardée peut servir sans aller la rechercher).

Tant que la durée de validité n'a pas expiré, la copie locale continue de servir même si tu corriges le serveur.

Plus une chose change rarement, comme les images et le CSS, plus la durée est réglée longue.

La même correction donne un résultat différent selon qu'on est dans la durée de validité ou en dehors
Corriger app.csssur le serveurOuvrir pendantla validitéUtiliser la copielocaleLa correctionn'apparaît pasOuvrir aprèsla fin de validitéRécupérer ànouveau au serveurLa correctionapparaît
À gauche, le moment où tu as corrigé côté serveur. Les branches du haut et du bas diffèrent selon que l'écran a été ouvert pendant ou après la durée de validité, et ce qui s'affiche change.

Une correction ne s'affiche pas tant que la durée de validité n'a pas expiré.

Le cache renvoie une ancienne copie

Un cache garde à proximité ce qui a été récupéré une fois et le renvoie ensuite.

C'est plus rapide, puisqu'il ne va pas chercher à chaque fois, mais il ne remarque pas la mise à jour du serveur entre-temps : d'où la correction qui ne s'affiche pas.

Les trois endroits où se pose une copie — chez toi, en cours de distribution, dans le serveur

Une copie ne se pose pas à un seul endroit.

Il y a trois endroits, imbriqués, du plus proche de l'utilisateur vers l'extérieur.

Le plus intérieur, la copie que détient ton propre navigateur, est le cache du navigateur (browser cache).

Les trois endroits où une ancienne copie peut subsister
Les endroits traversés avant l'apparition de l'écran
1. Dans le navigateur de l'utilisateur (cache du navigateur)
  • Ne subsiste que sur l'appareil de cette personne
  • Un rechargement permet de la récupérer à nouveau
  • C'est ici quand tu es le seul à voir l'ancienne version
2. Dans le système de distribution (CDN)
  • Une copie posée près de l'utilisateur
  • Tout le monde voit la même ancienne version
  • Subsiste jusqu'à ce que tu la fasses supprimer
3. Dans le serveur public
  • Les fichiers générés que tu y as posés
  • Si le déploiement a échoué, c'est encore l'ancienne version
  • Si c'est ancien ici, tout le monde voit l'ancienne version
Plus c'est à l'extérieur, plus c'est loin. En vérifiant de l'intérieur, au plus près de l'utilisateur, vers l'extérieur, tu vois où ça bloque.

Le deuxième, le CDN (Content Delivery Network : un mécanisme qui pose des copies près des utilisateurs et les distribue depuis là), est intégré d'origine dans beaucoup de cibles de déploiement.

Ces trois endroits diffèrent par la façon de les effacer et par la portée de l'effet.

L'opération qui fait supprimer la copie du CDN est la purge : supprimer la copie que détient le système de distribution et la faire récupérer à nouveau.

Certaines configurations purgent automatiquement à chaque déploiement.

Ce qu'est un rechargement forcé

Avec un rechargement ordinaire, la copie locale sert parfois telle quelle.

L'opération qui force une nouvelle récupération s'appelle le rechargement forcé (hard reload) ; si tu veux seulement vérifier, ouvrir la page dans une fenêtre qui ne garde pas d'historique fait la même chose.

Isoler la cause selon que tu es le seul à voir l'ancienne version ou que tout le monde la voit

Plutôt que d'essayer les trois endroits de haut en bas, vérifier d'abord la portée va plus vite.

Ce que tu regardes, c'est si d'autres personnes que toi voient aussi l'ancienne version.

Qui voit l'ancienne version détermine où est la cause
Les autres voientaussi l'ancien ?Toi seul le voisTous le voientRechargerde ton côtéVérifier le CDNet les fichiers
À gauche, ce qu'il faut vérifier. Si tu es le seul à voir l'ancienne version, c'est chez toi ; si tout le monde la voit, c'est plus loin. À droite, l'opération à faire ensuite.

Si tu es le seul, la cause n'est nulle part ailleurs que dans ton propre navigateur.

Si les autres voient aussi l'ancienne version, tu auras beau recharger de ton côté, rien ne changera.

Le cas du bas est celui où les nouveaux fichiers ne sont jamais arrivés jusqu'au serveur public.

Si le build a échoué, ce sont encore les fichiers générés précédents qui sont publiés.

Une correction obtenue par un rechargement n'est pas forcément une solution

Recharger de ton côté te donne la nouvelle version, mais cela n'a fait que remplacer la copie de ta seule machine.

Sur les appareils des utilisateurs, l'ancienne copie reste jusqu'à l'expiration de la durée de validité.

Changer le nom du fichier empêche l'ancienne copie de servir

Plutôt que de passer partout pour effacer, il existe un moyen d'empêcher purement et simplement que l'ancienne copie serve.

Il consiste à changer le nom du fichier en même temps que son contenu.

Remplacer sous le même nom, ou changer aussi le nom
Corriger le contenud'app.jsRedéployer sousle même nomChanger le nomapp.a1b2.jsLa copie localeest utiliséeAbsente en local,donc récupérée
En haut, seul le contenu change sous le même nom, et la copie locale sert telle quelle. En bas, le nom change, donc le fichier est traité comme absent en local et il est récupéré.

Si tu remplaces une partie du nom du fichier par des caractères calculés à partir du contenu, le nom change chaque fois que le contenu change.

Si le nom est différent, la copie locale est un autre fichier et elle ne sert pas.

Ce travail de nommage est fait automatiquement au moment du build.

Tu n'as pas besoin d'inventer les noms toi-même.

FichierFaçon de le nommerFaçon de fixer la durée de validité
index.htmlNe change pasLa rendre courte
app.a1b2.jsLe nom change quand le contenu changeElle peut être longue
Ressources comme les imagesLe nom change quand le contenu changeElle peut être longue

Seul index.html, le point d'entrée, ne peut pas changer de nom : tu gardes donc sa durée de validité courte.

Dès que les noms des fichiers qu'il charge sont nouveaux, tout le reste arrive automatiquement dans sa nouvelle version.

Dès que c'est trouvé à une étape antérieure, la recherche ne va pas plus loin.

Donc si un seul endroit détient encore une ancienne copie, la nouvelle version n'arrive pas.

Changer le nom est plus sûr que de passer partout pour effacer

Si le nom du fichier change en même temps que son contenu, la copie locale est un autre fichier et elle ne sert pas.

Ce nommage est fait automatiquement par le build : tu gardes donc une durée de validité courte seulement pour le fichier d'entrée, dont le nom ne peut pas changer.

QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Tu as redéployé, mais ton navigateur affiche encore l'ancien écran. Sur un autre appareil, il est à jour. Où est la cause ?

Question 2Que fait le navigateur quand la durée de validité du cache n'a pas expiré ?

Question 3Que se passe-t-il si tu fais en sorte que le nom du fichier change dès que son contenu change ?