Was sind die Unterschiede zwischen ObjectManager Factories?

8

Ich sehe, dass Magento 2 3 Fabrikklassen hat (4, wenn Sie die abstrakte zählen).

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

Alle oben genannten Punkte erstrecken sich \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Ich ging davon aus, dass im Entwicklermodus die DeveloperFactory verwendet wird, aber manchmal Compiledwird die verwendet, und ich kann die Bedingungen dafür nicht genau bestimmen.

Kann jemand bitte erklären, wann jede Fabrik benutzt wird und was die Unterschiede zwischen ihnen sind?

Marius
quelle

Antworten:

4

Die Bedingung ist hier: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Es wird geprüft, ob für den aktuellen Bereich eine Datei mit kompiliertem Inhalt vorhanden ist: "/var/di/global.ser", "/var/di/frontend.ser" und "/var/di/adminhtml.ser" entsprechend.

Der Unterschied liegt in der Leistung von Object Manager. Informationen zu Konstruktorabhängigkeiten und Plugins werden in diesen Dateien serialisiert, sodass Object Manager Objekte schneller instanziiert, ohne Reflection zu verwenden und Abhängigkeitsketten zu berechnen. Und es spielt keine Rolle, ob Ihre Instanz im Entwickler- oder einem anderen Modus ausgeführt wird. Die Object Manager-Factory wird nur basierend auf der Verfügbarkeit dieser Dateien aufgelöst. Wenn eine Datei für den entsprechenden Bereich verfügbar ist, wird die Factory "Compiled" verwendet. Wenn die Datei nicht verfügbar ist, wird stattdessen die Factory "Developer" verwendet. Die Fabrik "Produktion" wird weggelassen und aus der Codebasis entfernt.

V Korotun
quelle