2009-08-04 6 views
0

Wenn ich eine neue Version von CSS-Dateien für meine Website hochlade, gibt es ein Problem, bei dem die Clients eine zwischengespeicherte Version auf ihren Computern haben. Sie können die CSS-Aktualisierungen (oder auch einige andere statische Elemente wie Bilder) erst sehen, wenn sie ihren Cache löschen oder Strg + F5 drücken. Dies ist offensichtlich keine ideale Lösung.ASP.NET - Verhindern, dass Website auf Computern mit zwischengespeicherten CSS beschädigt wird

Eine Möglichkeit, dies zu tun, wäre, die CSS-Dateien jedes Mal umzubenennen, wenn ich einen neuen Build der Website hochgeladen habe. Gibt es eine Möglichkeit, dies automatisch über Visual Studio zu tun? Ich verwende AnkhSVN für die Versionskontrolle, wenn ich also ein Skript bekommen könnte, das das automatisch für die ausgewählten Dateien macht, würde das auch funktionieren.

Ich wusste nicht einmal genau, wofür ich Google hätte - könnte mir jemand in die richtige Richtung weisen und empfehlenswerte Vorgehensweisen?

Edit: Oh, und vergaß zu erwähnen - ich müsste dies in Kombination mit dem Ablaufdatum Tag auf statische Werte tun. Da ich noch früh in meiner Forschung bin, bin ich mir nicht sicher, wie das bindet.

Danke!

Antwort

8

Eine einfache Lösung ist das Hinzufügen einer Abfragezeichenfolge zur URL Ihrer CSS-Datei. Anstatt auf file.css zu verweisen, verweisen Sie auf file.css? A = 1. Wenn Sie das nächste Mal die CSS-Datei ändern, ändern Sie einfach die Abfrage und die Datei wird erneut heruntergeladen.

+2

Ein Beispiel aus der Praxis dieser Technik finden Sie im Quellcode dieser Site! – ironsam

+0

Interessant - wenn der Querystring-Wert derselbe ist, weiß der Browser, dass er die neuesten Versionen hat ... könnte die Lösung sein, nach der ich gesucht habe! –

+1

Wenn sich Ihr CSS häufig ändert oder wenn sich Ihre Site in der Entwicklung befindet, können Sie alternativ festlegen, dass die Abfragezeichenfolge bei jeder Anzeige der Seite in einen zufälligen Wert geändert wird. Dadurch wird der Browser gezwungen, die CSS-Datei jedes Mal herunterzuladen, wenn die Seite angezeigt wird. –

0

Es gibt eine ausgezeichnete Lösung, die durch Verwendung einer Funktion auf this blog entry CSS und Javascript-Caching zu verhindern.

Es verwendet die SVN-Revisionsnummer in der Abfragezeichenfolge, aber dies könnte leicht geändert werden, um eine Zufallszahl oder eine Datum/Uhrzeit-Zeichenfolge zu verwenden.

1

Ich verwende immer eine Versionsnummer beim Aufruf eines CSS. Zum Beispiel

<html> 
    <title> 
    <script src="myScript.js?v=1.1"/> 
    <link rel="stylesheet" href="myStyle.css?v=1.1" /> 
    </title> 
    <body> 
    </body> 
</html> 

Indem Sie diese Zahl erhöhen, weisen Sie den Browser an, eine neue Version des Stylesheets/Javascript zu erhalten. Dies ist auch nützlich, wenn Sie AJAX-Anfragen verwenden, einige Browser neigen auch dazu, sie zu cachen.

Sie können diese Technik anpassen und Code erstellen, um die Nummer automatisch zu erhöhen. Zum Beispiel können Sie eine generierte Nummer (oder datetime) verwenden, die zu Beginn der Benutzersitzung generiert wird. Wenn der Benutzer später zurückkommt, erhält er eine neue Sitzung, also eine neue Nummer.

Sie können auch die Build-Nummer aus der Assembly verwenden (Sie können .NET anweisen, die Build-Nummer in der Assembly automatisch zu erhöhen) oder eine Build-Nummer in Ihrer web.config beibehalten, die Sie manuell aktualisieren.

Aber der Schlüssel ist wirklich eine Querystring hinter Ihrem Skript/CSS Reference zu verwenden, weil Browser nicht immer den Expire-Header gehorchen und die Verwendung eines (neuen) Query-Strings den Browser zwingt, eine neue Version zu bekommen.

Verwandte Themen