Übersicht

Die Optimierung der Zwischenspeicherung innerhalb Ihrer AEM ist eine der schnellsten Möglichkeiten, eine größere Leistungssteigerung zu erzielen.  Dieser Artikel erklärt, wie Sie die verschiedenen in einer AEM-Architektur verfügbaren Caches optimieren.

AEM-Architektur und Zwischenspeicherung

In allen AEM-Architekturen trifft der Benutzer beim Besuch Ihrer Website auf mehrere Cache-Ebenen.  In einer Standard-AEM-Architektur müssen 4 Cache-Ebenen berücksichtigt werden.  Dazu gehören der Webbrowser, CDN, Dispatcher und AEM-Instanzen.

screenshot_2018-03-25160541

Browser-Zwischenspeicherung

Die erste Cache-Ebene, auf die ein Benutzer bei einem wiederholten Besuch Ihrer Website stößt, ist sein eigener Browser.  Das Caching auf Browserebene erfolgt üblicherweise über den Cache-Control: max-age=... Antwort-Header.  Die Einstellung max-age gibt dem Browser an, für wie viele Sekunden er die Datei zwischenspeichern soll, bevor er versucht, sie zu „revalidieren“ oder erneut von der Seite anzufordern.  Dieses Konzept des Cache max-age wird allgemein als „Cache Expiration“ oder TTL („Time to Live“) bezeichnet.

Es gibt verschiedene Optionen (oder „Direktiven“) im Cache-Control-Header, die das Caching beeinflussen.  Im Folgenden sind einige häufige Direktiven aufgeführt:

  1. private - Die private-Direktive im Cache-Control-Header macht es so, dass die Datei nur im Browser gecached wird, nicht in Zwischencaches wie CDNs.  Ein praktischer Nutzen für diese Direktive wäre, wenn Ihre Seite personalisierte / benutzerspezifische Inhalte enthält. 

    Anwendungsbeispiele:
    Cache-Control: max-age=300, privat
  2. s-maxage - Die Anweisung s-maxage im Header Cache-Control lässt Sie einen unterschiedlichen TTL für geteilte Zwischenspeicher festlegen, wie z. B. CDNs.  Wenn dieser Wert festgelegt ist, verwendet der Browser das, was unter „max-age“ bereitgestellt wird, und andere Zwischenspeicher halten sich an die „s-maxage“-Einstellung.

    Beispielverwendung:
    Cache-Control: max-age=600, s-maxage=300

Moderne Browser unterstützen alle den Cache-Control-Header, jedoch existieren einige veraltete Header aus HTTP / 1.0, die sich immer noch auf das Caching auswirken.  Diese Header sind Expires und Pragma.  Wenn Sie sehr alte Browser nicht unterstützen müssen, senden Sie diese Antwortheader nicht.
Zusätzlich zum Caching ist die Revalidierung ein wichtiges Konzept.  Die Revalidierung beruht auf den Headern Last-Modified (Antwort) / If-Modified-Since (Anfrage), und den Headern ETag (Antwort) / If-None-Match (Anfrage).

Vorsicht:

Browser-Test:

Wenn Sie das Caching in Google Chrome testen, während Sie über HTTPS testen und ein selbst signiertes Zertifikat vorhanden ist, wird nichts zwischengespeichert.  Chrome speichert keine Antworten und führt keine Revalidierung durch, wenn ein nicht vertrauenswürdiges oder ungültiges Zertifikat vorhanden ist.

Hinweis zu Dispatcher:

Es gibt ein Problem mit AEM-Dispatcher v4.2.3 und früheren Versionen, wo die /enableTTL nur Caches mit max-age-Direktive benutzt hat.  Dies bedeutet, dass auch dann, wenn private- oder s-maxage-Direktiven gesetzt sind, trotzdem zwischengespeichert würde, wenn max-age gesetzt ist.  Dieses Problem wurde in Dispatcher 4.2.4 und bei höheren Versionen behoben.

Zwischenspeichern von CDN

 Ein CDN oder "Content Delivery Network", ist ein verteiltes Netzwerk von Webservern, das darauf ausgelegt ist, Inhalte von dem Standort zu speichern und bereitzustellen, der Ihren Nutzern am nächsten ist.  Dies reduziert den Netzwerkverkehr und die Entfernung vom Computer des Benutzers zu Ihren Inhalten, wodurch die „Round Trip Time“ (RTT) reduziert wird.  RTT ist die Zeit, die der Browser benötigt, um eine Anfrage an Ihre Website zu senden und eine Antwort zu erhalten.  Der Wettbewerb im Bereich der CDN-Anbieter hat CDNs sehr kostengünstig gemacht.  Dies macht die Entscheidung, ein CDN für Ihre Site zu verwenden, einfach.  Wenn Sie noch kein CDN verwenden, sollten Sie auf jeden Fall ein CDN in Ihre Site einbauen.

Es gibt viele CDN-Anbieter, jeder bietet verschiedene Funktionen und Konfigurationen.

Wie CDN-Caching funktioniert.

Der Cache-Inhalt von CDNs folgt ähnlichen Regeln wie Browser.  Sie basieren auf dem Cache-Control HTTP Response-Header und greifen im Allgemeinen auf den Expires-Header zurück, wenn kein Cache-Control-Header gefunden wird.

Die meisten CDNs bieten eine Möglichkeit, ein manuelles Leeren des Cache auszulösen.  In vielen Fällen sind Cache-Flushes mit einer gewissen Verzögerung verbunden (zum Beispiel 15 Minuten), hinsichtlich der Übertragung an alle Edge-Server, die Ihre Dateien enthalten.

CDN-Nutzung optimieren.

Einige Dinge müssen getan werden, um sicherzustellen, dass Sie die Dateien optimal im CDN zwischenspeichern:

  1. Verwenden Sie ein CDN, das die stale-while-revalidate und stale-if-error-Direktiven im Header Cache-Steuerung unterstützt.
    • stale-while-revalidate - Diese Anweisung weist das CDN an, die alte (bereits zwischengespeicherte) Version der Datei zu verwenden, während es nach Ablauf der Cachedatei eine neue abruft.
    • stale-if-error - In ähnlicher Weise weist diese Anweisung das CDN an, die alte (bereits zwischengespeicherte) Version der Datei zu liefern, wenn der Ursprung während der Revalidierung mit einem Fehler antwortet.
  2. GZip komprimiert Antworten für alle Dateitypen, die nicht vorkomprimiert sind.
    • Sie sollten dies von der Dispatcher-Ebene aus tun.  Dadurch wird sichergestellt, dass Sie die Anzahl der an das CDN gesendeten Bytes reduzieren.  CDNs berechnen normalerweise nach übertragenen Bytes, so dass das Komprimieren von Antworten die Kosten reduziert.
    • Aktivieren Sie die GZip-Komprimierung auf der Dispatcher-Ebene:
      • Apache - verwenden Sie mod_deflate.  Seien Sie vorsichtig bei der Verwendung des Vary durch mod_deflate.  In bestimmten Fällen kann der Vary-Header bewirken, dass CDN und Browser das Caching vollständig überspringen.
      • Microsoft IIS - verwenden Sie die Dynamische Komprimierung.
  3. Wenn Ihr CDN-Anbieter Edge-Side Includes (ESI) unterstützt, nutzen Sie diese Funktion.
    • AEM-Komponenten können mit ESI untrteilt werden.  Verwenden Sie dazu Apache Sling Dynamic Includes oder implementieren Sie eine benutzerdefinierte Lösung.
    • Dies ist nützlich, wenn Sie relativ statische Seiten haben, aber in einigen Teilen der Seite mehr dynamische Inhalte bereitstellen.  In diesen Fällen unterteilen Sie die Seite im Grunde in mehrere CDN-Dateien.  Auf diese Weise können Sie verschiedene Teile der Seite für unterschiedliche Zeiträume zwischenspeichern.

Beliebte CDN-Anbieter

Im Folgenden finden Sie eine Liste beliebter CDN-Anbieter:

Vorsicht:

