В реактивной архитектуре Vega взаимодействие между данными, сценой и интерактивностью строится через систему сигналов (signals), формирующих направленный граф зависимостей. Сигналы представляют собой именованные значения, которые могут обновляться в ответ на пользовательские события, изменения данных или вычисления в других сигналах.
Одним из ключевых механизмов управления распространением изменений в этой системе выступает поле push, определяющее стратегию доставки обновлений, включая сценарии глобальных сигналов.
Сигналы в Vega образуют реактивную сеть, где каждое изменение значения инициирует каскадное обновление зависимостей. Внутренне граф сигналов опирается на принцип:
В классическом режиме обновления изменения передаются через локальные зависимости, минимизируя область пересчёта.
Однако при работе с интерактивными сценами возникает необходимость управления глобальным распространением событий, особенно когда сигнал должен влиять на множество независимых компонентов сцены или даже на несколько визуализаций.
Поле push определяет стратегию доставки обновлений сигнала по графу зависимостей. Оно управляет тем, каким образом изменения «проталкиваются» (push) к подписчикам.
Основные режимы поведения:
Глобальные сигналы в этом контексте представляют собой сигналы, изменения которых должны быть видны максимально широкой части системы независимо от локальной структуры зависимостей.
Глобальный сигнал в Vega — это сигнал, чьи изменения не ограничиваются локальным подграфом зависимостей. Вместо этого он инициирует обновление всех узлов, которые явно или косвенно могут быть затронуты.
Такая модель используется в случаях:
Глобальность в данном случае не означает отсутствие структуры, а означает расширенную область влияния при обновлении.
При включении глобального режима push изменяет стратегию распространения следующим образом:
В отличие от классического режима, где пересчёт строго оптимизирован по зависимостям, глобальный push допускает более широкую зону инвалидирования.
Граф вычислений в Vega можно рассматривать как ориентированный ациклический граф (DAG), в котором сигналы являются вершинами, а зависимости — рёбрами.
При глобальном push:
Это создаёт баланс между производительностью и согласованностью состояния визуализации.
Глобальные сигналы особенно важны в интерактивных визуализациях, где одно действие пользователя должно влиять на множество элементов сцены.
Типичные сценарии:
Изменение масштаба (zoom) одного графика должно отражаться на нескольких координированных представлениях.
Сигнал фильтрации может воздействовать на несколько независимых слоёв данных, включая агрегаты и вспомогательные визуализации.
Положение курсора мыши часто используется как глобальный сигнал, влияющий на tooltip, подсветку и вспомогательные маркеры.
| Характеристика | Локальный push | Глобальный push |
|---|---|---|
| Область влияния | Подграф зависимостей | Расширенный граф |
| Производительность | Выше | Ниже |
| Согласованность | Частичная | Максимальная |
| Использование | Изолированные взаимодействия | Скоординированные сцены |
Локальный push оптимизирует вычисления, тогда как глобальный обеспечивает согласованность состояния при сложной интерактивности.
Глобальные сигналы увеличивают нагрузку на систему обновлений, так как:
Для компенсации этого эффекта Vega использует:
Сигнальная система Vega тесно связана с реактивной моделью данных, где изменения состояния автоматически отражаются в представлении.
Поле push в этом контексте выполняет роль механизма распространения событий в реактивной цепочке:
Таким образом, push является частью инфраструктуры реактивного обновления, а не просто параметром сигнала.
Глобальные сигналы могут взаимодействовать между собой, образуя сложные композиции:
В таких системах важную роль играет детерминированность порядка обновлений, поскольку от него зависит согласованность сцены.
В runtime Vega сигналы обрабатываются через внутренний планировщик обновлений:
Глобальный push влияет на этап определения области инвалидирования, расширяя его до множества узлов графа.
Глобальные сигналы становятся фундаментом для построения:
Их использование позволяет формировать единое состояние сцены, в котором все компоненты реагируют согласованно на изменения пользовательского ввода или данных.