-
Notifications
You must be signed in to change notification settings - Fork 0
Comparison
Сравнение CloudCastle Clock с аналогами. Таблица возможностей генерируется из
tools/features-data.php (composer docs:features), числовые бенчмарки —
из composer compare (composer docs:comparison).
Заглушка для дальнейшей разработки: наполните
tools/features-data.phpреальными возможностями и аналогами, аbenchmark_collect()— реальными операциями пакета.
Сгенерировано из tools/features-data.php (факты о поддержке). Легенда: ✅ полностью ·
| Функция | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Системные часы (PSR-20) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Паритет |
| Замороженные часы | ✅ | ✅ | ✅ | ✅ | ✅ | Clock + symfony/clock + lcobucci/clock + beste/clock + ergebnis/clock | |
| Тестовые часы с виртуальным sleep() | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Clock + symfony/clock |
| Монотонные часы (hrtime) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Clock + symfony/clock |
| Часы на callback | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Масштабируемое время (быстрее/медленнее) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Часы со смещением (прошлое/будущее) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Усечение моментов (сек/мин/час/сутки) | ✅ | ❌ | ❌ | ❌ | ❌ | Clock |
| Функция | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Точная установка момента (setTo) | ✅ | ❌ | ❌ | ❌ | Clock | ||
| Сдвиг строкой-модификатором (modify) | ✅ | ✅ | ❌ | ❌ | ❌ | Clock + symfony/clock | |
| Сдвиг вперёд/назад интервалом или секундами | ✅ | ❌ | ❌ | ❌ | Clock | ||
| Виртуальный sleepUntil(момент) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Функция | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Расширенный контракт: timestamp()/microtime() без объектов | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Смена таймзоны withTimezone() | ✅ | ✅ | ❌ | ❌ | ❌ | Clock + symfony/clock | |
| Глобальный слот часов приложения | ✅ | ✅ | ❌ | ❌ | ❌ | Clock + symfony/clock | |
| Трейт внедрения часов в сервисы | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Clock + symfony/clock |
| Секундомер на монотонном таймере | ✅ | 🔌 | ❌ | ❌ | ❌ | ❌ | Clock |
| DatePoint: момент от часов приложения с исключениями | ✅ | ✅ | ❌ | ❌ | ❌ | Clock + symfony/clock | |
| Адаптер стороннего PSR-20 к расширенному контракту | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | Clock + beste/clock |
| freeze(): снимок любых часов в управляемые | ✅ | ❌ | ❌ | ❌ | ❌ | Clock | |
| Хелпер now(«+1 hour») с модификатором | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | Clock + symfony/clock + nesbot/carbon |
| Функция | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Типизированные исключения валидации | ✅ | ❌ | ❌ | ❌ | Clock | ||
| Отклонение null-байтов во вводе | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Экранирование управляющих символов в ошибках | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Реальный sleep() переживает прерывание сигналом | ✅ | ❌ | — | — | — | — | Clock |
Уровни статических анализаторов и порогов пакета против аналогов — значения подставляются из конфигов автоматически:
Сгенерировано из конфигов пакета (composer docs:sync). Уровни Clock — из phpstan.neon / psalm.xml / infection.json.dist / phpmd.xml / deptrac.yaml; по аналогам — заявленный инструментарий из их composer.json (Composer-дистрибутивы аналогов конфигов качества не содержат, поэтому их уровни — «н/д»).
| Контроль качества | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| PHPStan | ✅ level max + strict-rules | ❌ | ✅ (уровень: н/д) | ✅ (уровень: н/д) | ✅ (уровень: н/д) | ✅ (уровень: н/д) | Clock (уровень задокументирован) |
| Psalm | ✅ errorLevel 1 | ❌ | ❌ | ✅ (уровень: н/д) | ❌ | ❌ | Clock (уровень задокументирован) |
| Мутационное тестирование (Infection) | ✅ minMSI 98% (факт: 0 выживших) | ❌ | ✅ (уровень: н/д) | ❌ | ❌ | ✅ (уровень: н/д) | Clock (уровень задокументирован) |
| PHPMD | ✅ 10 правил | ❌ | ❌ | ❌ | ✅ (уровень: н/д) | ❌ | Clock (уровень задокументирован) |
| Deptrac (архитектурные слои) | ✅ 5 слоёв | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
| Rector (dry-run в CI) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ (уровень: н/д) | Clock (уровень задокументирован) |
| Код-стайл (PSR-12: phpcs + cs-fixer) | ✅ | ❌ | ❌ | ❌ | ✅ (уровень: н/д) | ✅ (уровень: н/д) | Clock (уровень задокументирован) |
| Покрытие строк (порог на файл) | ✅ 98% (факт: 100%) | н/д | н/д | н/д | н/д | н/д | Clock |
| Конфиги качества в дистрибутиве | ✅ поставляются | ❌ | ❌ | ❌ | ❌ | ❌ | Clock |
Сгенерировано из composer compare (PHP 8.1.34). Правки в блоке будут перезаписаны.
| Сценарий | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| now() в системной таймзоне | 648 611 ops/s | 592 125 ops/s | 650 011 ops/s | 99 591 ops/s | 81 644 ops/s | 649 211 ops/s | Паритет лидеров |
| now() в UTC | 643 127 ops/s | 586 970 ops/s | 642 473 ops/s | 640 540 ops/s | 173 049 ops/s | 639 452 ops/s | Паритет лидеров |
| чтение зафиксированного момента | 22 262 011 ops/s | 6 678 993 ops/s | 22 706 907 ops/s | 9 074 581 ops/s | 29 451 ops/s | 22 472 910 ops/s | Паритет лидеров |
| задача: unix-время текущего момента | 813 138 ops/s | 568 078 ops/s | 609 675 ops/s | 608 764 ops/s | 170 630 ops/s | 610 357 ops/s | Clock |
| задача: метка времени с микросекундами | 800 739 ops/s | 447 005 ops/s | 487 861 ops/s | 480 447 ops/s | 146 079 ops/s | 479 579 ops/s | Clock |
| задача: сдвиг виртуального времени на 1 с (тесты) | 941 497 ops/s | 275 647 ops/s | — | — | 71 448 ops/s | — | Clock |
| создание часов + первый now() | 97 241 ops/s | 92 239 ops/s | 96 489 ops/s | 98 468 ops/s | 77 991 ops/s | 97 054 ops/s | Паритет лидеров |
Память — добавленная пиковая память процесса за сценарий (классы библиотеки + объекты + операции), меньше — лучше:
| Сценарий | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| now() в системной таймзоне | 0.0 КБ | 0.0 КБ | 0.0 КБ | 0.0 КБ | 3 521.9 КБ | 0.0 КБ | Паритет лидеров |
| now() в UTC | 0.0 КБ | 0.0 КБ | 0.0 КБ | 0.0 КБ | 3 521.9 КБ | 0.0 КБ | Паритет лидеров |
| чтение зафиксированного момента | 0.0 КБ | 0.0 КБ | 0.0 КБ | 0.0 КБ | 3 521.9 КБ | 0.0 КБ | Паритет лидеров |
| задача: unix-время текущего момента | 0.0 КБ | 0.0 КБ | 0.0 КБ | 0.0 КБ | 3 521.9 КБ | 0.0 КБ | Паритет лидеров |
| задача: метка времени с микросекундами | 0.0 КБ | 0.0 КБ | 0.0 КБ | 0.0 КБ | 3 521.9 КБ | 0.0 КБ | Паритет лидеров |
| задача: сдвиг виртуального времени на 1 с (тесты) | 0.0 КБ | 0.0 КБ | — | — | 3 521.9 КБ | — | Паритет лидеров |
| создание часов + первый now() | 0.0 КБ | 0.0 КБ | 0.0 КБ | 0.0 КБ | 3 521.9 КБ | 0.0 КБ | Паритет лидеров |
- Самый широкий функционал среди PSR-20-пакетов: единственный с масштабируемым
временем, смещением, зонозависимым усечением,
sleepUntil()и секундомером. - Расширенный контракт
timestamp()/microtime()— чтение времени без создания объектов. - Жёсткая граница ввода: типизированные исключения, отклонение null-байтов, экранирование управляющих символов в сообщениях ошибок.
- Память: 0.0 КБ добавленной пиковой памяти во всех сценариях (carbon: +3,5 МБ).
- Производительность: +33 %…+248 % к лучшему аналогу на задачах со специализированным API (unix-время, микросекундные метки, сдвиг виртуального времени); на идентичных PSR-20-операциях — группа лидеров (см. таблицу выше: на них никто не может оторваться, вся цена — внутри движка PHP).
- Молодой пакет: меньше продакшн-пробега, чем у symfony/clock или Carbon.
- API шире, чем нужно для «просто now()» — для минимализма есть более компактные пакеты.
| Ситуация | Рекомендация |
|---|---|
Нужен только PSR-20 now()
|
lcobucci/clock или ergebnis/clock — крошечные и быстрые |
| Проект на Symfony |
symfony/clock — родная интеграция, DatePoint, автоподмена в тестах |
| Уже используете Carbon | PSR-20 уже есть через Carbon\FactoryImmutable
|
| Управляемое время, симуляции, backoff, замеры, временные окна |
cloudcastle/clock — всё это в одном пакете без доп. зависимостей |
CloudCastle Clock · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)