Skip to content

Feature Profiling

github-actions[bot] edited this page Jul 8, 2026 · 1 revision

📊 Профилирование

← Возможности · Главная · Сравнение

Встроенный профайлер тайминга разрешения сервисов: сколько времени заняли get / make / call, что было из кэша, кто самый медленный. Уникальная для CloudCastle возможность среди сравниваемых контейнеров.

Принцип работы

enableProfiling() включает ContainerProfilingSupport: контейнер оборачивает разрешение в тайминг, помечая операцию (get/make/call), цель (id) и был ли результат из кэша (cached). profileReport() агрегирует: количество и суммарное время по операциям + топ самых медленных. Включение профилирования отключает fast-path get() (нужен трекинг), поэтому это dev/диагностический режим.

$c->enableProfiling();

$c->get(Db::class);
$c->make(Report::class);

$report = $c->profileReport();
// [
//   'enabled' => true,
//   'sample_count' => 2,
//   'by_operation' => ['get' => ['count' => 1, 'total_ms' => …], 'make' => […]],
//   'top_slowest' => [['operation' => 'make', 'target' => 'Report', 'elapsed_ms' => …, 'cached' => false], …],
// ]

$c->resetProfile();
$c->disableProfiling();

Плюсы

  • Находит узкие места сборки: какой сервис долго создаётся, что зря пересоздаётся.
  • Различает cached/uncached — видно эффективность singleton-кэша.
  • Не требует внешних профайлеров для базовой диагностики графа.

Минусы

  • Отключает fast-path get() (трекинг стоит времени) — не для прода под нагрузкой.
  • Тайминги в шумной среде приблизительны (для точных цифр — изолированные бенчмарки).

✅ Рекомендуется

  • Включать в dev/staging при разборе «почему сборка медленная», затем выключать.
  • Смотреть top_slowest и by_operation для приоритезации оптимизаций.

❌ Антипаттерны

  • Держать профилирование включённым в проде на горячем пути — теряется весь perf-выигрыш контейнера.
  • Делать выводы о микросекундах по одному прогону в нагруженной среде.

Аналоги в других контейнерах

Контейнер Аналог
PHP-DI нет встроенного (❌ — внешние профайлеры)
Symfony data collector / profiler bar (в fullstack, ⚠️ не в чистом DI)
Laravel нет встроенного в контейнер (❌)
Pimple нет (❌)
Nette нет встроенного (❌)

Только CloudCastle даёт профайлер внутри самого контейнера.

См. также: Object pool · Производительность.

Clone this wiki locally