Output Caching 101
Geschrieben von: Christian Holm 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:
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:
Sie können aber noch Finetuning betreiben, indem Sie folgende Techniken einsetzen:
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:
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ßbemerkungDies 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# Links zu anderen Sites
@ OutputCache Directive 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.
©2000-2006 AspHeute.com |