Cache

From Joomla! Documentation

Revision as of 08:26, 19 October 2019 by Quiltgabi (talk | contribs)
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎eesti • ‎español • ‎français • ‎italiano • ‎português • ‎русский • ‎فارسی • ‎हिन्दी • ‎中文(台灣)‎


Joomla hat verschiedene Möglichkeiten, "Dinge" zwischenzuspeichern. Hier ist ein Überblick für Administratoren und Entwickler, was, wo und wann.

Für Administratoren

Joomla bietet dem Administrator die Möglichkeit die ganze Webseite oder nur Teile seiner Webseite zwischenzuspeichern. Diese Anleiteung erklärt wie.

Auf einer Joomla-Website Webseite gibt es 3 Dinge, die zwischengespeichert werden können:

  1. Die ganze Seite selbst - der Seiten-Cache
  1. Die Ausgabe der Joomla-Komponente für diese Webseite - bekannt als View-Cache - ist die Ausgabe.
  1. Die Ausgabe aus den auf dieser Seite gezeigten Modulen - bekannt als Modul-Cache.

Man hat eine Reihe von Cache-Einstellungen, mit denen man steuern kann, was zwischengespeichert wird:

  1. Das System-Plugin "System - Page Cache"
  1. Die globale Konfiguration, Registerkarte System, Cache-Einstellungen. Hier kann die System-Cache Option auf
    • AUS - Caching deaktiviert
    • EIN - Konservatives Caching
    • EIN - Progressives Caching
  1. Viele Module in ihren Optionen haben eine Registerkarte Erweitert, in der das Caching auf Global verwenden oder Kein Caching eingestellt werden kann.

Wie im Folgenden beschrieben, gibt es auch Regeln für das Caching, die innerhalb des Joomla-Codes implementiert sind und über die man keine Kontrolle hat.

Man kann den Cache über den Administrator-Menüeintrag System / Cache löschen leeren. Im Allgemeinen kann man sich vorstellen, dass Joomla 3 Stufen des Cache hat, die die Aggressivität steigern.

  1. Konservatives Caching
  1. Progressives Caching
  1. Seiten-Caching

Wir werden uns diese drei im Folgenden im Detail ansehen.

Darüber hinaus können Joomla-Entwickler Caching-Funktionen verwenden, um das Ergebnis von Datenbankabfragen zu speichern, z.B. um die Reaktionsfähigkeit der Website zu erhöhen, aber dies ist außerhalb des Bereichs der Administratorfunktionen.

Seitencaching

Um dies einzuschalten, geht man zu Administrator Extensions / Plugins, sucht das System - Page Cache Plugin und aktiviert es. Das bedeutet, dass Seiten der Website nun zwischengespeichert werden, und wenn sie erneut aufgerufen werden, wird die zwischengespeicherte Seite bereitgestellt, anstatt dass sie von Joomla aus den Informationen in der Datenbank generiert wird. Die zwischengespeicherte Seite wird weiterhin bedient, bis sie abgelaufen ist - wie durch den Parameter Cache Time in den Globalen Konfiguration / System / Cache-Einstellungen definiert.

Wenn man diese Seite als Tutorial liest und den Page Caching testen möchte, dann ist es am besten, die Cache-Einstellungen für die globale Konfiguration auf

  • Cache-Handler - Datei
  • Pfad zum Cache-Ordner - leer lassen
  • Cache Time - 15 (die Standardeinstellung von 15 Minuten)
  • System Cache - AUS - Caching deaktiviert

Um zu überprüfen, ob der Seiten-Cache funktioniert, geht man zu einer Webseite, die einen Artikel anzeigt. Nachdem man diese Seite angezeigt hat, sollten man im Dateisystem ein cache/page Verzeichnis mit einer Datei finden, die einen Dateinamen wie <string of hex digits>-cache page-<string of hex digits>.php enthält. (Joomla muss separate Cacheseiten für separate URLs speichern, so dass die zweite Zeichenkette von Hex-Ziffern ein Hash der URL der Webseite ist, um den Dateinamen eindeutig auf dieser Seite zu zuordnen).

