Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Output Caching 101

Geschrieben von: Christian Holm
Kategorie: ASP.NET

An sich ist das Cachen von Web Seiten ja nichts Neues. Caching ist dann sinnvoll, wenn Daten mit (zeit)aufwendigen Tasks generiert werden müssen, und eigentlich für mehrere User über einen längeren Zeitraum unverändert bleiben. Ein Beispiel wären die Artikelseiten in einem Shop - für jeden User ist die Artikelbeschreibung gleich, also warum sollte man sie jedes Mal aus der Datenbank holen? Daher gibt es Caching: bei wiederholtem Zugriff, je nach Expiration, werden die angeforderten Daten aus dem in-Memory Cache geholt. Dies spart einiges an Web Server Resourcen. Mit ASP.NET haben Sie nun neue Möglichkeiten Caching gezielt und einfach in Ihren Web Seiten zu implementieren.

Grundsätzlich bietet ASP.NET zwei Möglichkeiten vom Caching zu profitieren:

  • Output Caching
  • traditionelles Application-Level Caching

Dieser Artikel soll Ihnen einen Überblick über die ASP.NET Output Caching Funktionalität bieten. Output Caching wird durch die Verwendung der OutputCache Directive aktiviert, welche in diesem Artikel näher betrachtet wird.

Nun zurück zum Thema: Beim Caching werden also die HTTP Requests, die wiederholt gegen den Server gefahren werden, aus einem in-Memory angelegten Cache geholt. Dies spart besonders bei dynamisch generierten Seiten Web Server Resourcen. Das ASP.NET Output Caching Feature (OutputCache Directive) läßt sich nun gezielt an Ihre ASP.NET Anwendungen anpassen. Diese Directive bietet prinzipiell folgende Optionen:

  • Steuerung über Content Expiration - anhand einer definierten Zeitspanne bleiben die gecachten Objekte im Speicher gültig
  • Caching anhand von Get/Post Parameter (Attribut: VaryByParam)
  • Caching anhand von Http Headern (Attribut: VaryByHeader)
  • Caching anhand einer Festlegung des Browsers oder eines definierten Strings (Attribut: VaryByCustom)

Sie können aber noch Finetuning betreiben, indem Sie folgende Techniken einsetzen:

  • Cachen von bestimmten Teilen einer Web Seite: Fragment Caching (Attribut:VaryByControl), setzt die Verwendung von ASP.NET Web Form Controls voraus
  • Verwendung und Implementation der Cache API (System.Web.UI.Caching)

Diesmal wollen wir uns aber auf das Output Caching beschränken und uns die OutputCache Directive einmal näher ansehen. Das Output Caching Feature basiert auf Caching Policies, die durch die in der Directive teilweise optional festlegbaren Attribute angegeben werden können. In einer ASP.NET Seite kann also die OutputCache Directive folgendermaßen angegeben werden:

<%@ OutputCache Duration="Zeitdauer" Location="Any | Client | Downstream | Server | None" 
VaryByControl="controlname" VaryByCustom="browser | customstring" VaryByHeader="headers" 
VaryByParam="parametername" %>

Die kursiven Angaben stellen die von Ihnen erforderlichen Anpassungen dar. Nun aber die Detailbeschreibungen. Um den Content im Cache nach einer definierten Zeit ablaufen zu lassen, geben Sie bei dem Duration Attribut eine Zeitspanne in Sekunden an:

<%@ OutputCache Duration="180" %>

Was passiert nun? Beim ersten HTTP Request auf die ASP.NET Seite wird der speziell angeforderte Content (die HTTP Response) gleichzeitig im In-Memory Cache abgelegt. Dieser verweilt dann die angegebene Zeitdauer im Cache bevor der Inhalt wieder neu angefordert wird. Dieses Attribut ist zwingend erforderlich und muß daher immer angegeben werden, da es ein Grundattribut für die Cachingpolicy ist.

