.NET Core Tipp: Seiteninhalte zwischenspeichern (InMemory-Cache)

Problem

Inhalte einer Seite werden aus der Datenbank geladen. Dieser aufbereitete Inhalt ändert sich selten und soll zwischengespeichert werden. Es soll ein einfacher Ansatz gewählt werden, der einerseits mit Azure App Service kompatibel ist und in einem vernünftigen Kosten-/Nutzenverhältnis im Bezug zum Anwendungsfall liegt.

Als Ausgangslage dient die Verarbeitungszeit von circa 122 Millisekunden ohne Cache.

Abbildung zeigt die Verarbeitungszeit der Seite mit knapp 122 Millisekunden
Abbildung zeigt die Verarbeitungszeit der Seite mit knapp 122 Millisekunden

Aktion

In ASP.NET Core gibt es den Cache-Tag Helper, der für diese Zwecke nutzbar ist.

<cache expires-after="@TimeSpan.FromHours(3)">
    <div class="timeline">
        @foreach (var jahr in Model)
        {
            <div class="timeline-breaker">@jahr.Jahr</div>
            ...
        }

        <div class="timeline-breaker timeline-breaker-bottom">2009</div>
    </div>
</cache>

Nach der Kapselung des Inhalts wird der Inhalt für die definierte Zeitdauer im Speicher gehalten. Dadurch wird die Aufbereitungszeit reduziert.

Resultat

Der aufbereitete Inhalt wird im App Service zwischengespeichert und innerhalb der definierten Zeitdauer ab dem zweiten Aufruf der Seite an den Client zurückgeliefert. In dieser Zeit erfolgen keine Anfragen an die Datenbank.

Die Verarbeitungszeit der Seite beträgt neu 40.68 Millisekunden. Das ist circa dreimal schneller.

Abbildung zeigt die Bereitstellungszeit nachdem die Anfrage aus dem Cache beantwortet wird.
Abbildung zeigt die Bereitstellungszeit nachdem die Anfrage aus dem Cache beantwortet wird.