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 y a une tonne de conseils sur Internet, mais aucun ne semble fonctionner:
- Faites un clic droit sur le rechargement et choisissez "Cache vide et rechargement dur" - n'aide pas dans 30% des cas.
- Désactiver le cache dans l'onglet Réseau des outils de développement Chrome - n'aide pas.
- Ajouter
<meta http-equiv="Cache-control" content="no-cache">
dans l'en-tête - n'aide pas. - Remplacer
<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. En outre, cela ne fonctionne pas avec les modifications html. - Copiez un fichier dans un nouveau fichier (comme index.html vers index2.html) et remplacez le nom de fichier dans le code - ça marche toujours, mais c'est une corvée encore plus grande.
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:
- J'ai un
inetpub/wwwroot
répertoire où je mets les fichiers html et js, puis j'ouvre index.html dans un navigateur àhttp://localhost/
. - Mon panneau Réseau dans Devs Tools ressemble à ceci: lien d'image .
- La configuration du serveur était très rapide et ne nécessitait aucun logiciel supplémentaire à installer. C'est-à-dire que je n'utilise pas node.js.
- Il y a iisstart.htm sur
inetpub/wwwroot
et quand je l'ouvrehttp://localhost/iisstart.htm
il dit IIS7.
la source
index.html
pour quelque chose comme unX-Powered-By
ou un en -Server
tête qui pourrait donner un indice sur le serveur Web. La recherche de votre chemin de fichierinetpub/wwwroot
indique fortement un serveur IIS.Réponses:
Utiliser un paramètre est la bonne façon! Ici, vous pouvez ajouter un numéro de version que vous modifiez uniquement en cas 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:
J'espère que cela t'aides!
la source
Dans le serveur IIS7 Windows fonctionnant sous Windows 7, pour empêcher la mise en cache de votre contenu, vous devez apporter certaines modifications à l'un de vos fichiers de configuration appelé
web.config
. Les fichiers de configuration pour IIS 7 et versions ultérieures sont situées dans%WinDir%\System32\Inetsrv\Config folder
où%WinDir%
est le dossier dans lequel vous avez installé Windows (généralementC:/Windows
).Créez une copie de sauvegarde de votre
web.config
fichier avant de le modifier afin de 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 votreindex.html
:Vous avez le chemin d'accès au
web.config
fichier à partir d'ici: Windows Doc: Configuration ReferenceVous 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?
la source
projectName/index.html
que je copie à partir de l'URL dans mon navigateurhttp:/localhost/projectName/index.html
. Résultat - aucun effet sur le problème de mise en cache.web.config
fichier dans le dossier racine de votre site (dossier dans lequel se trouve votre site) à la place et de modifier le chemin d'accès justeindex.html
pour voir si cela fonctionne.J'ai eu le même problème et voici ma liste de contrôle:
<%Response.Expires=1440%>
dans de nombreuses lignes de code ASP et il surmontait tous les autres paramètres! En phpsession_cache_expire
mai fait de même.http-equiv="Cache-control"
en-têtes html (vous avez réussi ce test!).Enfin, je dois dire que dans toutes les situations ci-dessus, la vérification de la désactivation du cache dans l' onglet newtwork dans la console Chrome a toujours fonctionné pour moi pour afficher une nouvelle version des pages, mais cela n'est bon qu'à des fins de débogage et les visiteurs ne le feront pas!
la source
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.
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:
L'
v=20b379f72a37
annexe à la fin est un hachage de fichier généré automatiquement du contenu du fichier.la source
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.
la source
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.
Où 1579780745150 est 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.
la source
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:
Si vous exécutez,
file://path/to/file.html
cela signifie que vous ne parcourez pas un serveur Web / proxy. Si c'est le cas,http://[something]/file.html
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 l'a suggéré Martin Shishkov .
la source
http://localhost/ProjectName/index.html
où ce paramètre où vous pouvez désactiver la mise en cache peut être?file://path/to/projectName/index.html
. Cela supprimera le serveur Web de l'équation. Pour continuer à utiliser IIS et simplement corriger le cache, reportez-vous à cet article: support.microsoft.com/en-us/help/247404/…Chrome fait cette chose où, si le fichier n'a pas trop changé, pas sûr de 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.
la source
Sur la base des mises à jour de votre réponse, je dirais que votre problème est dû à IIS v7 qui utilise la mémoire de votre PC pour la mise en cache et non votre disque dur local, c'est pourquoi
Hard reload
et toutes les autres méthodes ne semblent pas fonctionner correctement.Je pourrais penser à 3 solutions:
1. Correction de votre problème de cache IIS: (Non testé car je n'ai pas de PC avec IIS)
extension
lesquels 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 IIS 7 Cache
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 donneront un meilleur "environnement" de développement et les deux prendront en charge Windows 7. De plus, si vous êtes familier avec 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)
la source
.js
fichiers? cela dépend des changements que vous apportez.