Inhalt
Vorwort
1 Wie .NET und ASP.NET funktionieren
2 Installation
3 Hinweise zu VB.NET
4 »Hallo, Welt!« – Ein ASP.NET-Crashkurs
5 Die Page-Klasse
6 HTML-Serversteuerelemente
7 Validierung von Anwendereingaben
8 Webserversteuerelemente
9 Webserversteuerelemente für die Darstellung von Listen
10 Webserversteuerelemente selbst erstellen
11 Der Status von Seiten, Sitzungen und Applikationen
12 ASP.NET und Datenbanken
13 »Wer darf was?« ASP.NET und Sicherheit
14 Webanwendungen erstellen und konfigurieren
15 Leistungssteigerung durch Caching
16 Web Services
A Anhang
Index
Download (ca 14,3 MB)
Buch bestellen (29,90 EUR)
Ihre Meinung?@
<< zurück | Galileo Computing / <openbook> / Einstieg in ASP.NET | vor >>
Einstieg in ASP.NET von Matthias Lohrer
| Kapitel 15 Leistungssteigerung durch Caching
|  | 15.1 Ganze Seiten cachen
|  |  | 15.1.1 Formulare cachen
|  | 15.2 Teile von Seiten cachen
|  |  | 15.2.1 Benutzersteuerelemente cachen, die Formulare enthalten
|  | 15.3 Cache-Einstellungen mit der Klasse HttpCachePolicy programmgesteuert beeinflussen
|  | 15.4 Beliebige Daten und Objekte im Cache ablegen
|  | 15.5 Den Cache automatisch aktualisieren
|  |  | 15.5.1 Den Cache vom Inhalt einer XML-Datei abhängig machen
|  |  | 15.5.2 Weitere Möglichkeiten, den Cache abhängig zu machen
|  |  | 15.5.3 Den Cache über Prioritäten steuern
|  |  | 15.5.4 Reagieren, wenn ein Eintrag aus dem Cache gelöscht wird
|  | 15.6 Allgemeine Tipps zur Steigerung der Performance
|  | 15.7 Weiterführende Ressourcen
# Kapitel 15 Leistungssteigerung durch Caching Zeit ist Geld. Und Websurfer sind mit ihrer Zeit besonders knauserig. Mit Hilfe von gezieltem Caching steigern Sie die Leistung Ihrer Webanwendung. Damit steigern Sie gleichzeitig die Zufriedenheit der Besucher Ihrer Website. Niemand wartet gern. Auch Websurfer warten nicht gern darauf, dass die gewünschte Seite sich im Browser aufbaut. Wenn eine Website zu träge reagiert, wird sie für die Besucher unattraktiv, und die Surfer bleiben aus. Im Zeitalter des E-Commerce können lange Ladezeiten sogar einen ökonomischen Schaden verursachen, wenn Surfer beispielsweise einen Online-Shop nur deswegen meiden, weil der Seitenaufbau zu lange dauert. Es gibt verschiedene Methoden, um die Performance einer Website zu erhöhen. Eine Methode, die mit den Mitteln von Software beeinflusst werden kann, ist das Caching. Beim Caching werden Daten so zwischengespeichert, dass sie schnell verfügbar sind. Daten sind für einen Webserver unter zwei Voraussetzungen besonders schnell verfügbar:
| Die Daten liegen nicht auf der Festplatte, sondern bereits im Arbeitsspeicher.
| Die Daten sind abruffertig, das heißt, sie müssen nicht erst berechnet werden.
Wenn dann die Anforderung kommt, die Seite angebot.aspx zu senden, muss der Webserver die gecachte Seite nicht erst umständlich auf der Festplatte suchen, die enthaltenen Skripte ausführen und das Ergebnis schließlich zur Verfügung stellen. Nein, ein gezielter Griff ins RAM-Regal reicht und der Besucher erhält das Gewünschte schneller, als er erwartet hat. ASP.NET bietet eine ausgefeilte Caching-Technologie. Eine spezielle Form des Cachings ist bereits ohne Zutun des Entwicklers bei jedem Seitenaufruf präsent. Im Gegensatz zum herkömmlichen ASP werden die Seiten nicht bei jedem Aufruf erneut interpretiert. Statt dessen kompiliert der Just-in-Time-Compiler des .NET Frameworks jede aspx-Seite beim ersten Aufruf. Wenn diese kompilierte Version erst einmal verfügbar ist, führt ASP.NET künftig stets die kompilierte Seite aus. Änderungen an der ursprünglichen Quelldatei erkennt ASP.NET automatisch. In diesem Fall erfolgt automatisch eine erneute Kompilierung. Diese Just-in-Time-Kompilierung nutzt die zweite der eben vorgestellten Caching-Methoden: Die Daten müssen nicht erst neu berechnet werden, sondern liegen bereits in der ausgabefertigen Form vor. Allerdings müssen auch die kompilierten Seiten noch von der Festplatte geladen werden. Sie werden nicht automatisch auch im Arbeitsspeicher gehalten. Über diese hilfreiche Arbeit des Just-in-Time-Compilers hinaus bietet ASP.NET weitere Möglichkeiten, mit Hilfe von gezieltem Caching die Leistung eines Systems zu verbessern. Dem Entwickler stehen prinzipiell drei Methoden zur Verfügung, Daten im Arbeitsspeicher zu halten. Er kann
| eine ganze Seite,
| Teile von Seiten oder
| Objekte beliebigen Typs
cachen, das heißt im Arbeitsspeicher zwischenspeichern. Alle drei Möglichkeiten werden im Folgenden vorgestellt. ## 15.1 Ganze Seiten cachen Eine Seite, die nicht gecacht wird, muss ASP.NET bei jedem Aufruf neu rendern. Die Seite cache_01.aspx ist ein Beispiel für eine Seite, die nicht gecacht wird. Wenn Sie die Seite im Browser laden und mehrmals einen Reload ausführen, wird die Zeitangabe stets sekundengenau angezeigt. Daran können Sie erkennen, dass ASP.NET die Seite komplett neu aufgebaut hat.
    <!-- cache_01.aspx -->
    <%@ Page Language="VB" Debug="True" Strict="True" %>
    <html>
    <head><title>Eine aspx-Seite cachen</title></head>
    <body>
    <h3>Eine aspx-Seite cachen</h3>
    <p>Es ist jetzt <% = now.ToLongTimeString() %> Uhr.</p>
    </body></html>
Mit Hilfe der OutputCache-Direktive können Sie die Seite cachen. Wenn Sie die Seite cache_02.aspx aufrufen und mehrmals einen Reload ausführen, wird die Zeit nicht mehr sekundengenau angezeigt. Die erste Zeitangabe bleibt über die folgenden zehn Sekunden gleich. Daran erkennen Sie, dass ASP.NET diese Seite nicht neu aufgebaut, sondern aus dem Cache geladen hat. Erst nach Ablauf von zehn Sekunden wird die Zeitangabe aktualisiert.
    <!-- cache_02.aspx -->
    <%@ Page Language="VB" Debug="True" Strict="True" %>
    <%@ OutputCache Duration="10" Location="Any"
                    VaryByParam="None" %>
    <html>
    <head><title>Eine aspx-Seite cachen</title></head>
    <body>
    <h3>Eine aspx-Seite cachen</h3>
    <p>Es ist jetzt <% = now.ToLongTimeString() %> Uhr.</p>
    </body></html>
Hier klicken, um das Bild zu Vergrößern Abbildung 15.1 Bei einem Reload können Sie an der Uhrzeit erkennen, ob die Seite gecacht wurde oder nicht. Das Duration-Attribut der OutputCache-Direktive gibt die Zeit in Sekunden an, für die die Seite gecacht werden soll. Mit Duration="10" legt cache_02.aspx fest, dass die Seite für zehn Sekunden im Cache bleiben soll. Während dieser Zeit wird die Seite aus dem Cache geladen. Nach Ablauf dieser Zeit wird die Seite bei einem weiteren Aufruf neu gerendert. Mit dem Location-Attribut geben Sie an, wo die Seite gecacht werden soll. Prinzipiell kann die Seite auf dem Server, auf einem Proxyserver oder auf dem Browser des Anwenders gecacht werden. Wenn alle drei Varianten gleichzeitig in Frage kommen, dann kann der Wert Location="Any" verwendet werden. Das ist zugleich auch die Voreinstellung. Tabelle 15.1 verzeichnet die Attribute der OutputCache-Direktive.
Achtung Die Seite wird nicht automatisch alle zehn Sekunden neu gerendert und in den Cache geladen. Wenn die Cache-Zeit abgelaufen ist, wird die Seite aus dem Cache gelöscht. Sie wird erst bei einem weiteren Aufruf neu gerendert und auch erst dann erneut in den Cache gestellt. Dort bleibt sie für den festgelegten Zeitraum und verfällt danach wieder.
### 15.1.1 Formulare cachen Mit Hilfe der OutputCache-Direktive können Sie auch die Ausgabe von Formularen cachen, also von solchen Seiten, deren Inhalte von Parametern abhängig sind. cache_03.aspx enthält ein Beispiel. Abbildung 15.2 zeigt die Darstellung im Browser. Die Seite fragt den Anwender, bei welcher Ampelfarbe ein Fußgänger die Straße überqueren darf. Er kann zwischen Rot und Grün wählen. Je nach Antwort erscheint eine Bestätigung oder eine Fehlermeldung. Beide Varianten werden separat gecacht. Erreicht wird das durch die Angabe von VaryByParam="*" in der OutputCache-Direktive. Das bedeutet, dass für alle Parameterwerte ein eigener Cache angelegt wird. Das ist hier unbedingt nötig, denn es werden völlig unterschiedliche Ausgaben erzeugt.
    <!-- cache_03.aspx -->
    <%@ Page Language="VB" Debug="True" Strict="True" %>
    <%@ OutputCache Duration="10" Location="Any"
                    VaryByParam="*" %>
    <script runat="server">
    Sub auswahl (ByVal Sender As Object, _
                 ByVal E As EventArgs)
       If AmpelListe.selectedIndex <> -1 Then
          Select Case AmpelListe.SelectedItem.value
             Case "1"
                ausgabe.InnerText ="Leider falsch!"
             Case "2"
                ausgabe.InnerText ="Das ist richtig!"
          End Select
       End If
    End Sub
    </script>
    <html>
    <head><title>Ein Formular cachen</title></head>
    <body>
    <h3>Ein Formular cachen</h3>
    <p>Es ist jetzt <% = now.ToLongTimeString() %> Uhr.</p>
    <form runat="server" id="myForm">
    Wann darf ein Fußgänger die Straße überqueren?<br>
    <asp:RadioButtonList id="AmpelListe" runat="server"
         RepeatColumns="1"
         TextAlign="Right"
         OnSelectedIndexChanged="auswahl">
         <asp:ListItem text="Bei Rot" value="1" />
         <asp:ListItem text="Bei Grün" value="2" />
    </asp:RadioButtonList><br>
    <asp:Button id="btnOK" runat="server"
         Text="  OK  " /><br>
    <p id="ausgabe" runat="server" />
    </form></body></html>
Hier klicken, um das Bild zu Vergrößern Abbildung 15.2 Jede Antwortmöglichkeit muss separat gecacht werden.
Vorsicht, Falle! Wenn Sie bei einem Formular versehentlich das Attribut VaryByParam="None" angeben, dann wird stets die gleiche Ausgabe erzeugt, unabhängig von den übergebenen Parametern. Für das Beispiel mit der Ampel würde das Folgendes bedeuten: Erst wählt jemand die Antwort Bei Grün. Reaktion: Das ist richtig! Diese Reaktion wird im Cache gespeichert. Dann wählt jemand Bei Rot. Reaktion auch wieder: Das ist richtig! – denn diese Reaktion würde bei VaryByParam="None" noch im Cache liegen!
Wenn Sie Formulare cachen, müssen Sie genau überlegen, ob sich ein Cache lohnt oder nicht. Wenn Sie beispielsweise eine Suchmaschine anbieten, bei der der Anwender in ein Textfeld einen Suchausdruck frei eingeben kann, dann sollten Sie dieses Formular nicht cachen, denn die Suchausdrücke der Anwender werden völlig unterschiedlich sein. Diese Varianten zu cachen würde bedeuten, binnen kürzester Zeit den gesamten Arbeitsspeicher Ihres Servers mit unterschiedlichen Formular-Varianten zu füllen. Damit würden Sie die Leistung Ihres Systems aber nicht erhöhen, sondern beeinträchtigen.
Attribut | Mögliche Werte und Bedeutung
--- | ---
Duration (erforderlich) | Anzahl der Sekunden
Location | Bestimmt, an welcher Stelle gecacht wird: Default-Wert ist Any: im Browser, auf einem Proxyserver oder auf dem Server Client: nur im Browser Downstream: auf jedem cachefähigen http-1.1-Gerät, also z. B. Proxyserver und Browser. Nicht auf dem Server None: Cache ist deaktiviert Server: auf dem Server Das Location-Attribut wird bei Benutzersteuerelementen nicht unterstützt.
VaryByCustom | Beim Wert browser erstellt ASP.NET browserspezifische Cache-Daten. Wenn Sie hier einen individuellen String hinterlegen, müssen Sie die Methode HttpApplication.GetVaryByCustomString in der Datei Global.asax der Anwendung überschreiben.
VaryByControl | Erstellt Cache-Varianten in Abhängigkeit von den hier aufgeführten Eigenschaften eines Webbenutzersteuerelements. Dieses Attribut kann nur in Webbenutzersteuerelementen verwendet werden.
VaryByHeader | Erstellt mehrere Cache-Varianten in Abhängigkeit von den Werten einer Header-Variablen, z. B. VaryByHeader="Accept-Language". Mehrere Header-Variablen werden durch Semikolon voneinander getrennt. VaryByHeader kann nicht in Webbenutzersteuerelementen verwendet werden.
VaryByParam (erforderlich) | Erstellt mehrere Cache-Varianten in Abhängigkeit von den Formularparametern. Werte durch Semikolon voneinander trennen oder None angeben
Tabelle 15.1 Attribute der OutputCache-Direktive
<< zurück | <top> | vor >>
Zum Katalog
Einstieg in ASP.NET bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

.NET-Bibliothek
| Einstieg in VB.NET
| VB.NET
| Einstieg in C#
| Visual C#
| VB.NET und Datenbanken

Empfehlung
| Einstieg in XML

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de