2008-10-15 11 views
50

J'ai une ressource JavaScript qui a la possibilité d'être éditée à tout moment. Une fois qu'il est édité, je voudrais qu'il soit propagé relativement rapidement au navigateur de l'utilisateur (peut-être 15 minutes environ), mais la fréquence de modification de cette ressource est très faible (peut-être 2 par mois). Je préfère que la ressource soit mise en cache dans le navigateur, car elle sera récupérée fréquemment, mais j'aimerais aussi que le cache soit réinitialisé sur le navigateur à un intervalle semi-régulier. Je sais que je peux passer un en-tête sans cache lorsque je demande la ressource, mais je me demandais quand le cache se réinitialiserait automatiquement sur le navigateur si je ne passais pas de cache.Quand le navigateur efface-t-il automatiquement le cache du fichier JavaScript externe?

J'imagine que ce serait indépendant pour chaque navigateur, mais je ne suis pas sûr.

J'ai essayé de Google ceci, mais la plupart des coups que j'ai trouvés visaient à vider le cache du navigateur ... ce qui n'est pas ce que je recherche.

Répondre

53

Vous pouvez passer une chaîne de version en tant que paramètre get à l'URL de votre balise de script. Le paramètre ne sera pas évalué par le fichier JavaScript statique mais forcera le navigateur à obtenir la nouvelle version.

Si vous ne souhaitez pas affecter la chaîne de version à chaque fois que vous avez modifié la source que vous pouvez le calculer en fonction de l'horodatage du système de fichiers ou votre subversion numéro commit:

<script src="/script.js?time_stamp=1224147832156" type="text/javascript"></script> 
<script src="/script.js?svn_version=678" type="text/javascript"></script> 

+0

Oui, c'est exactement ce que nous faisons. Même chose pour les fichiers CSS externes. – dmercer

+0

est le javascript pour le svn_version = 678 mis en cache, ou est-il rechargé à chaque fois (car un paramètre get est ajouté)? – Beerweasle

+0

Cette approche a également été utilisée dans Ruby on Rails. – alessioalex

14

Mettez une version sur votre code javascript comme celui-ci qui est mis à jour lorsque vous effectuez un changement

<script src="/code.js?ver=123" type="text/javascript"></script> 

Ils seront alors toujours obtenir une nouvelle version.

+12

Bien sûr, cela suppose que le HTML n'est pas mis en cache aussi ...;) – RodeoClown

13

HTTP fournit plusieurs contrôles pour la mise en cache que les navigateurs ignorent de différentes manières. Si vous définissez une date d'expiration raisonnable, la plupart des navigateurs vérifieront s'ils ont la version actuelle sont des fréquences appropriées.

Le terme de recherche que vous souhaitez inclure ici (pour éviter les instructions de l'utilisateur du navigateur) est HTTP.

Pour en savoir plus: