Technique simple côté client
En général, la mise en cache est une bonne chose... Il existe donc deux techniques, selon que vous corrigez le problème pour vous-même en développant un site Web, ou que vous essayez de contrôler le cache dans un environnement de production.
Les visiteurs généraux de votre site Web ne vivront pas la même expérience que vous lorsque vous le développez. Étant donné que le visiteur moyen vient moins souvent sur le site (peut-être seulement quelques fois par mois, à moins que vous ne soyez un Google ou un Hi5 Networks), il est moins probable qu'il ait vos fichiers en cache, et cela peut suffire.
Si vous voulez imposer une nouvelle version au navigateur, vous pouvez toujours ajouter une chaîne de requête à la demande et augmenter le numéro de version lorsque vous apportez des modifications importantes :
<script src="/myJavascript.js?version=4"></script>
Cela permettra à tout le monde de recevoir le nouveau fichier. Cela fonctionne parce que le navigateur examine l'URL du fichier pour déterminer s'il en a une copie dans le cache. Si votre serveur n'est pas configuré pour faire quoi que ce soit avec la chaîne de requête, elle sera ignorée, mais le nom ressemblera à un nouveau fichier pour le navigateur.
D'un autre côté, si vous développez un site web, vous ne voulez pas changer le numéro de version à chaque fois que vous enregistrez une modification de votre version de développement. Ce serait fastidieux.
Ainsi, pendant que vous développez votre site, une bonne astuce serait de générer automatiquement un paramètre de chaîne de requête :
<!-- Development version: -->
<script>document.write('<script src="/myJavascript.js?dev=' + Math.floor(Math.random() * 100) + '"\><\/script>');</script>
L'ajout d'une chaîne de requête à la demande est un bon moyen de versionner une ressource, mais pour un site web simple, cela peut être inutile. Et n'oubliez pas que la mise en cache est une bonne chose.
Il convient également de noter que le navigateur n'est pas nécessairement avare de fichiers dans le cache. Les navigateurs ont des politiques pour ce genre de choses, et ils respectent généralement les règles définies dans la spécification HTTP. Lorsqu'un navigateur envoie une requête à un serveur, une partie de la réponse est un fichier de type Expiration : ... une date qui indique au navigateur combien de temps il doit rester dans le cache. La prochaine fois que le navigateur rencontre une demande pour le même fichier, il voit qu'il en a une copie dans le cache et se tourne vers l'en-tête Expiration : pour décider s'il faut l'utiliser.
Croyez-le ou non, c'est en fait votre serveur qui rend le cache du navigateur si persistant. Vous pouvez ajuster les paramètres de votre serveur et changer le Expiration : mais la petite technique que j'ai écrite ci-dessus est probablement une façon beaucoup plus simple pour vous de procéder. Puisque la mise en cache est une bonne chose, vous voulez généralement fixer cette date loin dans le futur (un "Far-future Expires Header"), et utiliser la technique décrite ci-dessus pour forcer un changement.
Si vous souhaitez obtenir plus d'informations sur HTTP ou sur la manière dont ces requêtes sont effectuées, un bon livre est "High Performance Web Sites" de Steve Souders. Il s'agit d'une très bonne introduction au sujet.
0 votes
Je l'ai mis dans mon .htaccess, et je n'ai jamais eu de problèmes avec les fichiers en cache :
ExpiresActive On ExpiresDefault "modification"
.2 votes
Je suis tout à fait d'accord pour dire que l'ajout d'informations sur les versions à l'URL du fichier est de loin la meilleure solution. Cela fonctionne, tout le temps, pour tout le monde. Mais, si vous ne l'utilisez pas, et que vous avez juste besoin de recharger ce fichier CSS ou JS de temps en temps dans votre propre navigateur... ouvrez-le dans son propre onglet et appuyez sur SHIFT-reload (ou CTRL-F5) ! Vous pouvez faire la même chose en utilisant JS en chargeant un fichier dans une iframe (cachée), en attendant qu'il se charge, puis en appelant
iframe.contentWindow.location.reload(true)
. Voir la méthode (4) de stackoverflow.com/a/22429796/999120 - il s'agit d'images, mais la même chose s'applique.3 votes
J'apprécie vraiment la façon dont cette question a été posée et a été mise à jour depuis. Elle décrit complètement ce à quoi je dois m'attendre dans les réponses. Je vais suivre cette approche dans mes questions à partir de maintenant. À la vôtre !
1 votes
Pour référence : Réponse supprimée de da5id's es "Si une mise à jour est suffisamment grande/importante, je change généralement le nom du fichier." .
0 votes
Si les changements ne sont pas très fréquents, j'ai une suggestion. Changez simplement le nom du fichier et modifiez le code source pour inclure le nouveau nom de fichier. Ainsi, il n'y a pas de fichier en cache à lire par le navigateur.