Уроки курса
Оптимизация и подготовка к production
Кеширование конфигураций, маршрутов и представлений с помощью artisan-команд для ускорения работы приложения. Разбор частых ошибок.
Разница между локальной разработкой и Production
При разработке на локальном компьютере (Local Environment) Laravel динамически загружает конфигурации, парсит маршруты и компилирует Blade-шаблоны при каждом запросе. Это удобно, так как вы сразу видите изменения в коде. Однако на рабочем сервере (Production) такой подход тратит огромное количество ресурсов процессора и замедляет загрузку страниц.
Согласно методологии Mastery Learning, прежде чем выкладывать проект в сеть, вы должны в совершенстве освоить процесс оптимизации. Laravel предоставляет набор команд для кеширования всех тяжелых структур в единые файлы.
# Список обязательных команд перед запуском в Production:
# 1. Кеширование конфигурационных файлов (.env и папка config)
php artisan config:cache
# 2. Кеширование маршрутов (routes/web.php)
php artisan route:cache
# 3. Кеширование Blade шаблонов (прекомпиляция HTML)
php artisan view:cache
# 4. Кеширование событий и слушателей
php artisan event:cache
Ловушка функции env() — Критическая ошибка новичков
Это самая частая ошибка при деплое Laravel-приложений. Функция env('PARAM_NAME') читает данные прямо из файла .env. Когда вы выполняете команду php artisan config:cache, Laravel собирает все конфиги в один файл для скорости. После этого файл .env больше не читается системой!
Если вы использовали функцию env() где-то в контроллере или представлении (например, $key = env('STRIPE_SECRET');), то на production сервере эта функция вернет null, и ваше приложение сломается. Вызов env() должен происходить только внутри файлов конфигурации в папке config/. В коде приложения нужно использовать функцию-хелпер config().
// ❌ НЕПРАВИЛЬНО (Сломается после config:cache):
public function processPayment() {
$secret = env('STRIPE_SECRET'); // Вернет null в production!
}
// ✅ ПРАВИЛЬНО:
// 1. В файле config/services.php создаем привязку:
'stripe' => [
'secret' => env('STRIPE_SECRET'),
],
// 2. В контроллере используем функцию config():
public function processPayment() {
$secret = config('services.stripe.secret'); // Работает всегда!
}