web-dev-qa-db-fra.com

Le déclenchement d'un événement dans une vue de liste est-il mauvais pour la performance?

En tant que développeur de composants, je peux voir à quel point il est utile d'inclure des événements pour appeler des plugins afin que d'autres personnes puissent étendre votre composant sans pirater vos fichiers principaux.

Cependant, je suis toujours préoccupé par ces "appels" d’avoir un impact négatif sur la performance.

Si vous créez un composant, appelez-le “com_mycomponent”, il est également courant de créer un dossier appelé “mycomponent” dans le dossier plugins et de créer des déclencheurs d'événements à des points stratégiques du composant.

JPluginHelper::importPlugin(“mycomponent”);

$dispatcher =& JDispatcher::getInstance();

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

Que se passe-t-il si j'ai plusieurs plugins actifs dans "plugins/mycomponent"? Je suppose que chaque fois que vous déclenchez un événement, tous ces plugins vont être chargés et leur code interprété par php pour le vérifier en réponse à l'événement? Ce n'est pas si lourd?

Et enfin, la question qui m'a amené à écrire ceci.

Si j'ai un affichage sous forme de liste d'un élément, puis-je inclure un déclencheur d'événement dans le modèle d'élément? Il serait exécuté sur chaque élément, ainsi le chargement et l'analyse de tous les plugins actifs de votre groupe seraient également répétés.

2
Piero Marsilio

Ce n'est pas mauvais en soi.

Le problème est de savoir quelle est la charge supplémentaire que chaque appel va générer. Par exemple, il est simple d'ajouter une requête SQL, puis chaque appel exécute une requête et la vue termine l'exécution de N requêtes.

Ainsi, il est préférable d’appeler un déclencheur au début ou à la fin de l’itération, lorsque l’élément est prêt à être généré.

Enfin, JLayouts est une alternative pour autoriser les améliorations tierces, sans déclencheurs.

1
Anibal