Je teste un code html/js sur mon hôte local (Windows 7, Chrome v79.0.3945.130 (64 bits)) et environ 50% des changements de code temporel ne sont pas reflétés dans le navigateur (Je le vois avec Dev Tools/Sources).
Il existe une tonne de conseils sur Internet, mais aucun ne semble fonctionner:
<meta http-equiv="Cache-control" content="no-cache">
dans l'en-tête - n'aide pas.<script src="common.js"></script>
par <script src="common.js?blabla"></script>
- aide dans 60% des cas, mais vous devez le faire après chaque changement est une énorme corvée. De plus, cela ne fonctionne pas avec les modifications html.Le même problème exactement présent lorsque je valide le code dans github.io
S'il vous plaît, aidez-moi à faire en sorte que le site reflète immédiatement les changements de code.
Edit: j'ai créé un fichier index3.html et n'y ai mis que "hello world". Ouvert le fichier dans le navigateur. Changé en "hello world2" - le navigateur a mis à jour le contenu. Changé en "hello world3" - le navigateur montrait toujours "hello world2" même après plusieurs rechargements et "Cache vide et rechargement dur". J'ai changé pour "hello world4" - le navigateur montrait toujours "hello world2". En 4 heures, je suis passé à "hello world5" - le navigateur affiche toujours "hello world2". Ce fichier que j'ai édité avec le bloc-notes de base.
Edit2: Les gens demandent toujours quel serveur j'utilise. Cela ressemble à une partie du problème. Malheureusement, je ne sais pas et je ne sais pas non plus exactement ce que je dois faire pour le vérifier. Voici tout ce que j'ai découvert jusqu'à présent:
inetpub/wwwroot
répertoire dans lequel je place les fichiers html et js, puis j'ouvre index.html dans un navigateur à http://localhost/
.inetpub/wwwroot
et quand j'ouvre http://localhost/iisstart.htm
il indique IIS7.Utiliser un paramètre est la bonne façon! Ici, vous pouvez ajouter un numéro de version que vous modifiez uniquement lors de modifications importantes manuellement et pour le débogage, vous pouvez le définir sur Date.time () donc dans votre balise <head>, cela force toutes les versions mises en cache à être écrasées car le paramètre est toujours un nouveau une:
< script type="text/javascript">
var script = document.createElement('script');
var version = Date.time();
script.src = "common.js?v="+version;
document.head.appendChild(script)
< /script>
J'espère que cela t'aides!
Dans le serveur Windows IIS7 fonctionnant sous Windows 7, pour empêcher la mise en cache de votre contenu, vous devez apporter quelques modifications à l'un de vos fichiers de configuration appelé web.config
. Les fichiers de configuration pour IIS 7 et versions ultérieures sont situés dans %WinDir%\System32\Inetsrv\Config folder
où %WinDir%
est le dossier dans lequel vous avez installé Windows (généralement C:/Windows
).
Créez une copie de sauvegarde de votre web.config
fichier avant de le modifier pour pouvoir y revenir si les modifications que vous apportez au fichier le cassent.
Dans votre web.config
fichier, ajoutez simplement ce qui suit pour empêcher la mise en cache de votre index.html
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<location path="index.html">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
</configuration>
Vous avez le chemin du fichier pour le web.config
fichier d'ici: Windows Doc: référence de configuration
Vous avez la configuration pour le cache ci-dessus à partir d'ici: Comment désactiver la mise en cache du fichier HTML d'application d'une seule page servi via IIS?
J'ai eu le même problème et voici ma liste de contrôle:
<%Response.Expires=1440%>
dans de nombreuses lignes de ASP et il surmontait tous les autres paramètres! En php session_cache_expire
mai fait de même.http-equiv="Cache-control"
dans les en-têtes html (vous avez réussi ce test!).Enfin, je dois dire que dans toutes les situations ci-dessus, la vérification Désactiver le cache dans newtwork tab dans Chrome Chrome a toujours fonctionné pour moi pour afficher un nouvelle version des pages mais cela n'est bon qu'à des fins de débogage et les visiteurs ne le feront pas!
Chrome fait cette chose où, si le fichier n'a pas trop changé, ne sachant pas ce que cela signifie, il utilisera la version de cache "compilée". Pour html, cela signifie arbre de don analysé. Pour le code précompilé JS, etc.
Il existe généralement des moyens de résoudre ce problème, de nombreux frameworks utilisent le hachage à l'intérieur des noms de fichiers, comme: main.md5hash.js
, car la modification du nom de fichier invalide tout cache.
Ensuite, vous serez laissé avec éventuellement html pas de mise à jour. Et pour être clair, je ne suis pas sûr, vous pouvez toujours ajouter un commentaire avec un blob aléatoire ... comme une date.
Sur la base des mises à jour de votre réponse, je dirais que votre problème est dû à IIS v7 qu'il utilise votre PC Mémoire pour mettre en cache pas votre disque dur local c'est pourquoi Hard reload
et toutes les autres méthodes semblent ne pas fonctionner correctement.
Je pourrais penser à 3 solutions:
1. Correction de votre IIS: (Non testé en raison du fait que je n'ai pas de PC avec IIS)
extension
s sur lequel vous souhaitez désactiver le cache, c'est-à-dire .aspx
, .css, .js etc ... (un à la fois je suppose?)Source de la solution - En savoir plus sur Cache IIS 7
2. Utilisation de certaines alternatives à IIS Il y en a plusieurs mais je recommanderais (en fonction de mes expériences) WAMP ou - XAMPP Les deux vous offriront un meilleur "environnement" de développement et les deux prennent en charge Windows 7. De plus, si vous connaissez VS Code vous pouvez simplement utiliser l'extension Live Server .
3. Utilisez le mode Chrome Incognito pendant le développement. (Je ne sais pas si cela fonctionne pour IIS7)
Dans le cas spécifique de l'utilisation de Google Chrome, essayez ceci: Ouvrez Dev Tools -> Go to 'Network' tab. Cochez la case "Désactiver le cache", après cela actualisez la page.
REMARQUE: pour que cela fonctionne à chaque fois, la fenêtre Dev Tools DOIT rester ouverte à tout moment.
Cependant, afin de propager les modifications à vos utilisateurs, sans les obliger à actualiser en dur la page, etc., vous devez ajouter des versions de fichiers à la fin de chaque fichier référencé pour les fichiers qui changent fréquemment (comme vous l'avez souligné). Par exemple:
<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=20b379f72a37" >
Le v=20b379f72a37
ajouté à la fin est un hachage de fichier généré automatiquement du contenu du fichier.
C'est un long plan - mais quel type d'éditeur/IDE utilisez-vous? En outre, quel type de modifications apportez-vous à votre index.html?
Pourriez-vous fournir des exemples de telles modifications qui ne se reflètent pas lorsque vous enregistrez et essayez de charger le fichier?
Je voudrais essayer de reproduire votre problème. D'après ce que les gens suggèrent, il ne semble pas que le problème soit dans le code lui-même. Je soupçonne que c'est un problème environnemental mais j'aurais besoin de plus d'informations de votre part pour confirmer mes soupçons.
C'est probablement très frustrant et cela ne ressemble pas à ce que vous faites de mal.
Le problème est probable que quelque chose entre votre navigateur et le fichier de script que vous appelez effectue une mise en cache.
Pour déterminer de quoi il s'agit, permettez-moi de vous demander comment vous accédez à l'URL localhost?
Exemples:
file://path/to/file.html
http://localhost/file.html
http://127.0.0.1/file.html
http://[machine's-hostname]/file.html
http://[custom-domain-defined-in-hosts-file]/file.html
Si vous exécutez file://path/to/file.html
cela signifie que vous ne parcourez pas un serveur Web/proxy. Si c'est http://[something]/file.html
alors vous utilisez une sorte de serveur web et c'est probablement le coupable. Recherchez une sorte de paramètre où vous pouvez désactiver la mise en cache.
Si vous n'utilisez pas de serveur Web et que vous naviguez littéralement directement vers un fichier html local sans serveur Web, je dirais que le navigateur est le coupable. Si tel est le cas, je suggère de désactiver la mise en cache du navigateur comme Martin Shishkov suggéré.
Ce que vous écrivez en méta HTML est une recommandation aux navigateurs, pas une instruction stricte. Si la mise en cache stricte est activée dans le navigateur, cela n'aidera pas.
Les solutions sont bien décrites: https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/
Je préfère côté serveur ajouter aux scripts la version avec la date de la dernière mise à jour du fichier lui-même.
<script src="/myScript.js?v=1579780745150"></script>
Où 1579780745150 est l'horodatage Unix met à jour le fichier myScript.js lui-même. Il ne fonctionne qu'avec ses propres fichiers, mais les fichiers externes ne sont pas nécessaires. Le plus souvent dans le nom de fichier est la version.