Magento 2 создание экземпляров классов через object manager factory

magento.stackexchange https://magento.stackexchange.com//questions/34579

  •  12-12-2019
  •  | 
  •  

Вопрос

В magento 2 классы создаются с использованием фабрики object manager: \Magento\Framework\ObjectManager\Factory\Factory::create().
Пока что такая слизь.Но есть кое-что, чего я здесь не понимаю.
После проверки, нет ли циклических ссылок в аргументах, которые должны быть переданы конструктору для DI, и после того, как аргументы определены, появляется это ($args являются аргументами, которые должны быть переданы конструктору):

    switch (count($args)) {
        case 1:
            return new $type($args[0]);
        case 2:
            return new $type($args[0], $args[1]);
        case 3:
            return new $type($args[0], $args[1], $args[2]);
        case 4:
            return new $type($args[0], $args[1], $args[2], $args[3]);
        case 5:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4]);
        case 6:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
        case 7:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
        case 8:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
        default:
            $reflection = new \ReflectionClass($type);
            return $reflection->newInstanceArgs($args);
    }

Почему это так долго switch заявление?Почему бы не использовать непосредственно код из default филиал?
Или зачем останавливать case в 8?Почему не 5, или 10, или 127?

Это было полезно?

Решение

Причина - в производительности.Создание экземпляра через new происходит немного быстрее, чем отражение.Большинство классов имеют менее 8 аргументов, поэтому этот переключатель охватывает большинство случаев.

Может быть, это будет удалено.

Другие советы

Прирост производительности практически незаметен.Когда я пытаюсь создать экземпляр 1000000 объектов с помощью двух методов, вот результат :

enter image description here

Я использую бета-версию Magento 2 и PHP-версию (см. Ниже)

PHP 5.6.12-1+deb.sury.org ~ надежный + 1 (cli) Авторское право (c) 1997-2015 гг. PHP Group Zend Engine v2.6.0, Авторское право (c) 1998-2015 Zend Технологии с Zend OPcache версии 7.0.6-dev, Авторское право (c) 1999-2015, Zend Technologies с Xdebug v2.3.2, Авторское право (c) 2002-2015, автор Дерик Ретанс

Для того чтобы сделать этот тест, я использовал это сценарий

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top