По умолчанию автозагрузчик Composer работает довольно быстро. Однако из-за того, что правила автозагрузки PSR-4 и PSR-0 настроены, необходимо проверить файловую систему до окончательного решения имени класса. Это немного замедляет работу, но удобно в средах разработки, потому что, когда вы добавляете новый класс, его можно немедленно обнаружить / использовать без необходимости перестраивать конфигурацию автозагрузчика. Однако проблема заключается в том, что вы, как правило, хотите, чтобы все произошло как можно быстрее, поскольку вы можете просто перестраивать конфигурацию каждый раз, когда развертываетесь, а новые классы не появляются случайно между развертываниями. По этой причине Composer предлагает несколько стратегий для оптимизации автозагрузчика. Примечание. Вы не должны включать ни одну из этих оптимизаций в процессе разработки, поскольку все они будут вызывать различные проблемы при добавлении / удалении классов. Повышение производительности не стоит проблем в настройке разработки. Уровень оптимизации 1: Создание карты классов #Как запустить его? #Для этого есть несколько вариантов:
Что оно делает? #Построение карт классов по существу преобразует правила PSR-4 / PSR-0 в правила класса. Это делает все немного быстрее, так как для известных классов карта класса мгновенно возвращает путь, и Composer может гарантировать, что класс находится там, поэтому нет необходимости в проверке файловой системы. На PHP 5.6+ карта классов также кэшируется в opcache, что значительно увеличивает время инициализации. Если вы убедитесь, что функция opcache включена, карта классов должна загружаться почти мгновенно, а затем загрузка классов выполняется быстро. Компромиссы #С этим методом нет реальных компромиссов. Он всегда должен быть включен в производство. Единственная проблема заключается в том, что он не отслеживает пропуски autoload (то есть, когда он не может найти данный класс), поэтому они отступают к правилам PSR-4 и все еще могут привести к медленным проверкам файловой системы. Чтобы решить эту проблему, существуют два варианта оптимизации уровня 2, и вы можете решить включить или, если у вас много проверок class_exists, которые выполняются для классов, которых нет в вашем проекте. Уровень оптимизации 2/A: Authoritative class maps #Как запустить его? #Для этого есть несколько вариантов:
Что оно делает? #Включение этого автоматически включает оптимизацию карты класса 1. Этот параметр очень прост, он говорит, что если что-то не найдено в classmap, то оно не существует, и автозагрузчик не должен пытаться смотреть на файловую систему в соответствии с правилами PSR-4. Компромиссы #Эта опция заставляет автозагрузчик всегда возвращаться очень быстро. На обратной стороне это также означает, что в случае, если класс сгенерирован во время выполнения по какой-то причине, ему не будет разрешено автозагружаться. Если ваш проект или какая-либо из ваших зависимостей делает это, вы можете столкнуться с проблемами «класса не найден» в процессе производства. Включите это с осторожностью. Примечание. Это нельзя комбинировать с оптимизацией уровня 2 / B. Вы должны выбрать один, поскольку они решают одну и ту же проблему по-разному. Уровень оптимизации 2/B: кэш APCu #Как запустить его? #Для этого есть несколько вариантов:
Что оно делает? #Эта опция добавляет кэш APCu в качестве резерва для карты классов. Он не будет автоматически генерировать карту класса, хотя, поэтому вы должны по-прежнему включать оптимизации уровня 1 вручную, если вы этого желаете. Независимо от того, найден класс или нет, этот факт всегда кэшируется в APCu, поэтому он может быть быстро возвращен при следующем запросе. Компромиссы #Для этой опции требуется APCu, которая может быть вам недоступна. Он также использует память APCu для автозагрузки, но он безопасен в использовании и не может приводить к тому, что классы не будут найдены как авторитетная оптимизация карт классов выше. Примечание. Это нельзя комбинировать с оптимизацией уровня 2 / A. Вы должны выбрать один, поскольку они решают одну и ту же проблему по-разному. |