Verwende dann die Administratorfunktionalität, um den Text dieses Artikels zu ändern und die Seite der Website erneut anzuzeigen. Man sollte die zwischengespeicherte Version finden, nicht den geänderten Text.

Das Ändern eines Artikels (oder eines anderen Joomla-Elements) löscht nicht den Seiten-Cache für die Webseite(n), auf der dieser Artikel angezeigt wird. Um den Seiten-Cache zu löschen, geht man zu Administrator System / Cache löschen. Klickt man auf das Kontrollkästchen neben der Cachegruppe "Seite" und drückt man die Schaltfläche Löschen. Wenn man seine Webseite erneut anzeigt, sollte man nun den geänderten Text angezeigt bekommen.

Wenn Ihre Website eine Funktion wie ein Einkaufskorb hat, wird das Anwenden von Page Caching zu Problemen führen, da die Seiten zeigen müssen, was der Kunde bereits ausgewählt hat, anstatt eine gecachte Seite anzuzeigen, die allen gemeinsam ist. Sie können das System Page Cache Plugin jedoch so konfigurieren, dass das Zwischenspeichern bestimmter Menüpunkte oder bestimmter URLs und URL-Bereiche (auf der Registerkarte Erweitert) ausgeschlossen ist, so dass nur wirklich statische Seiten zwischengespeichert werden.

konservatives Caching

Mit Conservative Caching kann man die Ansichts Ausgabe von Komponenten und die Ausgabe von Modulen, die das Caching erlauben, zwischenspeichern. Beachten sollte man jedoch, dass dies nur auf Seiten funktioniert, die nicht über den Page Cache zwischengespeichert werden, da bei diesen Seiten die gesamte Webseite zwischengespeichert wird und konservatives Caching nicht einmal berücksichtigt wird.

Um das konservative Caching einzuschalten:

  1. Öffnen Sie im Kontrollzentrum Konfiguration - Global / System und setzen Sie in den Cache-Einstellungen den System-Cache auf EIN - Konservatives Caching.
  2. Dann gehen Sie zu Erweiterungen / Module und wählen die Module aus, die Sie zwischenspeichern möchten. Wenn das Modul das Caching erlaubt, dann setzen Sie unter der Registerkarte Erweitert die Option Caching auf
  • Global - das Modul wird zwischengespeichert (da unter Global jetzt konservatives Caching eingestellt ist)
  • Kein Caching - dies Modul wird nicht zwischengespeichert.

(Beachte, dass die Cache-Zeit in der globalen Konfiguration in Minuten angegeben ist, während die Cache-Zeit in den Moduleinstellungen in Sekunden angegeben ist.)

Um zu überprüfen, ob es funktioniert, stelle sicher, dass Du abgemeldet bist und rufe einen Artikel auf Deiner Webseite auf. Dann sollte im Dateisystem ein Ordner cache/com_content sein, der die Cache-Datei enthält.

Man findet auch andere Verzeichnisse wie cache/com_languages (da die Anzeige der Seite das Laden der aktuellen Sprache beinhaltet, und diese wird ebenfalls zwischengespeichert) und Verzeichnisse, die sich auf den Modul-Cache beziehen, z.B. cache/com_modules. Diese resultieren aus der Verwendung von Cache, den Entwickler innerhalb der Joomla-Anwendung kodiert haben.

Wenn man den Artikel bearbeitet und speichert und dann die Seite aktualisiert, wird der bearbeitete Text angezeigt. Immer wenn eine Bearbeitung gespeichert wird, leert Joomla den Cache für diesen Artikel.

Man kann jedoch nachweisen, dass der Cache funktioniert, wenn man die Cache-Datei im Verzeichnis cache/com_content mit einem einfachen Texteditor bearbeitet. Damit ändert man einen Buchstaben innerhalb des Artikels und speichere die Cache-Datei. Aktualisiert man nun die Webseite, sollte die Änderung der Cache-Datei zu sehen sein.

