Коллектор шаблонов
Захватывает рендеринг шаблонов/представлений с опциональным замером времени, захватом вывода, параметрами и обнаружением дубликатов. Работает с любым шаблонизатором (Twig, Blade, PHP-шаблоны и др.).
Собираемые данные
| Поле | Описание |
|---|---|
template | Путь к файлу или имя шаблона |
renderTime | Длительность рендеринга в секундах (опционально, 0 если не измеряется) |
output | Результат рендеринга HTML (опционально, пусто если не захвачен) |
parameters | Параметры, переданные в шаблон (опционально) |
Схема данных
{
"renders": [
{
"template": "home/index.html.twig",
"renderTime": 0.0045,
"output": "",
"parameters": []
},
{
"template": "/app/views/user/profile.php",
"renderTime": 0,
"output": "<div class=\"profile\">...</div>",
"parameters": {"user": "object@App\\Entity\\User#42"}
}
],
"totalTime": 0.0045,
"renderCount": 2,
"duplicates": {
"groups": [],
"totalDuplicatedCount": 0
}
}Сводка (отображается в списке отладочных записей):
{
"template": {
"renderCount": 2,
"totalTime": 0.0045,
"duplicateGroups": 0,
"totalDuplicatedCount": 0
}
}Контракт
Две точки входа в зависимости от доступных данных:
use AppDevPanel\Kernel\Collector\TemplateCollector;
// Шаблонизаторы с замером времени (Twig, Blade)
$collector->logRender(
template: 'home/index.html.twig',
renderTime: 0.0045,
);
// Системы представлений с захватом вывода (Yii views, PHP-шаблоны)
$collector->collectRender(
template: '/app/views/user/profile.php',
output: '<div class="profile">...</div>',
parameters: ['user' => $userObject],
renderTime: 0.003, // опционально
);INFO
TemplateCollectorAppDevPanel\Kernel\Collector\TemplateCollectorCaptures template/view rendering with optional timing, output, parameters, and duplicate detection. реализует SummaryCollectorInterfaceAppDevPanel\Kernel\Collector\SummaryCollectorInterfaceSummary data collector responsibility is to collect summary data for a collector. Summary is used to display a list of previous requests and select one to display full info. Its data set is specific to the list and is reduced compared to full data collected in {@see CollectorInterface}., зависит от TimelineCollectorAppDevPanel\Kernel\Collector\TimelineCollectorCollects Timeline data during application lifecycle. и использует DuplicateDetectionTraitAppDevPanel\Kernel\Collector\DuplicateDetectionTraitDetects duplicate items in collector data by grouping them by a key..
Как это работает
Адаптеры фреймворков подключаются к системе рендеринга шаблонов/представлений:
- Symfony: Расширение профилировщика Twig измеряет время рендеринга, вызывает
logRender() - Yii 3: ViewEventListener
AppDevPanel\Adapter\Yii3\Collector\View\ViewEventListenerListens to Yii view render events and feeds normalized data to the framework-agnostic Kernel TemplateCollector. слушает события рендеринга представлений, вызываетcollectRender() - Yii 2:
View::EVENT_BEFORE_RENDER+EVENT_AFTER_RENDERсо стеком таймеров по файлам — захватывает время, вывод и параметры за один вызов
Панель отладки
- Карточки сводки — общее количество отрисованных шаблонов, суммарное время рендеринга (при наличии замеров)
- Список шаблонов — все отрисованные шаблоны с путями к файлам и временем рендеринга
- Предпросмотр вывода — результат рендеринга HTML (раскрываемый, при наличии захвата)
- Параметры — раскрываемые параметры представления (при наличии захвата)
- Обнаружение дубликатов — выделяет повторные рендеринги одного шаблона (проблемы N+1)
- Плоский / Группированный вид — переключение между всеми рендерингами и группированными дубликатами