2009-06-05 4 views
14

Alle Vorschläge zur Browser-Zwischenspeicherung in einer ASP.NET-Anwendung. Ich habe einige verschiedene Methoden online gefunden, war mir aber nicht sicher, was das beste wäre. Insbesondere möchte ich meine CSS- und JS-Dateien zwischenspeichern. Sie ändern sich, es ist jedoch meist einmal im Monat.Browser-Caching in der ASP.NET-Anwendung

+0

Siehe diese Frage: http://stackoverflow.com/questions/914027/disabling-browser-caching-for-all-browsers-from-asp-net –

Antwort

6

Eine andere Technik besteht darin, statische Bilder, CSS und JS auf einem anderen Server (z. B. CDN) zu speichern, bei dem der Expires-Header ordnungsgemäß festgelegt wurde. Der Vorteil hierbei ist zweifach:

  1. Der Ablauf-Header-Browser und Proxies fördern wird diese statische Dateien
  2. Die CDN-Offload wird von Ihrem Server-Cache statische Dateien serviert.
  3. Durch die Verwendung eines anderen Domänennamens für Ihren statischen Inhalt werden Browser schneller heruntergeladen. Dies ist weil serving resources from four or five different hostnames increases parallelization of downloads.
  4. Wenn das CDN ordnungsgemäß konfiguriert ist und cookieless domain verwendet, haben Sie keine unnötigen Cookies, die hin und her gehen.
3

Am besten setzen Sie einen Expires-Header in IIS auf die Ordner, in denen der Inhalt zwischengespeichert werden soll. Dies wird die meisten modernen Browser und Proxies dazu bringen, diesen statischen Inhalt zwischenzuspeichern. In IIS 6:

  1. Klicken Sie mit der rechten Maustaste auf den Ordner (Beispiel CSS oder JS), den Sie im Browser zwischenspeichern möchten.
  2. Klicken Sie auf Eigenschaften
  3. Gehen Sie auf die Registerkarte HTTP-Header
  4. Check "Aktiviert das Ablaufen von Inhalt"
  5. eine lange Zeit für den Verfall Stellen, wie "Läuft ab nach 90 Tagen"

Blog Yahoos Entwickler talks about this technique .

+0

Ich habe keinen Zugriff auf IIS. Ich denke, nach was ich suchte, war ein guter Weg, es über Code zu tun. – Jason

+0

Wenn ASP.NET CSS & JS-Dateien bereitstellt, können Sie die gleiche Technik auch selbst im Code ausführen ... Response.Cache.SetExpires (DateTime.Now.AddYears (1)); – Keltex

+0

ASP.NET wird ASP.NET-Ressourcen standardmäßig nicht bereitstellen, aber er müsste im Wesentlichen erneut auf IIS zugreifen – annakata

2

Wenn Sie IIS nicht so konfigurieren, dass asp.net-Steuerelemente für js/css/Image-Anforderungen angegeben werden, werden sie standardmäßig nicht angezeigt. Daher sollten Sie die Response-Header Ihrer Firewall absichtlich optimieren (für langfristige Wartbarkeit)/trafficmanager/Server oder (besser und was die meisten der Welt dieser Stelle tut at) auf der Version Ihrer Dateien in Pfad, dh:

Statt dies in Ihrem Aufschlag des Schreibens:

http://www.foo.com/cachingmakesmesad.css 

Verwenden Sie diese:

http://www.foo.com/cachingmakesmesad.css?v1 

..und ändern Sie die Versionsnummer, wenn Sie den Cache effektiv löschen müssen. Wenn das jedes Mal ist, könnte man sogar eine GUID oder einen Datumsstempel anhängen, aber ich kann mir keine Gelegenheit vorstellen, wo ich das wirklich tun möchte.


dachte ich Ihre Frage anti-Cache war aber wieder lesen Ich sehe ich eine gute Antwort verschwendet: P

Lange Rede kurzer Sinn, Browser sind in der Regel sehr aggressiv pro-Caching „einfache“ Ressourcen Sie sollten sich also nicht darum kümmern müssen, aber wenn Sie etwas dagegen unternehmen wollten, müssten Sie aus den oben genannten Gründen Zugriff auf eine Firewall/einen Trafficmanager/IIS haben (ASP.NET wird keine Chance erhalten) Standard).

Allerdings ... gibt es keine Möglichkeit, Sie können Caching absolut erzwingen, und Sie sollten es auch nicht. Was zwischengespeichert wird und nicht gecached wird, ist zu Recht die Entscheidung des Endbenutzers, alles was Sie tun können, ist stark zu fordern.

4

Es lohnt sich zu bedenken, dass die meisten Browser auch ohne Cache-Control- oder Expires-Header Inhalte wie JS und CSS zwischenspeichern. Was passieren sollte, ist der Browser sollte Anforderung der Ressource jedes Mal, wenn es benötigt wird, wird aber in der Regel eine "304 Unmodified" -Antwort erhalten und der Browser verwendet dann das zwischengespeicherte Element. Dies kann immer noch ziemlich teuer sein, da es eine Hin- und Rückfahrt zum Server ist, aber die Ressource selbst nicht gesendet wird, so dass die transferierten Bytes begrenzt sind.

IE verlassen, mit keine spezifischen Anweisungen in Bezug auf die Zwischenspeicherung wird standardmäßig seine eigenen Heuristiken verwenden, um festzustellen, ob es sogar stören sollte, erneut ein Objekt im Cache angefordert. Dies obwohl nicht explizit gesagt wird, dass es eine Ressource zwischenspeichern kann. Seine Humeristik basiert auf dem Last-Modified-Datum der Ressource, je älter es ist, desto unwahrscheinlicher ist es, dass es sich jetzt geändert hat. Sehr wollig.

Ehrlich gesagt, wenn Sie eine Website perfomant machen wollen, müssen Sie die Kontrolle über solche Cache-Einstellungen haben. Wenn Sie nicht auf diese Einstellungen zugreifen können, müssen Sie sich keine Gedanken über die Leistung machen. Informieren Sie den Sponsor, dass er möglicherweise keine gute Leistung erbringt, weil er keine Plattform bereitgestellt hat, mit der Sie diese Leistung erbringen können.

2

In .net können Sie Ihre JavaScript, CSS und Bilder als eingebettete Ressourcen einrichten. .Net wird dann den Dateiablauf für Sie behandeln. Der Nachteil dieses Ansatzes besteht darin, dass Sie für jede Gruppe von Änderungen eine neue Version erstellen müssen (je nach Implementierung und Arbeitsablauf kann dies ein Vorteil sein).

Sie könnten auch ETags verwenden, aber von dem, was ich in einigen Fällen verstehe, funktioniert es nicht gut, wenn Sie eine Mischung aus IIS and apache Webservers hosting your images haben (oder wenn Sie in Zukunft wechseln wollen).

Sie können nur sicherstellen, dass das Dateidatum neuer ist, und lassen Sie den Server für Sie behandeln, aber Sie müssen sicherstellen, dass der Server richtig konfiguriert ist.

2

Sie können

<system.webServer> 
    <staticContent> 
     <clientCache httpExpires="Tue, 12 Apr 2016 00:00:00 GMT" cacheControlMode="UseExpires" /> 
    </staticContent> 
</system.webServer> 

die clientCache documentation für mehr Details in web.config durch Zugabe von folgenden Code statische Inhalte zwischenzuspeichern.

Verwandte Themen