Verteilen Sie eine neue Version von JavaScript-, CSS- und Grafikinhalten mit ASP .NET MVC

Ich möchte, dass mein JavaScript, auf das über <script> -Tags, mein CSS und verschiedene Grafikdateien verwiesen wird, für eine bestimmte Version meiner Website im Benutzerbrowser zwischengespeichert wird. Wenn ich jedoch ein Update für eine Datei freigebe, möchte ich sicherstellen, dass der neue Inhalt (Javascript, CSS, Grafiken usw.) auf dem Computer des Benutzers aktualisiert wird.

Bei der Untersuchung dieses Problems bin ich auf eine Reihe möglicher Lösungen gestoßen:

Passen Sie die http-Header für Dinge wie die Cache-Kontrolle an und sie verfallenHängen Sie an jede Ressourcenanforderung eine eindeutige Abfragezeichenfolge anFügen Sie eine Versionsnummer in den Pfad (oder Dateinamen) der angeforderten Ressource ein

Mein Anliegen bei Option 1 (abgesehen davon, dass ich nicht weiß, wie es für einige Inhaltstypen implementiert werden soll) ist, dass der Zwischen-Proxy die http-Header möglicherweise nicht berücksichtigt und der Inhalt zwischengespeichert wird, wenn er einen Zwischen-Proxy zwischen dem Browser und IIS hat der Browser und der Proxy.

Ich befasse mich mit Option 2 in zweifacher Hinsicht. Wenn ich nur eine Zufallszahl oder einen Zeitstempel verwende, fordert der Browser jedes Mal eine neue Ressource an und umgeht den lokalen Cache, auch wenn sich der Inhalt nicht geändert hat (wenn nicht zwischen den Versionen). Eine Problemumgehung für dieses Problem besteht darin, den Zeitstempel der Ressourcendatei oder einen Hash der Datei zu verwenden. Dies würde sich nur ändern, wenn eine neue Version auftritt. Dies führte jedoch zu meiner zweiten Sorge: Ich verstehe, dass einige Webproxys standardmäßig nichts mit einer Abfragezeichenfolge zwischenspeichern (http://stackoverflow.com/questions/5541340/how-can-i-prevent-javascript-caching-). Querystring-Ansatz-funktioniert-nicht). Obwohl dies wahrscheinlich anpassbar ist, möchte ich mich nicht darauf verlassen, dass der Administrator eine Einstellung von der Standardeinstellung ändert, um den Leistungsvorteil des Zwischenspeicherns zu erzielen.

Option 3 scheint die beste Wahl zu sein, aber ich weiß nicht, wie ich sie für ASP .NET MVC (derzeit mit ASP .NET MVC 3) auf praktische Weise implementieren kann. Ich könnte von Hand in jede Datei gehen, die auf eine Grafik-, CSS- oder externe Javascript-Datei verweist, und den Pfad so ändern, dass für jede Version eine andere Versionsnummer angegeben wird. Dies ist jedoch eindeutig mühsam und fehleranfällig.

Meine Fragen sind dann:

1) Gibt es andere Strategien, um Caching zu vermeiden (für eine bestimmte Version), die ich in Betracht ziehen sollte und

2) Unter der Annahme, dass ich Option 3 (einschließlich einer Versionsnummer im Pfad der Ressource) verwende, wie kann ich dies in einer ASP .NET MVC-Anwendung auf eine Weise erreichen, die realistisch zu warten ist?

Vielen Dank,

Notre

Antworten auf die Frage(2)

Ihre Antwort auf die Frage