Оптимизация скорости работы автозагрузчика Composer
Composer. Оптимизация скорости автозагрузки

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Оптимизация автоматического загрузчика Composer.

По умолчанию автозагрузка Composer работает относительно быстро. Однако, из-за того, как настроены правила автозагрузки PSR-4 и PSR-0, ему необходимо проверить файловую систему, прежде чем окончательно установить имя класса. Это значительно замедляет работу, но это удобно при разработке, так как когда вы добавляете новый класс, он может быть немедленно обнаружен/использован без необходимости перестраивать конфигурацию автозагрузки.

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

По этой причине Composer предлагает несколько стратегий для оптимизации автозагрузки.

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

Уровень оптимизации 1: Создание карты классов.

Как её сделать?

Есть несколько вариантов, как это включить:

  • Установите "optimize-autoloader": true внутри ключа конфигурации composer.json.
  • Выполните install или update с параметром -o / --optimize-autoloader.
  • Выполните команду dump-autoload с параметром -o / --optimize.

Что она делает?

Создание карты классов по сути преобразует правила PSR-4/PSR-0 в правила classmap. Это значительно ускоряет работу, так как для известных классов карта классов мгновенно возвращает путь, и Composer может гарантировать, что класс находится там, поэтому нет необходимости проверять файловую систему.

На PHP 5.6+ карта классов также кэшируется в opcache, что значительно увеличивает время её инициализации. Если удостовериться, что opcache включен, то карта классов будет загружаться почти мгновенно, и тогда загрузка классов будет быстрой.

Альтернативные варианты.

В этом методе нет никаких реальных компромиссов. Он всегда должен быть включен в production.

Единственная проблема заключается в том, что он не отслеживает ошибки автозагрузки (т.е. когда он не может найти заданный класс), поэтому они возвращаются к правилам PSR-4 и могут привести к медленным проверкам файловой системы. Для решения этой проблемы существуют две опции оптимизации уровня 2, и вы можете включить одну из них, если у вас много проверок class_exists, которые выполняются для классов, не существующих в вашем проекте.

Уровень оптимизации 2/A: Авторитарные карты классов.

Как их использовать?

Есть несколько вариантов, как это включить:

  • Установите "classmap-authoritative": true внутри ключа конфигурации composer.json.
  • Выполните команду install или update с параметром -a / --classmap-authoritative.
  • Выполните команду dump-autoload с параметром -a / --classmap-authoritative.

Что это дает?

Включение этой опции автоматически включает оптимизацию карты классов первого уровня.

Эта опция указывает, что если что-то не найдено в карте классов, то этого не существует, и автозагрузчик не должен пытаться искать в файловой системе в соответствии с правилами PSR-4.

Альтернативные варианты.

Эта опция заставляет автозагрузчик Composer всегда очень быстро загружать классы. С другой стороны, это также означает, что если класс по какой-то причине будет сгенерирован во время выполнения, он не попадет в автозагрузку. Если ваш проект или любая из ваших зависимостей делает это, вы можете столкнуться с проблемой "класс не найден" ("class not found") в production. Используйте это с осторожностью.

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

Уровень оптимизации 2/B: Кэш APCu.

Как с ним работать?

Есть несколько вариантов, как это включить:

  • Установите "apcu-autoloader": true внутри конфигурационного ключа composer.json.
  • Выполните команду install или update с параметром --apcu-autoloader.
  • Выполните команду dump-autoload с параметром --apcu.

Что он делает?

Эта опция добавляет кэш APCu в качестве запасного варианта для карты классов в Composer. Однако он не будет автоматически генерировать карту классов, поэтому вам все равно следует включить оптимизацию первого уровня вручную, если это необходимо.

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

Альтернативные варианты.

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

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

Перевод с английского официальной документации Composer:
https://getcomposer.org/doc/articles/autoloader-optimization.md

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню