Уровень оптимизации композитора 1
На странице оптимизации автоматической загрузки композитора :
Примечание: Вы не должны включать какую-либо из этих оптимизаций в разработке , поскольку все они вызовут различные проблемы при добавлении/удалении классов. Прирост производительности не стоит проблем в условиях разработки.
Я определенно вижу проблемы с оптимизацией уровня 2 (карта авторитетных классов) в среде разработки, но я не могу определить, что проблемы связаны с оптимизацией уровня 1 (генерация карты классов), если я буду следовать стандарту PSR-4.
- Если я добавлю класс, который не был сгенерирован на карте классов, он вернется к правилам PSR-4 для поиска класса.
- Если я рефакторирую (перемещаю) класс в другое пространство имен, он также не найдет его на карте классов и попытается разрешить его с помощью правил PSR-4.
Каковы потенциальные проблемы с сгенерированной картой классов в среде разработки с проект, соответствующий PSR-4?
1 answers
Оптимизация уровня 1 может создать проблемы, если вы переместите класс в другой каталог без изменения пространства имен. Поскольку может быть несколько способов разрешения одного пространства имен, такие изменения будут правильно обработаны Composer, но могут завершиться неудачей, если у вас устаревшая карта классов.
Пример:
"autoload": {
"psr-4": {
"app\\": "src",
"app\\db\\": "src/drafts/db"
}
},
Класс app\db\Entity
может быть помещен в src/drafts/db/Entity.php
или src/db/Entity.php
, и в этом порядке Композитор будет искать файл класса. Обычно, если вы переместите файл из src/drafts/db
в src/db
, композитор, наконец, найдите этот класс. Но если у вас устаревшая карта классов, Composer слепо включит несуществующий файл, и вы получите фатальную ошибку.
В дополнение к этому apcu-autoloader
опция также будет кэшировать промахи. Поэтому, если вы запросите несуществующий класс app/db/NewEntity
, а затем добавите этот класс, Composer не обнаружит это изменение, так как он кэшировал информацию о том, что этот класс не существует.
Как правило, это крайние случаи, обычно вы никогда не заметите таких нюансов. Но это все еще возможно и незаметно повышение производительности среды разработки не стоит риска потерять несколько часов на отладке проблем, связанных с кэшем, в автозагрузчике Composer.