разбор компонента

Центр событий

Рендерит плотный набор live-сущностей без глобальной перерисовки на каждый provider tick.

Сценарные состояния

загрузка снимказагрузка снимка
соединение активносоединение активно
соединение ухудшеносоединение ухудшено
видны устаревшие данныевидны устаревшие данные
повторное подключениеповторное подключение
завершено / событие закрытозавершено / событие закрыто

Иллюстрация по теме

Визуальный ориентир помогает быстрее считать сценарий страницы и не оставлять компонент абстрактным.

Интерфейс live-матчей с несколькими играми и динамическими блоками
Иллюстрация по теме: live-center должен обновляться быстро, но без хаотической перерисовки.

Данные и ответственность

Inputsnormalized entities + granular subscriptions
Outputsvisible cards, status badges, interaction intents
Failure moderender storm, wrong list key, client lag
OwnershipUI владеет представлением и recoverable context; финальное бизнес-состояние подтверждает серверный контракт.

Как не размыть ответственность

Компонент считается самостоятельной границей только если команда может назвать его входы, выходы и невозможные состояния. Если он требует читать provider-specific поля напрямую или хранит финальный статус операции только локально, граница выбрана слишком поздно.

При изменении контракта сначала обновляется state model и совместимость, затем визуальный слой. Это уменьшает риск ситуации, когда новый UI уже ожидает поле или статус, которого старая версия API не гарантирует.

Связанные разборы

Приёмочные сценарии

  • Обновление одной selection не вызывает render всех карточек события.
  • Сортировка списка сохраняет identity карточек через entity key, а не array index.
  • Карточка вне viewport при возвращении читает текущий snapshot, а не replay старых анимаций.
  • Состояние reconnect отличается от stale и от полного offline.
  • Client lag измеряется отдельно от provider/server lag.
  • Финальный статус события прекращает бессмысленные live-анимации и подписки.

Почему поток не равен списку компонентов

Оптимизация начинается с структуры состояния и подписок. Memoization применяется после того, как entity identity и область обновления определены корректно.

При review команда проверяет не название компонента, а его инварианты: какие данные он имеет право считать финальными, что обязан показать при деградации и как возвращается в согласованное состояние после сбоя.

Проверка под горячим матчем

Запустите поток, где один матч обновляется несколько раз в секунду, а остальные почти статичны. LiveCenter должен перерисовывать только подписанные сущности и не превращать каждую delta в полный render списка. Карточка вне viewport может снизить частоту paint, но при возвращении обязана сразу прочитать актуальный snapshot.

После краткого disconnect компонент получает новую точку синхронизации и не воспроизводит вслепую все пропущенные сообщения.

Для маршрута данных см. поток → отображение на клиенте.

Что проверять в горячий момент матча

Когда одновременно меняются счёт, таймер, карточки и коэффициенты, слабая компонентная граница становится видна сразу: экран начинает дёргаться, теряет focus или слишком шумно анимирует второстепенные изменения. Поэтому live-center проверяют не на спокойном списке, а в разгар матча с большим количеством delta. Хорошее сопровождение к этому компоненту — статья про точечные обновления без лишних перерисовок.