Чем отличаются фабрики ObjectManager?

8

Я вижу, что Magento 2 имеет 3 фабричных класса (4, если считать абстрактный).

  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer
  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Производство
  • \ Magento \ Framework \ ObjectManager \ Factory \ Составитель

Все вышеперечисленное распространяется \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Я предполагал, что в режиме разработчика Developerбудет использоваться фабрика, но иногда Compiledона используется, и я не могу точно определить условия для этого.

Может кто-нибудь объяснить, когда используется каждая фабрика и чем они отличаются?

Мариус
источник

Ответы:

4

И условие здесь: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Он проверяет, существует ли файл с скомпилированным содержимым для текущей области: "/var/di/global.ser", "/var/di/frontend.ser" и "/var/di/adminhtml.ser" соответственно.

Разница заключается в производительности диспетчера объектов. Информация о зависимостях конструктора и плагинах сериализуется в этих файлах, поэтому Object Manager быстрее создает экземпляры объектов, не используя Reflection и не вычисляя цепочки зависимостей. И не имеет значения, работает ли ваш экземпляр в режиме разработчика или в другом режиме. Фабрика диспетчера объектов разрешается на основе доступности только этих файлов. Если файл для соответствующей области доступен, то используется фабрика «Скомпилировано», если файл недоступен, вместо нее используется фабрика «Разработчик». А «Производственный» завод не учтен и будет удален из базы кода.

В Коротун
источник