Performance: Event subscribers
This affects how quickly events are handled and how much CPU and memory are used during event dispatching.
Jump into concepts and practice - no test required
class UserEventSubscriber { public function subscribe($events) { $events->listen('UserRegistered', 'UserEventSubscriber@onUserRegistered'); // Only subscribe to events needed for current request context } } // Register subscriber conditionally or lazily
class UserEventSubscriber { public function subscribe($events) { $events->listen('UserRegistered', 'UserEventSubscriber@onUserRegistered'); $events->listen('UserLoggedIn', 'UserEventSubscriber@onUserLoggedIn'); $events->listen('UserLoggedOut', 'UserEventSubscriber@onUserLoggedOut'); // ... many more event listeners } } // Registered globally for all requests
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Many global event subscribers | N/A | N/A | N/A | [X] Bad |
| Selective event subscriber registration | N/A | N/A | N/A | [OK] Good |
UserRegistered event is fired?class UserEventSubscriber {
public function subscribe($events) {
$events->listen('UserRegistered', [self::class, 'onUserRegistered']);
}
public function onUserRegistered($event) {
echo 'User registered: ' . $event->user->name;
}
}class OrderSubscriber {
public function subscribe($events) {
$events->listen('OrderPlaced', 'handleOrderPlaced');
}
public function handleOrderPlaced($event) {
// process order
}
}OrderPlaced and OrderShipped events. Which is the correct way to register both handlers in the subscribe method?