DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
Caching

Das zwischenspeichern von Daten wurde schon vor einiger Zeit entdeckt um die Performance von Anwendungen zu verbessern. Seit Speicher billig geworden ist, wird diese Technik häufig eingesetzt.
Beim planen von Software ist das einbeziehen von Chaching in modernen Lösungen unumgänglich. Als erstes denkt man bei Web Anwendungen immer an den Browser Cache. Es ist natürlich schneller die Seiten erst gar nicht vom Webserver zu holen. Ein weiterer erheblicher Performance Zuwachs erhält man, wenn die Webseiten nicht bei jeder Anforderung neu erzeugt werden. Statisch ist nun mal um ein vielfaches schneller als dynamisch.

Grundsätzlich kommen bie ASP.NET drei Arten zur Anwendung

  • Page Level Caching (auch Output Caching genannt)
  • Page Fragment Caching (auch Partial-Page Output Caching genannt)
  • Programm oder Data Caching

Dabei muss man beim Entwurf von Webanwendungen das Caching nicht einmal berücksichtigen. Zu jeder Zeit lässt sich das Caching  einfach in der Page Direktive aktivieren. Der wichtigste Parameter gibt die Zeitdauer in Sekunden an. Nach Ablauf der Duration wird die Seite neu in den Cache geladen, wenn ein Browser sie anfordert.

<%@ outputcache duration="10"  %>

Diese Methode wird Output Caching genannt. Bei der Verwendung von WebMatrix steht sogar ein Assistent dafür bereit.

Vom Output Caching gibt es wie aus dem Bild ersichtlich vier Unterarten.

Vary By None

Die komplette Seite wird für die definierte Zeitspanne in den Server Cache geladen.
<%@ outputcache duration="10" varybyparam="none" %>

Vary by Custom
Üblicherweise wird hier der Wert Browser übergeben und anhand des Clientbrowsers mehrere Cache Objekte angelegt. Da von Webserver Controls unterschiedlicher HTML COde je Browser erzeugt wird, macht dies durchaus Sinn. Wenn man ein abweichenden Wert als Browser angeibt muss die Umsetzung des Caching manuell implementiert werden. Dazu muss die Methode HttpApplication.GetVaryByCustomString überladen werden.

<%@ outputcache duration="10"  varybycustom="browser" %>

Vary By Param
In dynamischen Websiten kommt es oft vor, das der Inhalt der Website über Paramter gesteuert wird. So kann eine Kundenadresse über show.asp?id=10 angezeigt werden. Wenn hier Caching wirken soll muss für jeden Parameter eine eigener Cache angelegt werden. Über das Attribut werden die Parameter durch Strichpunkte getrennt angegeben.
<%@ outputcache duration="120" varybyparam="Category" %>

Das ganze funtkioniert nicht nur für Get sondern auch für Post.

Vary By Control
Selbst vom Inhalt eines Formularfeldes kann das Caching abhängig sein. Sinn macht das z.B. für die Auswahl einer Drop Down Box.
In Formularen könnte auch der Einsatzz von Page Fragment Caching nützlich sein. Dies cacht nur Teile der Website.

Vary by Header

Auch in Abhängigkeit von Header Feldern aus dem HTTP Header kann das Caching gesteuert werden . In diesem Beispiel ist es die Spracheinstellung.
<%@ outputcache duration="10" varybyparam="none" varybyheader="Accept-Language" %>

Nun stellt sich die Frage wie Speicher intensiv das Caching ist. Ein Caching abhängig von ein oder mehreren Parametern kann durchaus gewaltige Datenmengen verursachen. Im Extremfall wird die Anwendung sogar langsamer.

Allerdings wirft das Caching auch einige Fragen auf. So können alte Daten angezeigt werden. Oder was passiert z.B. bei einer Seite die nicht jeder sehen darf, deren dynamischer Inhalt also nur für mich generiert wurde. Solch eine Seite wird durch Authentication geschützt.
Es gibt en zusätzliches Attribut "location" in der der Speicherort angegeben werden kann.
<%@ OutputCache Duration=60 Location="Client" %>

Um Cache Speicher von zwischengschalteten Servern zu nutzen, z.B. Porxy Server wird der  Wert auf Downstream gesetzt.
<%@ OutputCache Duration=60 Location="Downstream" %>

Die Liste der möglichen Parameter erklärt sich selbst.

Any | Client | Downstream | Server | None

Wie in .NET Framework üblich gibt es eine Klasse die das Caching verwaltet. Diese befindet sich in der Response Klasse und heisst Cache. Damit kann auch aus Codebhind, per Code Einfluss auf das Caching genommen werden.

Response.Cache.SetCacheability(HttpCacheability.Public);

Das Datacaching wird in einem seperaten Artikel erläutert.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 07.03.2003
  Gültig bis: 06.04.2003
29 Ratings
Bewertung: 25,5%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG