Laravel Time Machine — це профілер продуктивності від Jaydeep Gadhiya, який фіксує кожен етап запиту в Laravel: bootstrap, middleware, routing, controller, response та termination. Інструмент вимірює час із точністю до мілісекунд, даючи вичерпну відповідь на питання: на що саме витрачається час під час обробки запиту?
Основні можливості пакета:
- Таймлайн життєвого циклу — візуалізація у стилі діаграми Gantt для кожної фази запиту, від завантаження фреймворку до етапу
terminate. - Логування запитів — фіксація кожного SQL-запиту разом із bindings, connection та часом виконання (налаштовується через
collectors.queries). - Підсвічування повільних процесів — запити тривалістю понад 500 мс та SQL-запити понад 50 мс маркуються автоматично (порогові значення можна змінити).
- Зберігання у файлах — профілі зберігаються як звичайні JSON-файли в директорії
storage/time-machine; жодних таблиць у базі даних чи міграцій. - Ігнорування шляхів — запити до статичних файлів (assets) або технічних сторінок (наприклад, дашборд Telescope) автоматично пропускаються завдяки параметру
ignore_paths. - Тільки для розробки — за замовчуванням профілер орієнтується на значення
APP_DEBUG, тому він не активується на production без спеціального налаштування.
# Дашборд із таймлайном
Після встановлення пакет автоматично реєструє кожен HTTP-запит і відображає дані на автономному дашборді за адресою /time-machine. Для кожного запиту створюється візуальний таймлайн, що показує тривалість фаз життєвого циклу програми, використання пам’яті та кількість SQL-запитів. Повільні запити підсвічуються у списку, що дозволяє миттєво виявляти вузькі місця.
# Кастомні вимірювання
Окрім автоматичного моніторингу фаз фреймворку, ви можете додавати власні вимірювання за допомогою фасаду TimeMachine. Це дозволяє ставити маркери в коді, вимірювати час виконання closure або керувати інтервалами (spans) вручну:
use Jaydeep\LaravelTimeMachine\Facades\TimeMachine;
// Додати маркер на таймлайн
TimeMachine::mark('cache primed');
// Виміряти час виконання блоку коду
$report = TimeMachine::measure('generate-report', function () {
return Report::build();
});
// Ручне керування інтервалом
TimeMachine::startSpan('external-api');
$response = Http::get('https://api.example.com');
TimeMachine::endSpan('external-api');
Користувацькі інтервали відображаються на тому ж таймлайні, що і системні фази, тож ви зможете побачити, як тривалий виклик зовнішнього API або генерація звіту впливають на загальний час запиту.
# Робота без бази даних
Профілі записуються як JSON-файли в storage/time-machine, тому вам не потрібно запускати міграції, а дані ніколи не залишають ваш сервер. Пакет за замовчуванням зберігає останні 100 профілів, видаляючи старі в міру надходження нових. Цей ліміт можна змінити в налаштуваннях storage.max_records або через змінну оточення TIME_MACHINE_MAX_RECORDS.
# Порівняння з Telescope та Debugbar
Laravel Time Machine частково перетинається з Telescope та Debugbar, проте ці інструменти мають різне призначення. Telescope забезпечує комплексний моніторинг (запити, черги, пошта, кеш) і зберігає дані в базі. Debugbar виводить панель інструментів безпосередньо на сторінку для поточного запиту.
Time Machine займає проміжну нішу: він зберігає історію останніх запитів, як Telescope, але фокусується виключно на часових показниках життєвого циклу та SQL-запитах, використовуючи для зберігання файли. Якщо вам потрібен повний моніторинг застосунку — обирайте Telescope; якщо ж ваша мета — детально профілювати час виконання окремих запитів, цей пакет підійде ідеально.
# Встановлення та налаштування
Пакет підтримує версії Laravel від 8 до 13. Встановлюється через Composer, а сервіс-провайдер та фасад підключаються автоматично завдяки auto-discovery:
composer require jaydeep/laravel-time-machine
За потреби можна опублікувати файл конфігурації:
php artisan vendor:publish --tag=time-machine-config
Дізнатися більше, переглянути повну інструкцію та вихідний код можна в GitHub-репозиторії laravel-timemachine.