
В настоящий момент документация по оптимазации и работе для Laravel 4 недостаточна или отсутствует. В этой статье предоставляется информация по улучшению производительности Laravel 4.
Прежде всего, все что применяется для обычной PHP разработки также применяется и для Laravel 4. Встроенные PHP функции будут более эффективны нежели попытка создать свои "велосипеды", так-же сама структура базы данных будет отражаться на производительности системы.
Laravel использует ленивую автозагрузку для классов. Это значит что если он не включает КАЖДЫЙ файл в вендор директорию, то скорее всего он ждет вызова класса который еще не загружен, затем, пытается угадать где же он расположен. Если вы используете PSR-0 автозагрузку, он проверяет файл Namespace/Namespace/Class.php в PSR-0 директориях, которые вы определили в вашем composer.json. Если вы используете classmap, он всего лишь ищет имя класса и загружает соответствующий файл. Поэтому, если вы добавили новый класс в директорию только автоматически загрузив через classmap, вы получите "класс не найден" пока вы не запустите
composer dump-autoload
.
Laravel 4 добавляет несколько директорий в автолоадер при загрузке автоматически. Откройте app/start/global.php и вы увидите вызов в ClassLoader::addDirectories
- классы внутри этих директорий также будет автоматически загруженны используя правило PSR-0. Для выполнения, вам необходимо удалить все вызовы этой функции и полагаться только лишь на автозагрузку с Composer.
PSR-0 очень удобна для разработки поскольку она позволяет вам добавить класс и будет немедленно найден автолоадером - как только вы получите имена, правильно расставьте пробелы и имена, а также правильно названные имена файлов. В процессе работы , вы как правило, не используете PSR-0 автозагрузку, поскольку это явный перебор. Используйте composer dump-autoload --optimize
для рекомпилировки всех ваших PSR-0 правил автозагрузки в правилах классмапа, они работают быстрее.
Когда дебуг установлен на false в app/config/app.php, в функции Laravel Artisan php artisan optimize
осуществляет две вещи: Запускает команду composer dump-autoload --optimize
, а также генерирует файл bootstrap/compiled.php. Этот файл содержит в себе много общих файлов класса Laravel framework, и позволяет системе требовать лишь один файл хотя в действительности фреймворк разделяется на много сотен файлов.
Запуск php artisan optimize
каждый раз во время обновления ваших файлов настоятельно рекомендуется, поскольку производительность возрастет в разы. Полагаясь на каждое автоматическое развертывании приложения (предпочтительно после временного php artisan down
, чтобы предотвратить проблемы).
Вы можете добавить файлы к этому компилированному файлу, посредством их внесения в массив app/config/compile.php. Файлы должны содержать ссылку относительно корня проекта- например:
'vendor/laravel/framework/src/Illuminate/Support/Collection.php', 'vendor/cartalyst/sentry/src/Cartalyst/Sentry/Sentry.php', 'app/library/HelperClass.php',
Используйте профайлер как loic-sharma/profiler что бы найти, какие файлы были загружены на ваши запросы, и добавьте их в ваш массив compiled.php. Я сократил время ответа в половину посредством этих действий
Текст переведён с разрешения автора Andreas Lutro
Комментариев нет