659 votes

Comment puis-je forcer les clients à actualiser les fichiers JavaScript?

Nous sommes actuellement en train de travailler dans une version bêta privée et sont encore dans le processus de prise assez rapide modifications, bien que, évidemment, que l'usage est de commencer à construire, nous allons être en train de ralentir ce processus. Cela étant dit, une question nous sont en train de faire est que, après nous pousser une mise à jour avec de nouveaux fichiers JavaScript, les navigateurs clients toujours utiliser la version en cache du fichier et ils ne voient pas la mise à jour. Évidemment, sur un appel au support, on peut simplement informer pour faire un ctrlF5 actualiser pour s'assurer qu'ils obtiennent de la mise à jour des fichiers à partir du serveur, mais il serait préférable de traiter cette avant cette date.

Notre courant de pensée est tout simplement de joindre un numéro de version sur le nom des fichiers JavaScript et ensuite, lorsque des modifications sont apportées, incrémenter la version du script et de la mise à jour de toutes les références. C'est certainement le travail effectué, mais la mise à jour des références sur chaque sortie pourrait obtenir de la lourdeur.

Comme je suis sûr que nous ne sommes pas les premiers à faire face à cela, j'ai pensé que je devrais la jeter à la communauté. Comment êtes-vous assurer aux clients de mettre à jour leur cache lorsque vous mettez à jour votre code? Si vous êtes à l'aide de la méthode décrite ci-dessus, êtes-vous à l'aide d'un processus qui simplifie le changement?

586voto

Huppie Points 4805

Autant que je sache, une solution courante consiste à ajouter ?<version> pour le script src lien.

Par exemple:

<script type="text/javascript" src="myfile.js?1500"></script>


Je suppose, à ce point qu'il n'y a pas de meilleure façon de le rechercher-remplacer pour incrémenter ces "numéros de version" dans toutes les balises de script?

Vous pourriez avoir un système de contrôle de version faire pour vous? La plupart des systèmes de contrôle de version avoir un moyen d'injecter automatiquement le numéro de révision sur le check-in par exemple.

Il ressemblerait à quelque chose comme ceci:

<script type="text/javascript" src="myfile.js?$$REVISION$$"></script>


Bien sûr, il y a toujours de meilleures solutions comme cette une.

106voto

Chase Seibert Points 7609

Ajoutant l’heure actuelle à l’URL, c’est en effet une solution commune. Toutefois, vous pouvez également gérer cela au niveau du serveur web, si vous le souhaitez. Le serveur peut être configuré pour envoyer les différents en-têtes HTTP des fichiers javascript.

Par exemple, pour forcer le fichier mis en cache pour pas plus de 1 jour, vous enverriez :

Pour beta, si vous voulez forcer l’utilisateur à obtenir toujours plus tard, vous utiliseriez :

46voto

Google Page Speed: Ne pas inclure une chaîne de requête dans l'URL pour les ressources statiques. La plupart des procurations, notamment le Calmar jusqu'à la version 3.0, ne pas mettre en cache les ressources avec un "?" dans leur URL, même si un Cache-control: public de l'en-tête est présent dans la réponse. Activer le proxy de mise en cache de ces ressources, supprimer les chaînes de requête à partir des références à des ressources statiques, et, au lieu de coder les paramètres dans le fichier de noms eux-mêmes.

Dans ce cas, vous pouvez inclure la version dans l'URL ex: http://abc.com/v1.2/script.js et l'utilisation de mod_rewrite d'apache pour rediriger le lien vers http://abc.com/script.js. Lorsque vous modifiez la version navigateur du client mettra à jour le fichier de nouveau.

20voto

Echo Points 1471

Pas tous les navigateurs cache fichiers avec ' ?' en elle. Ce que j’ai fait pour s’assurer qu’il a été mis en cache autant que possible, j’ai inclus la version dans le nom du fichier.

Alors au lieu de stuff.js?123, j’ai fait stuff_123.js

J’ai utilisé modredirect(I think) dans apache pour avoir stuff*.js d’aller stuff.js

12voto

David K Egghead Points 4564

Pour les pages ASP.NET, j’utilise ce qui suit

AVANT

APRÈS (force recharger)

Ajout de la DateTime.Now.Ticks fonctionne très bien.

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