В проекте, над которым я работаю, сейчас 7710 сервисов. Автомонтирование включено и пути не всегда исключались из автомонтирования, поэтому сейчас у нас много сервисов, которые, я уверен, не используются как сервисы. Большой проблемой здесь является время сборки контейнера.
Есть ли способ найти неиспользуемые услуги?
Симфония 4.3/PHP 7.4
P.S.: Я уже начал с небольшого PHP-скрипта для чтения XML-контейнера. Возможно, кто-то укажет мне правильное направление: https://gist.github.com/dr0bz/0fd18255f5a5c3b6b17ab3e8152be225. Он находит много ложных срабатываний. Хотя это помогло избавиться прямо сейчас от около 400 сервисов.
Да, я знаю. Кроме того, LTS сейчас доступен. Конечно, php 8, а также новая версия SF будут вести журнал, но нет возможности его обновить :(
Отлаживали ли вы службу контейнера после инициализации всех служб? Возможно, вы сможете узнать, какая служба не требуется, по ее свойствам.
Посмотрите мой комментарий к ответу. Я думаю, что это должно сработать.
Пожалуйста, ознакомьтесь с документацией по компиляции контейнеров (здесь для Symfony 4.x): https://symfony.com/doc/4.x/comComponents/dependent_injection/compilation.html
Удаление неиспользуемых служб является одной из его функций, среди других способов избежать накладных расходов во время выполнения автоматического подключения.
Ха! Этот подходит. Теперь я узнал, что существует файл журнала, в котором регистрируются удаленные службы. Пример: Symfony\Component\DependencyInjection\Compiler\RemoveUnusedDefinitionsPass: Removed service "App\SomeClass...."; reason: unused.
Я нашел там около 1000 таких записей. Это хорошая отправная точка. Я мог бы проанализировать его и создать список исключений для файла Services.yaml. Это почти 12 процентов всех услуг. Спасибо.
Имейте в виду, что и Symfony 4.3, и PHP 7.4 ужасно устарели. Может быть, обновление до поддерживаемых версий уже поможет ускорить компиляцию контейнера?