Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Ссылка
нажмите — покажем
нажмите — покажем
⚡️ Symfony 8.2 заранее подготовит список слушателей вместо повторной регистрации на каждом запросе
Контейнер уже знает, какие слушатели обрабатывают события. Зачем при создании диспетчера снова вызывать addListener() и создавать замыкания?
В разрабатываемом Symfony 8.2 сервис event_dispatcher использует CompiledEventDispatcher. Он получает заранее подготовленный массив идентификаторов сервисов и методов в нужном порядке. OPcache хранит массив в общей памяти, а локатор загружает слушателей по мере необходимости.
В приведённом микробенчмарке с 75 слушателями создание диспетчера сократилось с 33,7 до 0,48 микросекунды.
Это ускорение создания, а не всего приложения
Сама отправка событий работает с прежней скоростью. Слушатели по-прежнему создаются перед выполнением; если событие не отправлено или распространение остановлено, оставшиеся сервисы не создаются.
Добавление и удаление слушателей на общем event_dispatcher во время выполнения заставляет его перейти к обычному диспетчеру. В Symfony 8.2 такие вызовы помечаются устаревающими.
Перед обновлением стоит поискать addListener(), addSubscriber() и соответствующие удаления именно на общем сервисе.
🔗 Как работает скомпилированный диспетчер
🐸 Библиотека пхпшника
5 · 1.7K ·