8
votes

Arrêtez JavaScript et HTML du chargement du cache

Je construis une application JavaScript unique et lorsque l'application commence, j'utilise un seul fichier JavaScript pour charger tous les autres fichiers dont j'ai besoin sur la volée. Lorsque je frappe Actualiser, Selon Firebug, ma page HTML ainsi que les pages JavaScript se chargeront avec une erreur 304 non modifiée et que mon JavaScript arrête de fonctionner.

Je comprends cela est dû à la mise en cache du navigateur, mais comment puis-je éviter cela? Je charge la page HTML initiale avec un seul appel de script xxx

puis continue à charger le reste de manière dynamique de ce script xxx

Je sais que Gmail utilise des cookies pour éviter cela. Est-ce que quelqu'un a une idée de savoir comment prendre cette approche? Devrais-je définir le cookie sur le serveur, puis vérifier avec JS sur chaque page charge / rafraîchir et utiliser quelque chose comme fenêtre.Location.refresh () si le cookie me dit que la page est chargée du cache?


4 commentaires

Ne vous rafraîchissez pas la page, rechargez plutôt.


Je ne peux pas m'attendre à ce qu'un utilisateur de l'application sache de ne pas rafraîchir. Ceci est un bug qui doit être résolu et non travaillé dans le navigateur.


304 non modifié n'est pas une erreur.


Il ne devrait pas d'importance que les fichiers JavaScript ne soient pas demandés. Ils seront toujours chargés. Écoutez-vous le bon événement pour réinitialiser votre page?


8 Réponses :


3
votes
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">  
Add this into your HTML HEAD.

2 commentaires

Cela n'arrête pas le navigateur de la mise en cache et de la transmission de 304 erreurs non modifiées.


304 Non modifié est simplement une réponse "Vous devez avoir cette mise en cache", ce n'est pas une erreur.



11
votes

La mise en cache est une importance importante pour des raisons de performance. Je vous recommanderais de passer un numéro de version dans votre chaîne de requête et avec chaque mise à jour, incrémentez le numéro de version. Cela obligera le navigateur à renvoyer la demande et il chargera du cache s'il a déjà la même version.


0 commentaires

0
votes

Vous devez définir script.src = scripts [chargé]; après Ajout du OnReadyStatechange / Onload gestionnaires. Sinon, l'événement allait tirer avant que les gestionnaires ne soient ajoutés, car la version mise en cache se charge instantanément.


0 commentaires

6
votes

Je suis d'accord avec toutes les autres réponses. 304 n'est pas une erreur et il y a de nombreuses raisons pour lesquelles ce comportement est correct.

qui étant dit, il y a un simple "hack" que vous pouvez utiliser. Joignez simplement un paramètre URL unique à l'appel JS. P>

var timestamp = +new Date;
var url = "http://mysite.com/myfile.js?t=" + timestamp;


1 commentaires

J'utilise cette approche dans mes utilitaires de chargement de script dynamiques et cela fonctionne bien, mais dans cette situation, compte tenu de la pièce maîtresse de l'application, je recherche une approche légèrement plus efficace.



12
votes

pour développer sur @ Rameesh's Réponse :

Pour forcer un rechargement du fichier JS, au lieu du cache. , Utilisez ce HTML: P>

<script src="js/config.js?v=42" type="text/javascript"></script>


0 commentaires

0
votes

Après avoir eu des difficultés avec le problème du cache pendant des mois, essayez à peu près n'importe quoi (y compris un script qui modifie les URL à l'aide d'un paramètre) J'ai trouvé un message qui explique comment faire cela en utilisant le IIS . < / p>

  • Démarrer IIS Manager (InetMgr dans le menu Démarrer fonctionne pour moi)
  • Naviguez jusqu'au site souhaité dans l'arborescence de connexions
  • Cachée ouverte de sortie
  • Modifier les paramètres de fonctionnalité
  • Décochez Activer le cache et activer le cache de noyau
  • Si vous ne pouvez pas enregistrer les modifications, assurez-vous que votre fichier web.config n'est pas marqué en lecture seule
  • IISRESET est requis pour que les modifications ont lieu

    C'est le message d'origine, qui mentionne qu'il est pertinent pour IIS 7.5 (sous Windows 7) https: //forums.iis. NET / T / 959070.aspx? Comment + Do + You + Désactiver + Caching + In + IIS +

    L'une des choses que j'ai essayées avant qui ajoutait .html et .js dans la mise en cache de sortie et vérifie "empêcher toute mise en cache". Donc, si cela ne fonctionne pas après l'IISRESET, essayez cela, bien que je ne suis pas sûr qu'il soit réellement requis.

    EDIT:

    Si cela ne fonctionne pas, toujours dans l'IIS, aller aux en-têtes de réponse HTTP et ajoutez de nouvelles actions:

    1. Nom: Cache-Control, Valeur: Non-Cache

    2. Nom: expire, valeur: 0


0 commentaires

1
votes

<?php 
$xn = date("YmdHis");

echo  " <script	src='root.js?$xn'></script>";
?>


0 commentaires

0
votes

Je suggérerais d'utiliser JavaScript pour générer un numéro aléatoire à l'aide de Math.Random Multipliez-le, puis Math.Floor pour renvoyer l'entier de celui-ci. Ensuite, j'ajouterais ce numéro à l'URL en tant que variable. Étant donné que le nombre change lors de chaque charge de page, le fichier ne doit jamais être mis en cache.

<script>
  var url="yourscript.js";
  var extra="?t=";
  var randomNum = String((Math.floor(Math.random() * 200000000000000)));
  document.getElementById('myScript').src = url+extra+randomNum;
</script>
<script id="myScript"></script>


0 commentaires