Sự khác biệt của ObjectManager Factories là gì?


8

Tôi thấy rằng Magento 2 có 3 lớp xuất xưởng (4 nếu bạn đếm lớp trừu tượng).

  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer
  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Production
  • \ Magento \ Framework \ ObjectManager \ Factory \ Biên dịch

Tất cả các mở rộng ở trên \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Tôi giả định rằng khi ở chế độ nhà phát triển, Developernhà máy sẽ được sử dụng, nhưng đôi khi Compiledsử dụng chế độ đó và tôi không thể xác định chính xác các điều kiện cho việc này.

Ai đó có thể vui lòng giải thích khi mỗi nhà máy được sử dụng và sự khác biệt giữa chúng là gì?

Câu trả lời:


4

Và điều kiện là đây: \ Magento \ Framework \ App \ Môi trườngFactory :: createdEn Môi trường

Nó kiểm tra xem tệp có nội dung được biên dịch có tồn tại cho khu vực hiện tại hay không: "/var/di/global.ser", "/var/di/frontend.ser" và "/var/di/adminhtml.ser" tương ứng.

Sự khác biệt là trong hiệu suất của Object Manager. Thông tin phụ thuộc của trình xây dựng và thông tin bổ trợ được tuần tự hóa trong các tệp đó, do đó Trình quản lý đối tượng khởi tạo các đối tượng nhanh hơn mà không cần sử dụng Phản xạ và tính toán chuỗi phụ thuộc. Và không quan trọng nếu cá thể của bạn đang chạy trong nhà phát triển hoặc chế độ khác. Nhà máy Object Manager được giải quyết chỉ dựa trên tính khả dụng của các tệp đó. Nếu tệp cho khu vực tương ứng có sẵn thì nhà máy "Biên dịch" được sử dụng, nếu tệp không có sẵn thì nhà máy "Nhà phát triển" được sử dụng thay thế. Và nhà máy "Sản xuất" bị bỏ lại và sẽ bị xóa khỏi cơ sở mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.