MDL-15553 events_trigger() perf improvement
This commit is contained in:
+25
-1
@@ -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 = '';
|
||||
|
||||
Reference in New Issue
Block a user