ObjectManagerファクトリの違いは何ですか?


8

Magento 2には3つのファクトリークラスがあることがわかります(抽象クラ​​スを数えると4)。

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

上記のすべてが拡張され\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のパフォーマンスです。コンストラクターの依存関係とプラグインの情報はこれらのファイルでシリアル化されるため、リフレクションを使用したり依存関係のチェーンを計算したりせずに、オブジェクトマネージャーはオブジェクトをより速くインスタンス化します。また、インスタンスが開発者モードで実行されているか、他のモードで実行されているかは関係ありません。Object Managerファクトリは、これらのファイルの可用性のみに基づいて解決されます。対応する領域のファイルがある場合は「コンパイル済み」ファクトリが使用され、ファイルがない場合は「開発者」ファクトリが代わりに使用されます。また、 "Production"ファクトリーは除外され、コードベースから削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.