MDL-15553 events_trigger() perf improvement

This commit is contained in:
skodak
2008-07-06 18:56:50 +00:00
parent 2959f8b18e
commit 58286f7b5a
+25 -1
View File
@@ -184,6 +184,10 @@ function events_cleanup($component, $cachedhandlers) {
$deletecount++;
}
}
// reset static handler cache
events_get_handlers('reset');
return $deletecount;
}
@@ -317,7 +321,27 @@ function events_dequeue($qhandler) {
}
}
/**
* Returns hanflers for given event. Uses caching for better perf.
* @param string $eventanme name of even or 'reset'
* @return mixed array of handlers or false otherwise
*
* INTERNAL - to be used from eventslib only
*/
function events_get_handlers($eventname) {
static $handlers = array();
if ($eventname == 'reset') {
$handlers = array();
return false;
}
if (!array_key_exists($eventname, $handlers)) {
$handlers[$eventname] = get_records('events_handlers', 'eventname', $eventname);
}
return $handlers[$eventname];
}
/****** Public events API starts here, do not use functions above in 3rd party code ******/
@@ -378,7 +402,7 @@ function events_trigger($eventname, $eventdata) {
$event = false;
// pull out all registered event handlers
if ($handlers = get_records('events_handlers', 'eventname', $eventname)) {
if ($handlers = events_get_handlers($eventname)) {
foreach ($handlers as $handler) {
$errormessage = '';