1. instantiate 1000 different objects - это противоположное по смыслу выражение к фразе "не отдельных объектов", но я понимаю, что ты имеешь ввиду 1000 объектов, создаваемых по цепочке зависимостей для вызываемых сервисовНас тут интересует "Test Suite 3: Instantiating a large number of small object graphs, Singleton scope" потому как это наиболее частый кейс в реальных приложениях. И что мы там видим? 5.6ms на 1000 небольших графов (не отдельных объектов) у Yii 2, 4.4ms у Symfony. Это всё на PHP 8 с включенным OpCache, preloading и всем-всем. Выиграли мы на компиляции контейнра в очень жирном монолите 1.2ms на запрос. В % была бы норм разница если бы не абсолютное значение... Чтобы это ощутить нужно чтобы твой монолит с 4000 сервисов был написан прям совсем идеально с точки зрения производительности и раздеплоен в идеальную среду выполнения. Мы всё-таки сейчас про мысленный эксперимент или про проблемы в твоём идеальном проекте?
2. Не согласен, в реальных приложениях не создается 100 сервисов с 1000 зависимостей на вызов, это ты взял случай долгоживущего тяжелого cli worker. На отдельный http-запрос сервисов создается штук 30 (роутинг, контроллер, auth, модель, драйвер базы, шаблонизатор, кеш, инфраструктура), и зависимостей у каждого не 1000, а до 50. К реальному случаю для web ближе 1й и 2й тесты, а в них разница уже в 5 раз, как и в 4м тесте
3. в компенсацию за компиляцию идет такая фича, как autoconfigure - классы можно использовать как сервисы без декларации, не раздувая конфиги контейнера