Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 3834843

Browse files
committed
Performance increasement by integer priority
1 parent 28b26ff commit 3834843

File tree

3 files changed

+37
-23
lines changed

3 files changed

+37
-23
lines changed

src/EventManager.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public function attach($eventName, callable $listener, $priority = 1)
164164
));
165165
}
166166

167-
$this->events[$eventName][((int) $priority) . '.0'][] = $listener;
167+
$this->events[$eventName][(int) $priority][] = $listener;
168168

169169
return $listener;
170170
}
@@ -296,13 +296,19 @@ protected function triggerListeners(EventInterface $event, callable $callback =
296296
*/
297297
private function getListenersByEventName($eventName)
298298
{
299-
$listeners = array_merge_recursive(
300-
isset($this->events[$eventName]) ? $this->events[$eventName] : [],
301-
isset($this->events['*']) ? $this->events['*'] : [],
302-
$this->sharedManager ? $this->sharedManager->getListeners($this->identifiers, $eventName) : []
303-
);
299+
$listeners = isset($this->events[$eventName]) ? $this->events[$eventName] : [];
300+
if (isset($this->events['*'])) {
301+
foreach ($this->events['*'] as $p => $l) {
302+
$listeners[$p] = isset($listeners[$p]) ? array_merge($listeners[$p], $l) : $l;
303+
}
304+
}
305+
if ($this->sharedManager) {
306+
foreach ($this->sharedManager->getListeners($this->identifiers, $eventName) as $p => $l) {
307+
$listeners[$p] = isset($listeners[$p]) ? array_merge($listeners[$p], $l) : $l;
308+
}
309+
}
304310

305-
krsort($listeners, SORT_NUMERIC);
311+
krsort($listeners);
306312

307313
$listenersForEvent = [];
308314

src/SharedEventManager.php

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public function attach($identifier, $event, callable $listener, $priority = 1)
7474
));
7575
}
7676

77-
$this->identifiers[$identifier][$event][((int) $priority) . '.0'][] = $listener;
77+
$this->identifiers[$identifier][$event][(int) $priority][] = $listener;
7878
}
7979

8080
/**
@@ -178,22 +178,30 @@ public function getListeners(array $identifiers, $eventName)
178178
}
179179

180180
$listenersByIdentifier = isset($this->identifiers[$identifier]) ? $this->identifiers[$identifier] : [];
181-
182-
$listeners = array_merge_recursive(
183-
$listeners,
184-
isset($listenersByIdentifier[$eventName]) ? $listenersByIdentifier[$eventName] : [],
185-
isset($listenersByIdentifier['*']) ? $listenersByIdentifier['*'] : []
186-
);
181+
if (isset($listenersByIdentifier[$eventName])) {
182+
foreach ($listenersByIdentifier[$eventName] as $p => $l) {
183+
$listeners[$p] = isset($listeners[$p]) ? array_merge($listeners[$p], $l) : $l;
184+
}
185+
}
186+
if (isset($listenersByIdentifier['*'])) {
187+
foreach ($listenersByIdentifier['*'] as $p => $l) {
188+
$listeners[$p] = isset($listeners[$p]) ? array_merge($listeners[$p], $l) : $l;
189+
}
190+
}
187191
}
188192

189-
if (isset($this->identifiers['*']) && ! in_array('*', $identifiers)) {
193+
if (isset($this->identifiers['*']) && ! in_array('*', $identifiers, true)) {
190194
$wildcardIdentifier = $this->identifiers['*'];
191-
192-
$listeners = array_merge_recursive(
193-
$listeners,
194-
isset($wildcardIdentifier[$eventName]) ? $wildcardIdentifier[$eventName] : [],
195-
isset($wildcardIdentifier['*']) ? $wildcardIdentifier['*'] : []
196-
);
195+
if (isset($wildcardIdentifier[$eventName])) {
196+
foreach ($wildcardIdentifier[$eventName] as $p => $l) {
197+
$listeners[$p] = isset($listeners[$p]) ? array_merge($listeners[$p], $l) : $l;
198+
}
199+
}
200+
if (isset($wildcardIdentifier['*'])) {
201+
foreach ($wildcardIdentifier['*'] as $p => $l) {
202+
$listeners[$p] = isset($listeners[$p]) ? array_merge($listeners[$p], $l) : $l;
203+
}
204+
}
197205
}
198206

199207
return $listeners;

test/SharedEventManagerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function setUp()
2727

2828
public function getListeners(SharedEventManager $manager, array $identifiers, $event, $priority = 1)
2929
{
30-
$priority = (int) $priority . '.0';
30+
$priority = (int) $priority;
3131
$listeners = $manager->getListeners($identifiers, $event);
3232
if (! isset($listeners[$priority])) {
3333
return [];
@@ -247,7 +247,7 @@ public function testClearListenersDoesNothingIfNoEventsRegisteredForIdentifier()
247247
$this->manager->clearListeners('IDENTIFIER', 'EVENT');
248248

249249
// getListeners() always pulls in wildcard listeners
250-
$this->assertEquals(['1.0' => [
250+
$this->assertEquals([1 => [
251251
$this->callback,
252252
]], $this->manager->getListeners([ 'IDENTIFIER' ], 'EVENT'));
253253
}

0 commit comments

Comments
 (0)