Optimieren von AEM Site-Caches
Die Optimierung des Caching innerhalb Ihrer AEM-Architektur ist eine der schnellsten Möglichkeiten, eine große Leistungssteigerung zu erzielen. In diesem Artikel wird erläutert, wie Sie die verschiedenen Caches optimieren können, die in einer AEM-Architektur verfügbar sind.
Beschreibung description
Umgebung
Adobe Experience Manager 6.5
Probleme/Symptome
Optimieren von AEM Site-Caches
AEM-Architektur und -Caching
In allen AEM-Architekturen treten beim Besuch Ihrer Site mehrere Cache-Ebenen auf. In einer standardmäßigen AEM-Architektur sind vier Cache-Ebenen zu berücksichtigen. Dazu gehören der Webbrowser, CDN, Dispatcher und AEM.
Auflösung resolution
A. Browser-Caching
Die erste Cache-Ebene, auf die ein Benutzer bei einem wiederholten Besuch Ihrer Site trifft, ist sein eigener Browser. Das Caching auf Browser-Ebene erfolgt normalerweise über die Cache-Control: max-age=… Antwort header. Die Einstellung max-age teilt dem Browser mit, für wie viele Sekunden die Datei zwischengespeichert werden soll, bevor versucht wird, sie „erneut zu überprüfen“ oder erneut von der Site anzufordern. Dieses Konzept des Cache max-age wird häufig als „Cache-Ablauf“ oder TTL („Time to Live„) bezeichnet.
Es gibt verschiedene Optionen (oder „Anweisungen„) im Header Cache-Control, die beeinflussen, wie das Caching erfolgt. Im Folgenden finden Sie einige gemeinsame Richtlinien:
-
private : Die private -Direktive im Cache-Control-Header sorgt dafür, dass die Datei nur im Browser zwischengespeichert wird, nicht in Zwischen-Caches wie CDNs. Eine praktische Verwendung für diese Direktive wäre, wenn Ihre Seite personalisierte / benutzerspezifische Inhalte enthält.
Beispielverwendung:
Cache-Control: max-age=300, private
-
s-maxage - Die s-maxage-Direktive im Cache-Control-Header ermöglicht es Ihnen, eine andere TTL für freigegebene Caches wie CDNs festzulegen. Wenn dieser Wert festgelegt ist, verwendet der Browser das, was im max-age festgelegt ist, und andere Caches berücksichtigen stattdessen die S-maxage-Einstellung.
Beispielverwendung:
Cache-Control: max-age=600, s-maxage=300
Moderne Browser unterstützen alle den Cache-Control-Header. Es gibt jedoch einige alte veraltete Header aus HTTP/1.0, die weiterhin Auswirkungen auf das Caching haben können. Diese Kopfzeilen lauten Ablauf und Pragma. Wenn Sie sehr alte Browser nicht unterstützen müssen, senden Sie diese Antwort-Header nicht.
Neben der Zwischenspeicherung ist auch eine erneute Überprüfung ein wichtiges Konzept. Die erneute Überprüfung beruht auf den Last-Modified(response) / If-Modified-Since (request) und den ETag (response) / If-None-Match (request)-Kopfzeilen.
Vorsicht beim Testen von Browsern:
Wenn Sie beim Testen des Caching in Google Chrome über HTTPS testen und ein selbstsigniertes Zertifikat haben, wird nichts zwischengespeichert. Chrome speichert Antworten nicht zwischen und führt keine erneute Überprüfung durch, wenn ein nicht vertrauenswürdiges oder ungültiges Zertifikat vorhanden ist.
Hinweis zum Dispatcher:
Es gibt ein Problem mit AEM Dispatcher v4.2.3 und früheren Versionen, bei dem die /enableTTL
nur mithilfe der max-age-Direktive zwischenspeichert. Dies bedeutet, dass selbst wenn private oder s-maxage -Anweisungen festgelegt sind, es dennoch zwischenspeichert, wenn max-age festgelegt ist. Dieses Problem wurde in Dispatcher 4.2.4 und höheren Versionen behoben.
B. CDN-Caching
Ein CDN oder „Content Delivery Network ist ein verteiltes Netzwerk von Webservern, das Inhalte vom nächstgelegenen Standort Ihrer Benutzer zwischenspeichert und bereitstellt. Dadurch werden Netzwerksprünge und Entfernungen vom Computer des Benutzers zu Ihren Inhalten reduziert, wodurch „Round Trip Time“ (RTT) verringert wird. RTT ist die Zeit, die der Browser benötigt, um eine Anfrage an Ihre Site zu senden und eine Antwort zu erhalten. Durch den Wettbewerb im Bereich der CDN-Anbieter sind CDN sehr kosteneffizient geworden. Dies erleichtert die Entscheidung, ein CDN für Ihre Site zu verwenden. Wenn Sie noch kein CDN verwenden, sollten Sie auf jeden Fall ein CDN in Ihre Site integrieren.
Es gibt viele CDN-Anbieter. Jeder bietet verschiedene Funktionen und Konfigurationen.
Wie funktioniert das CDN-Caching?
CDNs speichern Inhalte anhand von Regeln, die Browsern ähneln. Sie verwenden den 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, eine manuelle Leerung des Caches Trigger. In vielen Fällen haben Cache-Leerungen eine gewisse Verzögerung (z. B. 15 Minuten) in Bezug auf die Übertragung an alle Edge-Server, auf denen sich Ihre Dateien befinden.
Optimieren der CDN-Nutzung
Es gibt einige Maßnahmen, um sicherzustellen, dass Sie Dateien im CDN optimal zwischenspeichern:
-
Verwenden Sie ein CDN, das die Anweisungen stale-while-revalidate und stale-if-error im Cache-Control- unterstützt.
- stale-while-revalidate - Diese Direktive weist das CDN an, die alte (bereits zwischengespeicherte) Version der Datei zu bedienen, während es nach Ablauf der Cache-Datei eine neue abruft.
- stale-if-error - Ebenso weist diese Direktive das CDN an, die alte (bereits zwischengespeicherte) Version der Datei zu liefern, wenn die Quelle während der erneuten Überprüfung mit einem Fehler antwortet.
-
GZip-Komprimierungsantworten für alle Dateitypen, die nicht vorkomprimiert sind.
Dies sollte auf Dispatcher-Ebene erfolgen. Dadurch wird sichergestellt, dass Sie die Anzahl der an das CDN gesendeten Bytes reduzieren. CDNs berechnen in der Regel Bytes, die übertragen werden, sodass sich durch Komprimieren von Antworten die Kosten verringern.
-
Aktivieren Sie GZip-Komprimierung auf Dispatcher-Ebene: Apache - use mod_deflate. Seien Sie vorsichtig, wenn mod_deflate die Variable Vary verwendet. In bestimmten Fällen kann der Vary-Header dazu führen, dass CDN und Browser das Caching vollständig überspringen.
-
Microsoft IIS - Verwenden Sie Dynamische Komprimierung.
-
Lassen Sie keine gzip-Komprimierung großer Dateien oder Dateien zu, die bereits komprimiert sind. Beachten Sie, dass die meisten Bild- und Videoformate bereits vorkomprimiert sind. Eine spontane Komprimierung auf Webserver-Ebene kostet sehr viel Leistung.
- Auf Apache kann dies über die AddOutputFilterByType-Direktive erfolgen: AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
- In IIS kann dies über die Konfiguration
<
dynamicTypes>
gesteuert werden.
-
Wenn Ihr CDN-Anbieter Edge-seitige Includes (ESI) unterstützt, nutzen Sie diese Funktion. AEM-Komponenten können mithilfe von ESI aufgelöst werden. Verwenden Sie dazu Apache
\[
Sling Dynamic Includes\]
implementieren Sie eine benutzerdefinierte Lösung. Dies ist nützlich, wenn Sie relativ statische Seiten haben, aber dynamischere Inhalte in einigen Teilen der Seite bereitstellen. In diesen Fällen unterteilen Sie die Seite in mehrere CDN-Dateien. Auf diese Weise können Sie verschiedene Teile der Seite für verschiedene Zeiträume zwischenspeichern.
-
Beliebte CDN-Anbieter
Im Folgenden finden Sie eine Liste einiger beliebter CDN-Anbieter:
- Microsoft Azure CDN
- Amazon CloudFront
- Akamai
- Google Cloud-CDN
- Rackspace-CDN
- Stackpath CDN (früher als Max. CDN bezeichnet)
- Cloudflare
- Fastly
- F5 Networks CDN
Es gibt mehrere weitere mit jeweils unterschiedlichen Funktionen.
Achtung:
Achten Sie auf den Vary-Antwortheader. In bestimmten Fällen kann Vary dazu führen, dass sowohl das CDN als auch der Browser das Caching vollständig überspringen. Als Faustregel gilt: Vermeiden Sie das Hinzufügen von Vary mit Ausnahme von Vary: Accept-Encoding (wird nur angewendet, wenn die Antwort gzip-komprimiert ist). Mit anderen Worten: Wenn Sie die Ausgabe einer Antwort „variieren“ müssen, verwenden Sie eine andere URL.
Wenn Sie beispielsweise die HTML für Mobilgeräte im Vergleich zum Desktop in einer anderen Version verwenden, verwenden Sie eine andere URL. Dadurch können CDNs und Browser effektiver zwischenspeichern.
C. Caching in AEM Dispatcher
Wenn der CDN-Cache abgelaufen ist, erreicht die Anfrage den AEM-Dispatcher-Cache. Auf dieser Ebene können viele Dinge getan werden, um das Caching zu optimieren. Anweisungen hierzu finden Sie unter Wie wird der Dispatcher-Cache optimiert?
D. AEM-Veröffentlichungsinstanzen
Auf AEM-Ebene gibt es einige Dinge, die getan werden sollten, um die verschiedenen Cache-Ebenen zu optimieren:
-
Legen Sie die folgenden HTTP-Antwort-Header fest, die standardmäßig nicht von AEM festgelegt werden.
- Cache-Control: max-age=… - Zum Festlegen dieses Headers könnte ACS Commons - Dispatcher TTL verwendet werden, oder Sie könnten benutzerdefinierten Code implementieren, um ihn festzulegen.
- Zuletzt geändert - Wenn der Seiteninhalt relativ statisch ist, z. B. ein Artikel, können Sie für den zuletzt geänderten Header das Datum/die Uhrzeit cq:lastModified festlegen (letzte Änderung des Artikels). Wenn die Seite jedoch dynamisch ist und JCR-Abfrageergebnisse im Komponenteninhalt enthalten sind, ist es am besten, sie auf die Verwendung des aktuellen Datums/der aktuellen Uhrzeit festzulegen.
- ETag - Wenn Sie dies anstelle von Last-Modified verwenden, können Sie einen ReplicationEventListener schreiben, der auf Seitenaktivierungen wartet und einen MD5-Hash des Seiteninhalts generiert. Dies kann als Eigenschaft im Knoten jcr:content der Seite in der Autoreninstanz festgelegt werden. Wenn Seiten repliziert werden, werden sie an die Veröffentlichungsinstanzen gesendet. Bei Seitenkomponenten mit relativ statischem Inhalt könnte dies in Ordnung funktionieren. Wenn die Seite jedoch etwas dynamisch ist oder auf einen großen Teil des Inhalts verweist, muss das ETag weggelassen (oder berechnet) werden.
-
Wenn die Website personalisierte/dynamische Inhalte hat:
-
Verwenden Sie Apache Sling Dynamic Includes um den Inhalt aufzuteilen, sodass verschiedene Teile der Seite für verschiedene Zeiträume zwischengespeichert werden können.
-
Das Caching kann mit den folgenden Technologien durchgeführt werden:
- Edge-seitige Includes (ESI) im CDN
- Server-seitige Includes (SSI) auf dem Webserver
- Asynchrones JavaScript und XML (AJAX) im Browser
-
Komponenten auf der Seite können in separate Anforderungen unterteilt werden, die für verschiedene Zeiträume zwischengespeichert werden können. Relativ statische Teile der Seite können viel länger zwischengespeichert werden.
-
-
Erwägen Sie die Verwendung HTTP-Cache-Funktion von ACS Commons.
-
-
Optimieren Sie Client-Bibliotheken.
-
Aktivieren Sie die Minimierung in Client-Bibliotheken.
-
Wenn Dateien in der Client-Bibliothek vorminimiert sind, deaktivieren Sie die Minimierung für diese Client-Bibliothek. Bearbeiten Sie den Knoten cq
- Legen Sie die Eigenschaft „jsProcessor“ des Typs „String
[
mit dem Wert „min:none“]
. - und setzen die Eigenschaft cssProcessor des Typs String
[
]
mit dem Wert min:none - Weitere Informationen finden Sie hier.
- Legen Sie die Eigenschaft „jsProcessor“ des Typs „String
-
Einbetten von ClientBibliotheken, um JS- und CSS-Dateien zu minimieren und zu reduzieren.
-
Implementieren Sie versioned-clientlibs von ACS, damit CDN und Dispatcher js- und css-Dateien über längere Zeiträume zwischenspeichern können.
-