Achten Sie auf den Antwortheader Vary.  In bestimmten Fällen kann Vary dazu führen, dass sowohl das CDN als auch der Browser das Caching vollständig überspringen.  Als allgemeine Faustregel, vermeiden Sie das Hinzufügen von Vary mit Ausnahme von Vary: Accept-Encoding (nur angewendet, wenn die Antwort mit gzip komprimiert ist).  Mit anderen Worten, wenn Sie die Ausgabe einer Antwort „variieren“ müssen, verwenden Sie eine andere URL.

Wenn Sie beispielsweise unterschiedliche Versionen von HTML für Mobilgeräte und Desktop haben, verwenden Sie eine andere URL.  Dadurch können CDNs und Browser effektiver zwischengespeichert werden.

AEM-Dispatcher-Caching

Wenn der CDN-Cache abgelaufen ist, würde die Anforderung den AEM-Dispatcher-Cache erreichen.  Auf dieser Ebene gibt es viele Dinge, die zur Optimierung der Zwischenspeicherung durchgeführt werden können.

Da dies ein größeres Thema ist, finden Sie in diesen Artikel Einzelheiten zur Optimierung des Dispatcher-Caches.

AEM-Veröffentlichungsinstanzen

Auf der AEM-Ebene gibt es einige Dinge, die getan werden sollten, um das Caching über die verschiedenen Cache-Ebenen hinweg zu optimieren:
  1. Setzen Sie die folgenden HTTP-Response-Header, die nicht standardmäßig vom AEM gesetzt werden.
    1. Cache-Control: max-age=... - Um diesen Header zu setzen, könnte ACS Commons - Dispatcher TTL verwendet werden, oder man könnte einen eigenen Code implementieren.
    2. Zuletzt geändert “ - Wenn der Seiteninhalt relativ statisch ist, wie z. B. ein Artikel, dann können Sie seine zuletzt geänderte Kopfzeile zu „cq:lastModified Datum/Uhrzeit“ setzen (letzte Änderung des Artikels).  Wenn die Website jedoch dynamisch ist, mit JCR-Abfrageergebnissen, die in Inhaltskomponenten enthalten sind, dann ist es am besten, dass sie das aktuelle Datum / Uhrzeit benutzt.
    3. ETag “ - Wenn Sie dieses Objekt anstelle von Last-Modified verwenden, können Sie einen „ReplicationEventListener“ schreiben, der die Seitenaktivationen abhört und einen MD5-Hash des Seiteninhalts erstellt.  Dies kann als Eigenschaft auf dem „jcr:content“-Knoten der Seite auf der Autor-Instanz festgelegt werden.  Wenn Seiten repliziert werden, werden sie an die Veröffentlichungsinstanzen gesendet.  Bei Seitenkomponenten mit Inhalt, der relativ statisch ist, kann dies durchaus funktionieren. Wenn die Seite jedoch etwas dynamisch ist oder viele Referenzen enthält, muss „ETag“ ausgelassen (oder berechnet) werden.
  2. Wenn die Website über personalisierte / dynamische Inhalte verfügt:
    1. Benutzen Sie „Apache Sling Dynamic Includes“, um den Inhalt aufzuteilen, damit verschiedene Teile der Seite für unterschiedliche Zeiträume zwischengespeichert werden können.
      1. Die Zwischenspeicherung wird mit folgenden Technologien durchgeführt:
        1. Edge-side Includes (ESI) im CDN
        2. Server-side Includes (SSI) auf dem Webserver
        3. Oder Asynchronous JavaScript und XML (AJAX) im Browser
      2. Komponenten auf der Seite können in separate Anforderungen aufgeteilt werden, die für unterschiedliche Zeiträume zwischengespeichert werden können.  Teile der Seite, die relativ statisch sind, können für längere Zeiträume zwischengespeichert werden.
    2. Erwägen Sie, die HTTP Cache-Funktion von ACS Commons zu verwenden.
    3. Aktivieren Sie die Verkleinerung in Clientbibliotheken.
    4. Betten Sie Client -Bibliotheken ein, um js- und CSS-Dateien zu minimieren und zu reduzieren.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie