Laravel Time Machine - це профайлер продуктивності від Jaydeep Gadhiya, який записує кожен етап обробки Laravel-запиту: завантаження (bootstrap), middleware, маршрутизацію, контролер, відповідь та завершення (termination) - з точністю до мілісекунди. Пакет відповідає на одне ключове питання: куди пішов час під час виконання цього запиту?
Основні можливості
Пакет надає такі функції:
- Хронологія життєвого циклу - діаграма в стилі Ганта з розбивкою кожної фази запиту, від завантаження фреймворку до кроку
terminate
- Захоплення запитів - кожна SQL-інструкція з параметрами (bindings), з'єднанням та часом виконання; вмикається через
collectors.queries
- Виділення повільних операцій - запити понад 500 мс та SQL-запити понад 50 мс позначаються; обидва пороги можна налаштувати
- Зберігання у файлах - профілі зберігаються як звичайні JSON-файли в
storage/time-machine; без таблиць бази даних чи міграцій
- Шаблони ігнорування - запити до статичних ресурсів та шляхи на кшталт дашборду Telescope пропускаються через
ignore_paths
- Типово лише для debug - профайлер слідує за
APP_DEBUG, тому залишається вимкненим у production, якщо не активувати його явно
Дашборд з хронологією
Після встановлення пакет автоматично записує кожен HTTP-запит і надає автономний дашборд за адресою /time-machine, коли його увімкнено. Кожен запит отримує візуальну хронологію, що показує, скільки часу додаток витратив на кожну фазу життєвого циклу, разом із використанням пам'яті та кількістю запитів до бази даних. Запити, що перевищують поріг повільності (типово 500 мс), виділяються, тому вузькі місця одразу помітні в списку останніх профілів.
Власне інструментування
Окрім автоматичних фаз життєвого циклу, ви можете інструментувати власний код через фасад TimeMachine. Додавайте мітки часу (point-in-time markers), вимірюйте блоки коду або керуйте проміжками (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 Telescope та Laravel Debugbar, але ці три інструменти мають різні сфери застосування. Telescope моніторить багато частин додатку - запити, завдання (jobs), пошту, сповіщення, кеш та інше - і зберігає записи в базі даних.
Debugbar відображає панель інструментів усередині поточної сторінки з даними про час виконання та запити для цієї відповіді.
Time Machine знаходиться посередині: він зберігає історію останніх запитів, як Telescope, але збирає лише дані про час життєвого циклу та запити, зберігає їх у плоских файлах і представляє на хронології. Якщо вам потрібен повний моніторинг додатку, Telescope залишається кращим вибором; якщо ви профілюєте, де саме окремі запити витрачають свій час - це саме той випадок, для якого створено цей пакет.
Встановлення та конфігурація
Пакет підтримує Laravel версій від 8 до 13 і встановлюється через Composer з автоматичним виявленням сервіс-провайдера та фасаду:
composer require jaydeep/laravel-time-machine
Публікація конфігураційного файлу необов'язкова:
php artisan vendor:publish --tag=time-machine-config
Дізнатися більше про пакет, отримати повні інструкції зі встановлення та переглянути вихідний код можна в репозиторії laravel-timemachine на GitHub.