Allgemeines zu Plugin-Events

  • Ich habe eine grundsätzliche Frage zu Plugin-Events.

    Es stellt sich mir die Frage über Vor- und Nachteile von vielen Plugin-Events in Komponenten:


    Viele Plugin-Events erlauben es, die Funktion einer Komponente an seine eigenen Bedürfnisse anzupassen. Jedoch wird mit jedem Plugin-Event zusätzlicher Software-Code asgeführt, welcher die Geschwindigkeit der Webseite insgesamt verlangsamt.

    Zitat

    Joomla implements the Publish-Subscribe pattern instead. An event is published by the component model (in the pattern called the publisher or the communicator). Plugins can subscribe to this event. The dispatcher sits in between the component and the plugins, serving as a broker. Not the model object itself but data (like an $item, $context array or some kind of flag) is passed as an argument. The mechanism allows a message to be passed through, instead of the original object (like with the Observer-Observable pattern).
    (Quelle: Programming Joomla! Plugins by Jisse Reitsma)

    Wie performant arbeitet dieses Publish-Subscribe pattern in Joomla?
    Wird überhaupt viel Code ausgeführt, wenn kein Plugin vorhanden ist, das auf den ausgelösten Event hört?

    Was sind so allgemein eure Erfahrungen: Lieber Komponenten mit viel oder eher weniger Plugin-Events?

    Bin gespannt auf eure Meinungen und Erfahrungen...

  • Ich bevorzuge viele Plugin-Events in Komponenten. JShopping ist ein gutes Beispiel mit vielen eigenen(!) Events, die es ermöglichen nahezu überall via Plugins Daten abzugreifen, zu ändern, zu erweitern usw. usf. Man kann entweder Plugins schreiben, die in einer eigenen jshopping-Plugin-Gruppe sind (weiß den Ordnernamen gerade nicht), aber auch einfach system-Plugins. Erstere werden im Normalfall nur bemüht, wenn JShopping auf einer Seite geladen wird. Zweitere evtl. auch schon mal unnötig registriert/geladen.


    Wie viel Code ausgeführt wird, hängt davon ab, wie schnell ein Plugin abbricht, wenn es nichts zu tun hat (meist durch context oder jinput-Prüfungen). Oder, ob es nur die Event-Methoden enthält, die es eben braucht.

    Außerdem in welcher Plugin-Gruppe es sich befindet (s.o.). System-Plugins werden bspw. nahezu immer aufgefordert werden, mal nachzusehen, ob sie was zu tun haben könnten. Hier kann man nahezu ALLE Event-Methoden anderer Plugin-Gruppen verwenden. "Sie sind immer da."

    Ein User- oder Content-Plugin oder ... wird nicht so oft ins Spiel gebracht beim Codeablauf, außer man triggert diese eben in seinem Code.

    Außerdem natürlich davon wie viel und was für Code ein einzelnes Plugin bei diesem oder jenem Event eben drinnen hat, verwendet, oder anderweitig bemüht. Ein paar, dutzende, 100e oder 1000e Zeilen auszuführender Code? Wie komplex? Datenbankabfragen? usw.usf.


    Plugins sind ja auch nur PHP-Klassenm mit PHP-Methoden.


    Und, wenn ich es richtig verstehe, werden diese Klassen erst nur registriert und nur im Bedarfsfall dann geladen. Kann mich täuschen.


    Kurz: Eine Frage der Programmierung und was man halt so alles installiert, aktiviert hat und schließlich triggert.

  • Zitat

    In Joomla! 4 + neues Eventsystem, ja, in 3 wird es voll initialisiert und die Methoden registriert.

    Verstehe ich diese Antwort richtig:

    In Joomla 3.x werden sämtliche Plugin-Klassen registriert und geladen, die Methoden jedoch erst bei entsprechdem Event-Trigger ausgeführt.


    In Joomla 4.x werden die Plugin-Klassen nur noch registriert und erst bei Bedarf, wenn ein Event-Trigger ausgelöst wird, geladen und die entsprechende Methode ausgeführt?

  • JShopping ist ein gutes Beispiel mit vielen eigenen(!) Events, die es ermöglichen nahezu überall via Plugins Daten abzugreifen, zu ändern, zu erweitern usw.

    Ja, JShopping finde ich genau deswegen auch eine super Komponente. Jedoch war ich mir nicht sicher, ob so viele Plugin Events nicht die Laufzeit auf dem Server negativ beeinflussen.

    Die Antwort scheint wohl zu sein: Die laufzeit wird extrem wenig beeinflusst.
    Viel entscheidender ist es, wie viele Plugins geladen werden müssen. Wobei dieser Umstand mit J4 wohl noch etwas verbessert wird.


    Vielen Dank für eure Antworten!