Quelles sont les différences avec les usines ObjectManager?

8

Je vois que Magento 2 a 3 classes d'usine (4 si vous comptez l'abstrait).

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

Tous ces éléments s'étendent \Magento\Framework\ObjectManager\Factory\AbstractFactory.
J'ai supposé qu'en mode développeur, l' Developerusine serait utilisée, mais parfois celle- Compiledci est utilisée et je ne peux pas identifier les conditions pour cela.

Quelqu'un peut-il expliquer quand chaque usine est utilisée et quelles sont les différences entre elles?

Marius
la source

Réponses:

4

Et la condition est ici: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Il vérifie si un fichier avec un contenu compilé existe pour la zone actuelle: "/var/di/global.ser", "/var/di/frontend.ser" et "/var/di/adminhtml.ser" en conséquence.

La différence réside dans les performances d'Object Manager. Les informations sur les dépendances des constructeurs et les plugins sont sérialisées dans ces fichiers, afin que le gestionnaire d'objets instancie les objets plus rapidement, sans utiliser la réflexion et le calcul des chaînes de dépendances. Et peu importe si votre instance s'exécute en mode développeur ou autre. La fabrique Object Manager est résolue en fonction de la disponibilité de ces fichiers uniquement. Si le fichier pour la zone correspondante est disponible, la fabrique "Compilé" est utilisée, si le fichier n'est pas disponible, la fabrique "Développeur" est utilisée à la place. Et l'usine "Production" est laissée de côté et sera supprimée de la base de code.

V Korotun
la source