2013-02-20 4 views
1

ContexteContrôle de navigateur Caching JavaScript généré

Une application MVC 4 doit inclure JavaScript qui est généré à partir de la base de données. Le fichier généré est relativement volumineux et ne change que de temps en temps (il change tous les 2 à 10 jours).

La réponse acceptée de

Generate javascript file on the fly in asp.net mvc

fournit un bon cadre pour générer le code JavaScript. Toutefois, l'URL de la ressource JavaScript est statique. Si je comprends bien, le navigateur va mettre en cache cette ressource. Cette mise en cache peut être contrôlée par le OutputCacheAttribute.

Question

Comment puis-je faire le cache du navigateur expire chaque fois que les changements JavaScript générés, semblable à la façon dont les faisceaux de travail? Un SqlDependency pour le OutputCacheAttribute n'est pas une option.

+0

Chaîne de requête de version dans le script URL? Par exemple. 'foo.js? v = 1234567'. (Lorsque votre fichier JS change, ajoutez une chaîne de requête différente, ce qui oblige les navigateurs à la demander.) –

+0

Vous pouvez également nommer le fichier javascript en fonction de la date à laquelle il a été généré. –

+0

@ColinDeClue: Le nom de la ressource JavaScript est l'URL du contrôleur, n'est-ce pas? Vous ne savez pas comment donner un nom différent à la ressource JavaScript. –

Répondre

1

J'ai une situation similaire, et ce que je fais est d'ajouter un guide aléatoire à la fin de la chaîne de requête dans la balise script chaque fois que je régénère le fichier JavaScript.

Par exemple:

<script type="text/javascript" src="/scripts/generated.js?id=7c97aa32-29d9-dd11-a926-001d096d84f2"></script> 

Vous pouvez utiliser une chaîne aléatoire ou même un horodatage, tant que le paramètre de requête est modifié, le nouveau fichier de script sera téléchargé.

+0

Je ne veux pas vraiment générer un fichier statique, mais plutôt avoir une action de contrôleur retourner le JavaScript (qui serait mis en cache). Je suppose que je pourrais appliquer le même principal en utilisant un hachage du script généré ou l'horodatage de génération. –

+0

Vous avez raison, le même principe fonctionnera pour un fichier non statique. Tant qu'il y a un changement dans la chaîne de requête ajoutée à l'URL statique de la ressource JavaScript, le navigateur télécharge le fichier mis à jour. Un horodatage ou un hachage devrait faire l'affaire tous les deux. – Jack