¿Cuáles son las diferencias de ObjectManager Factories?

8

Veo que Magento 2 tiene 3 clases de fábrica (4 si cuenta el resumen).

  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer
  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Production
  • \ Magento \ Framework \ ObjectManager \ Factory \ Compilado

Todo lo anterior se extiende \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Supuse que cuando estaba en modo desarrollador, Developerse usaría la fábrica, pero a veces Compiledse usa una y no puedo determinar las condiciones para esto.

¿Alguien puede explicar cuándo se usa cada fábrica y cuáles son las diferencias entre ellas?

Marius
fuente

Respuestas:

4

Y la condición está aquí: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Verifica si existe un archivo con contenido compilado para el área actual: "/var/di/global.ser", "/var/di/frontend.ser" y "/var/di/adminhtml.ser" correspondientemente.

La diferencia está en el rendimiento de Object Manager. La información de complementos y dependencias del constructor se serializa en esos archivos, por lo que Object Manager crea instancias de objetos más rápido, sin usar Reflection ni calcular cadenas de dependencias. Y no importa si su instancia se ejecuta en desarrollador u otro modo. La fábrica de Object Manager se resuelve según la disponibilidad de esos archivos solamente. Si el archivo para el área correspondiente está disponible, se usa la fábrica "Compilado", si el archivo no está disponible, se usa la fábrica "Desarrollador". Y la fábrica de "Producción" se queda fuera y se eliminará de la base del código.

V Korotun
fuente