2010-11-23 27 views
1

Parfois, je reçois des rapports sur les problèmes de disposition des personnes utilisant mes sites, et la réponse tend à être, rafraîchir votre navigateur avec Ctrl-F5/effacer votre cache. La manière la plus simple que je peux penser pour gérer ceci est d'ajouter la révision SVN aux chemins aux ressources comme ceci styles.css?1234, mais je me demande si c'est un peu lourd (par exemple les révisions de SVN qui ne changent pas la ressource forcer un fetch inutile). En outre, il faut passer par et trouver tous ces chemins et ajouter du code pour sortir la révision SVN.Mise à jour des chemins vers les ressources (CSS/JS) lorsque des fichiers sont modifiés dans Subversion

Existe-t-il une meilleure façon de gérer cela?

Pour ce que ça vaut, j'utilise Django, et Apache avec mod_wsgi.

Répondre

2

Il serait préférable d'utiliser l'horodatage de la dernière modification du fichier. Ensuite, vous éviterez les problèmes que vous rencontreriez avec le numéro de version. Vous devrez également soit aller sur le disque à chaque demande pour obtenir le dernier numéro de révision (utiliser le cache si vous utilisez cette approche) ou modifier vos instructions include dans une étape de "compilation" lors du déploiement.

De plus, si vous faites styles.css?123, certains proxies/navigateurs peuvent ne pas mettre en cache le fichier, quel que soit l'en-tête d'expiration. Il est préférable de faire styles.123.css, que tous les agents traitent comme un fichier distinct.

Il ya un projet qui résout déjà ce problème, que j'ai moi-même utilisé avec succès: django-compress. Vous lui dites comment vous voulez compresser votre javascript et css, puis il va réduire/compresser, les joindre ensemble dans un gros fichier et donner au gros fichier un nom de fichier spécial qui inclut l'horodatage. Vous obtenez également une balise de modèle à utiliser lors de l'inclusion des fichiers qui savent quel fichier inclure. Django 1.3 inclura également une application appelée staticfiles qui aide à la mise en service de supports statiques, mais qui ne résout pas le problème du versionnage.

+0

Merci - django-compress semble être exactement ce que je suis après. –

+0

Je viens de faire django-compress, avec csstidy - belle, merci! –

0

Une technique que j'ai utilisée dans le passé est de m'assurer que j'utilise une balise de gabarit pour chaque référence d'immobilisation. Ensuite, je peux modifier cette balise si nécessaire, à la fois si j'ai besoin de changer l'URL pour les répertoires d'actifs, mais aussi pour ajouter du cachebusting si nécessaire. Je ne m'inquiéterais pas de forcer une extraction inutile pour chaque révision SVN même si le fichier n'a pas changé - c'est toujours plus efficace que de servir un nouveau à chaque fois.

Il existe différentes bibliothèques qui font ce genre de chose pour vous. knutin a déjà mentionné django-compress, il y a aussi django-static-management, django-static et probablement beaucoup d'autres. En plus de traiter le cachebusting, ces applications incluent généralement une sorte de compression/concaténation afin que plusieurs fichiers CSS ou JS soient concaténés en un pour réduire les requêtes HTTP.