🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Stopwatch — секундомер
Назначение
Монотонный секундомер на hrtime(): круги с метками, повторная остановка без потери результата, elapsed(): TimeSpan, статический measure(callable).
Для чего и как применять
Профилирование участков кода, замеры этапов пайплайна: $watch->lap('подготовка'), Stopwatch::measure(fn () => героическая_работа()).
Пример
$watch = Stopwatch::start();
$watch->lap('подготовка');
$watch->lap('обработка');
$total = $watch->stop(); // float секунды
$span = $watch->elapsed(); // TimeSpan
$cost = Stopwatch::measure(fn () => $job->run());
Анти-паттерны
Не используйте для «настенного» времени — секундомер сознательно не знает календаря.
Жизненный цикл
stateDiagram-v2
[*] --> Running: start()
Running --> Running: lap(label)
Running --> Stopped: stop()
Stopped --> Stopped: stop() (same result)
Stopped --> [*]: elapsed()/laps()
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
Монотонная основа (hrtime) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Круги с метками | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Замер колбэка одной строкой | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Результат как TimeSpan | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano