Share via


Zwischenspeichern von Daten auf einer ASP.NET Web Pages (Razor)-Website für bessere Leistung

von Tom FitzMacken

In diesem Artikel wird erläutert, wie Sie mithilfe eines Hilfsprogrammes Informationen zwischenspeichern, um die Leistung auf einer ASP.NET Web Pages -Website (Razor) zu beschleunigen. Sie können Ihre Website beschleunigen, indem Sie die Ergebnisse von Daten speichern, die normalerweise viel Zeit zum Abrufen oder Verarbeiten benötigen und die sich nicht häufig ändern.

Was Sie lernen:

  • Verwenden der Zwischenspeicherung, um die Reaktionsfähigkeit Ihrer Website zu verbessern.

Dies sind die ASP.NET Features, die im Artikel vorgestellt werden:

  • Das WebCache Hilfsprogramm.

Im Tutorial verwendete Softwareversionen

  • ASP.NET Web Pages (Razor) 3

Dieses Tutorial funktioniert auch mit ASP.NET Web Pages 2.

Jedes Mal, wenn jemand eine Seite von Ihrer Website anfordert, muss der Webserver einige Arbeit leisten, um die Anforderung zu erfüllen. Für einige Ihrer Seiten muss der Server möglicherweise Aufgaben ausführen, die (im Vergleich) lange dauern, z. B. das Abrufen von Daten aus einer Datenbank. Auch wenn diese Aufgaben absolut nicht lange dauern, kann eine ganze Reihe von individuellen Anforderungen, die den Webserver dazu bringen, die komplizierte oder langsame Aufgabe auszuführen, wenn ihre Website viel Datenverkehr hat. Dies kann sich letztendlich auf die Leistung der Website auswirken.

Eine Möglichkeit, die Leistung Ihrer Website unter solchen Umständen zu verbessern, ist das Zwischenspeichern von Daten. Wenn Ihre Website wiederholte Anforderungen für dieselben Informationen erhält und die Informationen nicht für jede Person geändert werden müssen, und sie nicht zeitabhängig sind, können Sie die Daten einmal abrufen und dann die Ergebnisse speichern, anstatt sie erneut abzurufen oder neu zu berechnen. Wenn das nächste Mal eine Anforderung für diese Informationen eingeht, rufen Sie sie einfach aus dem Cache ab.

Im Allgemeinen zwischenspeichern Sie Informationen, die sich nicht häufig ändern. Wenn Sie Informationen in den Cache einfügen, werden sie im Arbeitsspeicher auf dem Webserver gespeichert. Sie können angeben, wie lange sie zwischengespeichert werden soll, von Sekunden auf Tage. Wenn der Zwischenspeicherzeitraum abläuft, werden die Informationen automatisch aus dem Cache entfernt.

Hinweis

Einträge im Cache können aus anderen Gründen entfernt werden, als dass sie abgelaufen sind. Beispielsweise kann der Webserver vorübergehend wenig Arbeitsspeicher beanspruchen, und eine Möglichkeit, arbeitsspeicher wiederzugewinnen, ist das Auslösen von Einträgen aus dem Cache. Wie Sie sehen werden, müssen Sie auch dann überprüfen, wenn Sie Informationen in den Cache eingefügt haben, um sicherzustellen, dass sie immer noch vorhanden sind, wenn Sie sie benötigen.

Stellen Sie sich vor, Ihre Website verfügt über eine Seite, auf der die aktuelle Temperatur- und Wettervorhersage angezeigt wird. Um diese Art von Informationen abzurufen, können Sie eine Anforderung an einen externen Dienst senden. Da sich diese Informationen nicht wesentlich ändern (z. B. innerhalb eines Zeitraums von zwei Stunden), und da externe Aufrufe Zeit und Bandbreite benötigen, ist sie ein guter Kandidat für die Zwischenspeicherung.

Hinzufügen der Zwischenspeicherung zu einer Seite

ASP.NET enthält ein WebCache Hilfsprogramm, das das Hinzufügen von Zwischenspeicherung zu Ihrer Website und das Hinzufügen von Daten zum Cache vereinfacht. In diesem Verfahren erstellen Sie eine Seite, auf der die aktuelle Zeit zwischengespeichert wird. Dies ist kein reales Beispiel, da sich die aktuelle Zeit häufig ändert und außerdem nicht komplex zu berechnen ist. Es ist jedoch eine gute Möglichkeit, die Zwischenspeicherung in Aktion zu veranschaulichen.

  1. Fügen Sie der Website eine neue Seite mit dem Namen WebCache.cshtml hinzu.

  2. Fügen Sie der Seite den folgenden Code und Markup hinzu:

    @{
        var cacheItemKey = "CachedTime";
        var cacheHit = true;
        var time = WebCache.Get(cacheItemKey);
    
        if (time == null) {
            cacheHit = false;
        }
    
        if (cacheHit == false) {
            time = @DateTime.Now;
            WebCache.Set(cacheItemKey, time, 1, false);
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>WebCache Helper Sample</title>
    </head>
    <body>
        <div>
            @if (cacheHit) {
                @:Found the time data in the cache.
            } else {
                @:Did not find the time data in the cache.
            }
        </div>
        <div>
            This page was cached at @time.
        </div>
    </body>
    </html>
    

    Wenn Sie Daten zwischenspeichern, legen Sie sie mit einem Namen in den Cache, der auf der gesamten Website eindeutig ist. In diesem Fall verwenden Sie einen Cacheeintrag namens CachedTime. Dies ist die cacheItemKey im Codebeispiel gezeigte.

    Der Code liest zuerst den CachedTime Cacheeintrag. Wenn ein Wert zurückgegeben wird (d. h. wenn der Cacheeintrag nicht NULL ist), legt der Code einfach den Wert der Zeitvariablen auf die Cachedaten fest.

    Wenn der Cacheeintrag jedoch nicht vorhanden ist (d. h. null), legt der Code den Zeitwert fest, fügt ihn dem Cache hinzu und legt einen Ablaufwert auf eine Minute fest. Nach einer Minute wird der Cacheeintrag verworfen. (Der Standardablaufwert für ein Element im Cache beträgt 20 Minuten.) Der Befehl WebCache.Set(cacheItemKey, time, 1, false) zeigt, wie Sie dem Cache den aktuellen Zeitwert hinzufügen und dessen Ablauf auf 1 Minute festlegen. Wenn Sie den slidingExpiration-Parameter auf false festlegen, wird die Ablaufzeit nicht jedes Mal erneuert, wenn sie angefordert wird. Sie läuft genau eine Minute ab, nachdem sie ursprünglich dem Cache hinzugefügt wurde. Wenn Sie diesen Wert auf true 1 Minute festlegen, wird die Ablaufzeit jedes Mal zurückgesetzt, wenn der Wert aus dem Cache angefordert wird.

    Dieser Code veranschaulicht das Muster, das Sie beim Zwischenspeichern von Daten immer verwenden sollten. Bevor Sie etwas aus dem Cache erhalten, überprüfen Sie immer zuerst, ob die WebCache.Get Methode NULL zurückgegeben hat. Denken Sie daran, dass der Cacheeintrag möglicherweise abgelaufen ist oder aus einem anderen Grund entfernt wurde, sodass nie garantiert wird, dass sich ein beliebiger Eintrag im Cache befindet.

  3. Führen Sie WebCache.cshtml in einem Browser aus. (Stellen Sie sicher, dass die Seite im Arbeitsbereich Dateien ausgewählt ist , bevor Sie sie ausführen.) Wenn Sie die Seite zum ersten Mal anfordern, befinden sich die Zeitdaten nicht im Cache, und der Code muss dem Cache den Zeitwert hinzufügen.

    cache-1

  4. Aktualisieren Sie WebCache.cshtml im Browser. Dieses Mal befinden sich die Zeitdaten im Cache. Beachten Sie, dass sich die Uhrzeit seit dem letzten Anzeigen der Seite nicht geändert hat.

    cache-2

  5. Warten Sie eine Minute, bis der Cache geleert wurde, und aktualisieren Sie dann die Seite. Die Seite gibt erneut an, dass die Zeitdaten nicht im Cache gefunden wurden und die aktualisierte Zeit dem Cache hinzugefügt wird.

Zusätzliche Ressourcen