-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Stopwatch
github-actions[bot] edited this page Jul 14, 2026
·
1 revision
Замеры длительностей на монотонном таймере: круги, остановка, миллисекунды. Состояние — целые наносекунды, деление до секунд только на выдаче.
use CloudCastle\Clock\Stopwatch;
$watch = Stopwatch::start();
importUsers();
$watch->lap('пользователи'); // длительность этапа, float-секунды
importOrders();
$watch->lap('заказы');
$total = $watch->stop(); // полная длительность; повторный stop() — тот же результат
$watch->elapsedMilliseconds(); // после stop() зафиксировано
$watch->laps(); // [['label' => 'пользователи', 'seconds' => ...], ...]
$watch->isRunning(); // falseПеревод системных часов на замеры не влияет — источник времени hrtime().
- Монотонность: замер не «уедет» из-за NTP-коррекции посреди операции.
- Целочисленное состояние — никакого накопления float-ошибки на длинных сессиях.
- Круги с метками — профилирование этапов без внешних инструментов.
- Не персистентен: секундомер живёт в памяти процесса.
- Замеры этапов в консольных командах и джобах.
- Локальное профилирование «на скорую руку», где symfony/stopwatch — лишняя зависимость.
- Замер времени через разницу
SystemClock::microtime()— уязвим к переводу часов; для этого и существует Stopwatch.
flowchart LR
ST["Stopwatch::start()"] --> W[Секундомер: int-наносекунды]
W -->|"lap(метка)"| L[список кругов]
W -->|"stop()"| E[зафиксированная длительность]
K[("hrtime — монотонный таймер")] --> W
stateDiagram-v2
[*] --> Идёт: start()
Идёт --> Идёт: lap('этап') — круг в список
Идёт --> Идёт: elapsedSeconds() растёт
Идёт --> Остановлен: stop()
Остановлен --> Остановлен: stop()/elapsed — тот же результат
| Возможность | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Секундомер в пакете часов | ✅ | 🔌 | ❌ | ❌ | ❌ | ❌ | Clock |
| Круги с метками | ✅ | 🔌 | — | — | — | — | Clock |
| Целочисленное ns-состояние | ✅ | — | — | — | — | — | Clock |
🔌 — symfony предлагает отдельный пакет
symfony/stopwatch; в самом symfony/clock секундомера нет.
CloudCastle Clock · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)