Wie kann man auswählen, welche Ansicht der Kompomenten zwischengespeichert wird und unter welchen Umständen? Leider ist das nicht möglich. Dies wird von den Joomla-Entwicklern in der component php festgelegt. Für jede Komponente gelten unterschiedliche Kriterien. Welche das sind, ist in der Datei controller.php zu finden. Für die Komponente Kontakt z.B. findet man die Kriterien zum Zeitpunkt des Schreibens (Joomla Version 3.9.2.) in der Datei components/com_contact/controller.php.

if (JFactory::getApplication()->getUserState('com_contact.contact.data') === null)
{
	$cachable = true;
}

Das bedeutet, dass die mit Kontakten verknüpften Ansichten zwischengespeichert werden können, es sei denn, es gibt Sitzungsdaten, die mit com_contact.contact.data verschlüsselt sind - was der Fall ist, wenn der Benutzer in der Benutzersitzung ein Kontaktformular angezeigt hat (z.B. auf einer Seite, auf die ein Menüpunkt vom Typ Kontakte / Single Contact zeigt).

Die entsprechende Datei für Artikel components/com_content/controller.php enthält:

$cachable = true;
if ($user->get('id') || ($this->input->getMethod() === 'POST' && (($vName === 'category' && $this->input->get('layout') !== 'blog') || $vName === 'archive' )))
{
	$cachable = false;
}

Der Ausdruck $user->get('id') ist wahr, wenn es sich um einen angemeldeten Benutzer handelt, d.h. Artikel werden für angemeldete Benutzer nie zwischengespeichert. Die nachfolgenden Ausdrücke beziehen sich auf andere Bedingungen, wenn das Caching nicht durchgeführt wird, auch wenn der Benutzer nicht angemeldet ist.

Auf diese Weise kann man also herausfinden, unter welchen Umständen das Caching durchgeführt wird, aber es ist nicht ratsam, diese zu ändern. Man kann auch demonstrieren, dass Module zwischengespeichert werden, indem man das Joomla Breadcrumbs-Modul verwendet. Man muss sicherstellen, dass es an einer Modulposition auf der Webseite angezeigt wird, seine Caching-Option einstellt und die zwischengespeicherte Datei im Cache/mod_breadcrumbs manuell bearbeitet.

Progressive Caching

Wie das konservative Caching speichert auch das progressive Caching die Ausgabe aus Komponentensichten und Modulen. Der funktionale Unterschied zwischen den beiden besteht darin, dass beim Progressive Caching 'alle Module immer zwischengespeichert werden'. In diesem Fall hat die Einstellung der Option No Caching für ein Modul keine Auswirkung. Wenn die Caching-Speicheroption auf Datei steht, dann finden Sie die Modul-Cache-Datei (die Ausgabe aller Module wird in derselben Datei gespeichert) im Verzeichnis cache/com_modules.

Um das progressive Caching einzuschalten, geht man zur Administrator Global Configuration / System und stellt in den Cache-Einstellungen den System-Cache auf AN- Progressive Caching.

Hinsichtlich der Bedingungen für das Caching von Joomla-Kernkomponentenansichten gibt es keinen Unterschied zwischen konservativem und progressivem Caching'. Trotz allem, was man auf einigen Websites lesen kann und Antworten auf Fragen zum Stapelüberlauf, ist es nicht der Fall, dass sich konservatives Caching auf das nicht angemeldete Mitglied bezieht und progressives Caching auf das angemeldete Mitglied.

Zusammenfassung

Eine Zusammenfassung der Caching-Typen findet man unten.

