Уровень оптимизации композитора 1 - PullRequest
0 голосов
/ 26 апреля 2018

На странице оптимизации автозагрузки Composer :

Примечание: Вы не должны включать любую из этих оптимизаций в развитие , поскольку все они будут вызывать различные проблемы при добавлении / удалении классов.Увеличение производительности не стоит хлопот в настройках разработки.

Я определенно вижу проблемы для оптимизации уровня 2 (авторитетная карта классов) в среде разработки, но я не могу определить, чтопроблемы для уровня 1 оптимизации (генерация карты классов), если я буду следовать стандарту PSR-4.

  • Если я добавлю класс, который не был сгенерирован в карте классов, он обратится к правилам PSR-4 для поиска класса.
  • Если я реорганизовал (переместил) класс в другое пространство имен, он также не найдет его на карте классов и не попытается разрешить его.с использованием правил PSR-4.

Каковы потенциальные проблемы с сгенерированной картой классов в среде разработчика с проектом, который соответствует PSR-4?

1 Ответ

0 голосов
/ 26 апреля 2018

Оптимизация уровня 1 может создать проблемы, если вы переместите класс в другой каталог без изменения пространства имен.Поскольку может быть несколько способов разрешения одного пространства имен, такие изменения будут правильно обрабатываться Composer, но могут не работать, если у вас устаревшая карта классов.

Пример:

"autoload": {
    "psr-4": {
        "app\\": "src",
        "app\\db\\": "src/drafts/db"
    }
},

Класс app\db\Entity может быть помещен в src/drafts/db/Entity.php или src/db/Entity.php, и в этом порядке Composer будет искать файл класса.Обычно, если вы перемещаете файл из src/drafts/db в src/db, Composer, наконец, найдет этот класс.Но если у вас устаревшая карта классов, Composer будет слепо включать несуществующий файл, и вы получите фатальную ошибку.

В дополнение к этой опции apcu-autoloader также будет кешировать пропуски.Поэтому, если вы запрашиваете несуществующий класс app/db/NewEntity, а затем добавляете этот класс, Composer не обнаружит это изменение, поскольку он кэшировал информацию о том, что этот класс не существует.

Обычно это крайние случаи, обычноВы никогда не заметите такие нюансы.Но это все еще возможно, и незаметное повышение производительности в среде разработки не стоит риска потерять несколько часов на отладку проблем с кешем автозагрузчика Composer.

...