it-swarm.com.de

Joomla Caching und Plugins

Wie wirkt sich das Caching auf die verschiedenen Plugins-Trigger aus?

Ich stelle mir vor, dass nach dem Zwischenspeichern einer Seite die anderen Plugins umgangen werden, bis die Cache-Zeit zurückgesetzt wird und die Seite neu erstellt wird.

1
Mat Kay

Es hängt davon ab, welches der von Ihnen verwendeten Cachesysteme (Joomla hat drei) und welche Komponenten Sie verwenden (da verschiedene Komponenten Plugin-Ereignisse an verschiedenen Punkten ihres Ausführungspfads auslösen können).

Wenn Sie zum Beispiel mit dem Plugin System - Page Cache Cachen, gibt es nur zwei Plugin-Ereignisse, die ausgelöst werden, bevor eine zwischengespeicherte Seite bereitgestellt wird:

Eines ist das Ereignis System> onAfterInitialise(), WENN das Plugin so angeordnet ist, dass es vor dem Plugin System - Page Cache Steht. Dies liegt daran, dass System> onAfterInitialise() das erste von Joomla ausgelöste Ereignis ist und dieses Ereignis von System - Page Cache Verwendet wird. Sie müssten also ein Plugin haben, das zu diesem Ereignis und davor System - Page Cache Einspringt.

Das andere Ereignis wird vom Plugin System - Page Cache Selbst ausgelöst: pagecache> onPageCacheSetCaching(). Dieses Ereignis wird verwendet, um das Caching für bestimmte Bedingungen zu deaktivieren. Ein Beispiel für die Verwendung dieser Option ist, wenn Sie ein Plug-In benötigen, das sicherstellt, dass der Facebook-Bot niemals eine zwischengespeicherte Seite erhält. Dieses Event wurde erst in Joomla 3.8 verfügbar (glaube ich).

Bei den beiden anderen Caching-Systemen (Page Cache - Conservative Und Page Cache - Progressive) Kommt es wirklich auf die Komponente an. Sie entscheiden, ob ihre Ansichten zwischengespeichert werden können und was und wann Plugin-Ereignisse ausgelöst werden sollen. Im Allgemeinen entscheidet der Controller jedoch (dh für com_content und die meisten anderen Joomla-Kernkomponenten), ob die angeforderte Ansicht zwischengespeichert werden soll oder nicht, und die meisten Plug-in-Ereignisse werden in der Ansicht ausgelöst. Mit anderen Worten, ihre Ereignisse werden nicht ausgelöst, wenn die Seite zwischengespeichert wird.

Nehmen wir als Beispiel com_content (unter der Annahme, dass die Ansicht com_content im Front-End nicht bearbeitet wird):

In components/com_content/controller.php Ist der erste Parameter der display() -Methode ein Boolescher Wert, der festlegt, ob die Ansicht nach ihrer Erstellung zwischengespeichert werden soll (und ob die zwischengespeicherte Datei, falls vorhanden, auf einem Server gespeichert werden soll). Alle (nicht bearbeiteten) Ereignisauslöser für com_content (onContentPrepare, onContentAfterTitle, onContentBeforeDisplay, onContentAfterDisplay) werden in den Ansichtsdateien ausgelöst (z. B .: siehe /views/article/view.html.php). Wenn die zwischengespeicherte Ansicht bereitgestellt wird, wird keiner dieser Trigger ausgelöst (da view.html.php Nicht verwendet wird).

Einige andere Komponenten verfügen möglicherweise über einen Plugin-Trigger, bevor die Anforderung zum Abrufen des zwischengespeicherten Codes ausgeführt wird. In dieser Situation würde es weiterhin ausgelöst, unabhängig davon, ob die Ansicht zwischengespeichert ist oder nicht.

1
Drew G