Das Location Attribut setzt den Typ der Caching-Applikation. Die Werte dieses Atributtes stammen aus der OutputCacheLocation Enumeration, und kann folgende gültige Werte annehmen:

  • Any - es werden alle vorhandenen Caching Applikationen verwendet, Standardwert. Access ist Public
  • Client - setzt den Cache Control Header auf die Einstellung Private. Verwenden Sie diese Einstellung um Authentifizierungen geschützt zu cachen
  • Downstream - Hier wird nur der Downstream gecached, d.h. das Caching erfolgt nur clientseitig und daher ist das Caching für diese Seite serverseitig deaktiviert. Access ist Public
  • Server - Gegenteil von Downstream; nur serverseitiges Caching, d.h alle HTTP Responses kommen aus dem serverseitigen Cache
  • None - Hiermit deaktivieren Sie global das Output Caching. Sie können aber dennoch einzelne Web Controls individuell cachen lassen, wenn die Web Control die OutputCache Directive besitzt

Dies waren die allgemein setzbaren Attribute. Sie können den Cache aber mit folgenden Attributen auf spezielle Anforderungen abstimmen. Die folgenden optionalen Attribute sind möglich:

Das VaryByControl Attribut bietet spezielles Caching für ASP.NET Web Controls und ist daher in der OutputCache Directive von ASP .NET Seiten nicht zulässig. Die Angaben der Web Controls sind als Fully Qualified Names anzugeben, und werden durch Strichprunkte getrennt. Diese Angabe ist für gezieltes Fragment Caching zu verwenden und wird in einem weiteren Artikel näher erläutert.

Beim VaryByCustom Attribut können Sie den Cacheinhalt unter anderem auf verschiedene Browsertypen abstimmen (browser). Bei diesem Setting wird dann nach Browsername und Hauptversionsnummer getrennt. Oder Sie können durch einen eigenen festgelegten String eine Aufteilung bewirken. Hierbei müssen Sie aber beachten, daß Sie bei Verwendung eines eigenen Strings die HttpApplication.GetVaryByCustomString Methode in der gloabl.asax überladen.

Um den Output Cache auf Grundlage von verschiedenen HTTP Headern aufzuteilen, verwenden Sie das VaryByHeader Attribut. Hier wird jede HTTP Response nach Headern gecached. Mehrfachangaben werden durch Strichpunkte getrennt. Da dieses Attribut an ASP.NET Seiten gebunden ist, ist es nicht möglich es bei Web Controls (Fragment Caching) anzugeben.

Wenn Sie den Cache nach Formulardaten, welche mit GET oder POST Methode gesendet worden sind, sortieren wollen, ist das VaryByParam Attribut Ihre Wahl. Hier werden Mehrfachangaben wieder durch Strichpunkte getrennt. Der Cache enthält dann für jeden möglichen Querystring eine separate Http Response der ASP.NET Seite. Hier sind folgende Möglichkeiten gültig:

<%@ OutputCache Duration="180" VaryByParam="*" %>

Mit dieser Angabe ereichen Sie daß alle Abfragen gecached werden. Dies benätigt daher auch den meisten Cache. Wenn Sie aber nur bestimmte Teile der Formulardaten cachen wollen, dann verwenden Sie:

<%@ OutputCache Duration="180" VaryByParam="ProductName;UnitPrice" %>

Diese Angabe sortiert und cached nur Anfragen, die die Parameter ProductName und UnitPrice enthalten. Dieses erforderliche Attribut ist sowohl bei ASP.NET Seiten gültig wie auch bei Web Controls. Wenn Sie diese Aufteilung des Caches deaktivieren wollen, verwenden Sie das none Keyword:

<%@ OutputCache Duration="180" VaryByParam="none" %>

Schlußbemerkung

Dies war ein grober Überblick über das ASP.NET Output Caching. Es wurden die einzelnen Möglichkeiten des Cachens von ASP.NET Seiten gezeigt, und wie man anhand von Parametern den Cache auf bestimmte Spezifikationen aufteilt. Mit diesem Artikel sollte ersichtlich sein, daß das Cachen von ASP.NET Seiten sehr einfach und dennoch (oder gerade deswegen) sehr wirkungsvoll eingesetzt werden kann.

Verwandte Artikel

Einstieg in Visual Studio.NET - die erste Webanwendung mit Visual C#
HTTP Komprimierung in IIS5
Page Fragment Caching 101
Serverseitiges Caching mit XCache
Vergleich von DataGrid, DataList und Repeater-Control - was verwende ich wann?
XTune Revisited

Links zu anderen Sites

@ OutputCache Directive
ASP.NET Caching Features
Caching ASP.NET Pages
Performance Tips and Tricks in .NET Applications
Setting the Output Cache Location

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.