it-swarm.com.de

Ist das Auslösen eines Ereignisses in einer Listenansicht für die Leistung schlecht?

Als Komponentenentwickler kann ich sehen, wie nützlich es ist, Ereignisse zum Aufrufen von Plugins einzuschließen, damit andere Leute Ihre Komponente erweitern können, ohne Ihre Kerndateien zu hacken.

Ich bin jedoch immer besorgt darüber, dass diese „Berufungen“ sich negativ auf die Leistung auswirken.

Wenn Sie eine Komponente erstellen, nennen Sie sie "com_mycomponent". Es ist auch üblich, einen Ordner mit dem Namen "mycomponent" im Ordner "plugins" zu erstellen und Ereignisauslöser an strategischen Punkten in der Komponente auszulösen

JPluginHelper::importPlugin(“mycomponent”);

$dispatcher =& JDispatcher::getInstance();

$dispatcher->trigger('OnThisThingToHappen', array() )

Was ist passiert, wenn ich mehrere aktive Plugins in "plugins/mycomponent" habe? Ich denke, jedes Mal, wenn Sie ein Ereignis auslösen, werden all diese Plugins geladen und ihr Code von PHP interpretiert, um zu überprüfen, ob sie auf das Ereignis reagieren. Es ist nicht so schwer?

Und schließlich die Frage, die mich dazu gebracht hat, dies zu schreiben.

Kann ich einen Ereignisauslöser in die Artikelvorlage aufnehmen, wenn ich eine Listenansicht eines Artikels habe? Es würde auf jedem Element ausgeführt, so dass das Laden und Parsen aller aktiven Plugins in Ihrer Gruppe ebenfalls wiederholt würde.

2
Piero Marsilio

Es ist nicht schlecht für sich.

Das Problem ist, wie hoch die zusätzliche Last ist, die jeder Anruf erzeugen wird. Zum Beispiel ist es einfach, eine SQL-Abfrage hinzuzufügen, dann führt jeder Aufruf eine Abfrage aus und die Ansicht beendet die Ausführung von N Abfragen.

Daher ist es eine bessere Option, einen Trigger am Anfang oder Ende der Iteration aufzurufen, wenn das Element zur Generierung bereit ist.

Schließlich sind JLayouts eine Alternative, um Verbesserungen an Drittanbietern ohne Auslöser zu ermöglichen.

1
Anibal