Conformément aux meilleures pratiques de Yahoo pour accélérer votre site , nous fournissons du contenu statique à partir d'un CDN en utilisant des en-têtes d'expiration de cache très futurs. Bien sûr, nous devons occasionnellement mettre à jour ces fichiers "statiques", nous ajoutons donc actuellement une version infixe dans le nom de fichier (basée sur la somme SHA1 du contenu du fichier). Ainsi:
styles.min.css
Devient:
styles.min.abcd1234.css
Cependant, la gestion des fichiers versionnés peut devenir fastidieuse, et je me demandais si une notation d'argument GET pourrait être plus propre et meilleure:
styles.min.css?v=abcd1234
Lequel utilisez-vous et pourquoi? Y a-t-il des considérations liées au navigateur ou au proxy / cache que je devrais considérer?
static-content
cache-control
David Eyk
la source
la source
Réponses:
Selon Make the Web Faster de Google , les pages avec des paramètres de requête ne sont pas mises en cache par de nombreux proxy HTTP.
C'est
styles.min.abcd1234.css
la solution préférée. Vous pouvez utiliser un mécanisme de réécriture d'URL approprié pourstyles.min.abcd1234.css
devenir le plus facile à implémenter de manièrestyles.min.css?v=abcd1234
transparente.Si vous ne prenez en charge que HTTPS, ce conseil ne s'applique pas, car les mandataires ne peuvent normalement pas mettre en cache les pages qui sont servies via SSL.
la source
En utilisant le versioning de style GET, à partir d'un cache vide, plusieurs URL - par exemple
style.css?v=123
etstyle.css?v=456
- retourneraient le même contenu. Cependant, je ne vois pas que ce serait problématique, d'autant plus que vous ne lieriez qu'un seul à la fois.Je pense que vous trouverez le style GET beaucoup plus facile à entretenir. Vous n'avez pas besoin de fichiers séparés: changez simplement l'URL et les navigateurs récupéreront le CSS à nouveau.
MISE À JOUR: sur des recherches supplémentaires, il semble que l'utilisation d'une chaîne de requête peut empêcher les navigateurs de mettre en cache les fichiers. Cependant, si vous renvoyez des en-têtes appropriés tels que
Expires
celui-ci, ce n'est pas un problème.MISE À JOUR 2: la réponse acceptée souligne que certains mandataires ne mettent pas en cache les fichiers avec une chaîne de requête. Cependant, cela est basé sur des informations anciennes; le problème particulier qu'ils mentionnent dans Squid a été corrigé il y a 7 ans. Impressive Webs a fait un bon article à ce sujet.
la source
Les deux fonctionneront également bien car une chaîne de requête est considérée comme faisant partie de l'URL et en la modifiant, vous modifiez en fait le nom de la ressource, ce qui oblige le navigateur à récupérer une nouvelle copie du fichier.
Je dis utiliser la méthode la plus facile à entretenir.
la source
ce n'est pas une réponse à la question ci-dessus , je veux une meilleure solution donc je me pose ici la question
Les deux méthodes nécessiteraient une modification des fichiers dans lesquels les fichiers css et js sont référencés. En effet, cela nécessiterait un redémarrage du serveur d'applications après avoir effectué les modifications.
Existe-t-il un meilleur moyen de gérer les versions des fichiers statiques sans avoir à redémarrer le serveur d'applications?
ce qui suit est exclu dans la solution
la solution ne doit pas non plus affecter la définition du contrôle du cache ou expire.
Merci
la source