Как работает автозагрузка PHP
Автозагрузчик PHP автоматически подключает файл класса при первом обращении к нему. Без автозагрузчика нужно было бы вручную писать require для каждого файла. Composer генерирует автозагрузчик на основе правил из composer.json.
Типы автозагрузки в Composer
| Тип | Описание | Производительность |
|---|---|---|
PSR-4 | Пространства имён → директории | Хорошая |
PSR-0 | Устаревший стандарт | Хуже PSR-4 |
classmap | Заранее составленная карта классов | Лучшая (production) |
files | Всегда подключаемые файлы | — |
Оптимизация автозагрузчика для production
# Базовая оптимизация — генерирует classmap для всех PSR-4 классов
composer dump-autoload --optimize
# С отключением dev-зависимостей
composer dump-autoload --optimize --no-dev
# APCu кэш (самый быстрый)
composer dump-autoload --apcu --optimize --no-devAPCu autoloader (максимальная скорость)
APCu кэширует результаты поиска классов в памяти. Требует расширение php-apcu:
sudo apt install php8.2-apcu
# В composer.json:
{
"config": {
"apcu-autoloader": true
}
}Конфигурация autoload в composer.json
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
},
"classmap": [
"database/seeds",
"database/factories"
],
"files": [
"src/helpers.php"
]
}
}Laravel: полная оптимизация для production
# Оптимизировать все кэши
php artisan optimize
# Что делает optimize:
# php artisan config:cache
# php artisan route:cache
# php artisan view:cache
# composer dump-autoload --optimizeРезультат оптимизации autoloader: вместо поиска файла по файловой системе при каждом запросе — мгновенный поиск по массиву в памяти. Ускорение составляет 20–40% для приложений с большим числом классов.
Проверка автозагрузки
# Посмотреть сгенерированный classmap
cat vendor/composer/autoload_classmap.php | head -20
# Размер autoloader файлов
du -sh vendor/composer/