From 58286f7b5ad21c4ea4abb22eac7863a3dc22c50f Mon Sep 17 00:00:00 2001 From: skodak Date: Sun, 6 Jul 2008 18:56:50 +0000 Subject: [PATCH] MDL-15553 events_trigger() perf improvement --- lib/eventslib.php | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/eventslib.php b/lib/eventslib.php index f75f9cfa176..6fc8bfb0479 100755 --- a/lib/eventslib.php +++ b/lib/eventslib.php @@ -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 = '';