Seitencaching

  • Konfiguration: Integriertes Plugin (Erweiterungen -> Plugin Manager -> System - Page Cache)
  • Caches: jede ganze Seite Ihrer Website.
  • 'Based on': URL
  • Mehr Info:
    • Optionales Browser-Caching: Cachiert auch auf dem Browser/Computer der Besucher.
    • Nur Cacheseiten für Gastbesucher (nicht für eingeloggte Besucher). Sei vorsichtig bei der Verwendung dieses Plugins, wenn man eine interaktive Website hat, auf der man Inhalte basierend auf Session-/Cookie-Informationen und nicht nur auf der reinen URL-Server verwenden möchten. Funktionen wie ein Einkaufswagen funktionieren nicht.

View Caching

  • Konfiguration': Globale Konfiguration->Cache
  • Caches': jede Ansicht einer Komponente
  • 'Based on': URL, Ansicht, Parameter, .....
  • Mehr Info: Komponentenentwickler müssen dies in ihren Code aufnehmen, um zu funktionieren. Meistens ist dies nicht der Fall. Die Joomla Hauptinhaltskomponente verwendet diese, aber nur für Gastbesucher Ihrer Website, obwohl dies nicht für jede Komponente verpflichtend ist.

Module Caching

  • Konfiguration': Globale Konfiguration->Cache
  • Caches': jedes Modul (individuell angepasst über die erweiterten Parameter jedes Moduls)
  • 'Based on': die Modul-ID, die Ansichtsebenen des Benutzers und der Itemid-Parameter im HTTP-Request.
  • Mehr Info: Man muss es bei einigen Modulen deaktivieren, um Probleme zu vermeiden.

Weiteres Caching

Wenn man andere Cachesysteme und -möglichkeiten ausprobieren möchten, sollte man vielleicht die Erweiterungen von Drittanbietern rund um das Caching ausprobieren.

Caching Engines oder Speicher

  • Konfiguration': Globale Konfiguration->Cache

Hier kann man wählen, welches System die Website für das gesamte Caching verwenden soll. Aktuelle Optionen sind: APC, Bachelor, Datei, Memcache, Redis, XCache.

APC zum Beispiel speichert auch Ihren php-Operationscode.

Für Entwickler

Die Klasse JCache'' erlaubt viele verschiedene Arten und Ebenen des Caching. Die folgenden Unterklassen sind speziell entwickelt worden, aber man kann seine eigenen hinzufügen oder die Hauptklasse auf viele verschiedene Arten verwenden.

Vergiss nicht, dass die erste Ebene des Cache, auf die gestoßen ist, jedes tiefere Caching überschreibt. Man nimmt an, dass zu viele Ebenen auch kontraproduktiv sind (aber zu verifizieren).

  • 'JCacheView' cachet und gibt die Ausgabe einer bestimmten Ansicht (in MVC) zurück. Eine Cache-ID wird automatisch aus der URI, der spezifischen Ansicht und ihrer spezifischen Methode generiert, oder man kann seine eigene angeben.

Dies kann automatisch über die Display-Funktion des Basiscontrollers erfolgen. Zum Beispiel in der Steuerung deiner Komponente:

class DeliciousController extends JController {
	function display() {
		parent::display(true); //true asks for caching.
	}
}

Es gibt auch einige urlparams zu beachten. Überprüfe dies "joomla stack"

Beachte auch, dass Aktualisierungen (z.B. Hits oder Besucherzahlen) NICHT aktualisiert werden (es sei denn, man fügt dies außerhalb dieser Methode und damit eines tieferen MVC-Teils hinzu.)

  • JCachePage cachet und gibt den Text der Seite zurück.
  • JCacheCallback cachet und gibt die Ausgabe und die Ergebnisse von Funktionen oder Methoden zurück.

Wenn man Abfragen zwischenspeichern möchte, ist dies eine gute Klasse dafür, wie hier gezeigt: Using caching to speed up your code

  • JCacheOutput cachet und gibt die Ausgabe zurück.

Dies ist eher für das Caching eines bestimmten Teils des PHP-Codes gedacht. Es verhält sich wie ein Ausgabepuffer, aber im Cache.

Referenzen