221 votes

Effacer le cache en JavaScript

Comment vider le cache d'un navigateur avec JavaScript ?

Nous avons déployé le dernier code JavaScript mais nous ne parvenons pas à obtenir le dernier code JavaScript.

Note de la rédaction : Cette question est semi-dupliquée aux endroits suivants, et la réponse de la première des questions suivantes est probablement la meilleure. Cette réponse acceptée n'est plus la solution idéale.

Comment forcer le navigateur à recharger les fichiers CSS/JS mis en cache ?

Comment puis-je obliger les clients à rafraîchir les fichiers JavaScript ?

Rechargement dynamique de la source locale Javascript / données json

11voto

Fabien Ménager Points 45472

Vous pouvez également forcer le code à être rechargé toutes les heures, comme ceci, en PHP :

<?php
echo '<script language="JavaScript" src="js/myscript.js?token='.date('YmdH').'">';
?>

ou

<script type="text/javascript" src="js/myscript.js?v=<?php echo date('YmdHis'); ?>"></script>

8voto

yboussard Points 169

Mettez ceci à la fin de votre modèle :

var scripts =  document.getElementsByTagName('script');
var torefreshs = ['myscript.js', 'myscript2.js'] ; // list of js to be refresh
var key = 1; // change this key every time you want force a refresh
for(var i=0;i<scripts.length;i++){ 
   for(var j=0;j<torefreshs.length;j++){ 
      if(scripts[i].src && (scripts[i].src.indexOf(torefreshs[j]) > -1)){
        new_src = scripts[i].src.replace(torefreshs[j],torefreshs[j] + 'k=' + key );
        scripts[i].src = new_src; // change src in order to refresh js
      } 
   }
}

6voto

Daniel Points 699

Essayez d'utiliser ceci

 <script language="JavaScript" src="js/myscript.js"></script>

A ceci :

 <script language="JavaScript" src="js/myscript.js?n=1"></script>

5voto

Justin Johnson Points 16243

Voici un extrait de ce que j'utilise pour mon dernier projet.

Depuis le contrôleur :

if ( IS_DEV ) {
    $this->view->cacheBust = microtime(true);
} else {
    $this->view->cacheBust = file_exists($versionFile) 
        // The version file exists, encode it
        ? urlencode( file_get_contents($versionFile) )
        // Use today's year and week number to still have caching and busting 
        : date("YW");
}

De la vue :

<script type="text/javascript" src="/javascript/somefile.js?v=<?= $this->cacheBust; ?>"></script>
<link rel="stylesheet" type="text/css" href="http://stackoverflow.com/css/layout.css?v=<?= $this->cacheBust; ?>">

Notre processus de publication génère un fichier contenant le numéro de révision de la version actuelle. Cela fonctionne en codant l'URL de ce fichier et en l'utilisant pour casser le cache. En cas d'échec, si ce fichier n'existe pas, l'année et la semaine sont utilisées pour que la mise en cache fonctionne toujours, et il sera rafraîchi au moins une fois par semaine.

Il permet également de vider le cache à chaque chargement de page dans l'environnement de développement, de sorte que les développeurs n'ont pas à se soucier de vider le cache pour toutes les ressources (javascript, css, appels ajax, etc.).

5voto

albanx Points 1370

Ou vous pouvez simplement lire le fichier js par le serveur avec file_get_contets et ensuite mettre en echo dans l'entête le contenu js

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X