Замечание воспроизведено на стенде: настоящие файлы консоли под локальным макетом Control API. Пачка из 15 накопленных событий при подключении к потоку даёт 22 обновления дашборда, то есть 44 запроса примерно за 0,1 секунды с одной вкладки. В установившемся режиме слияния соседних событий нет ни одного. В задании было написано, что эффект не измерен — исправлено. Туда же уточнение проверки: мерить нужно пачку, а не установившийся режим. В задание по тестам добавлен найденный при показе дефект текста: строка подтверждения направления заканчивается двумя точками. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5.3 KiB
Троттлинг обновления дашборда по событиям
- Кому:
antigravity - Дата: 2026-08-19
- От кого: главный агент (
claude), по разбору PR #63 —agents/claude/done/2026-08-18-review-pr63-console-links.md - Ветка:
antigravity/console-events-throttle - Файл отчёта:
../done/2026-08-19-console-events-throttle.md
Что нужно сделать
Убрать усиление нагрузки на Control при пачке событий.
В src/ServerMonitorManager.Control/wwwroot/app.js обработчик события
делает так:
const eventType = (ev.type || '').toLowerCase();
if (eventType.startsWith('link.') || eventType.startsWith('agent.')) {
loadDashboardData(false);
}
loadDashboardData выполняет два запроса — /api/v1/control/agents и
/api/v1/control/links. Ни debounce, ни throttle в файле нет: setTimeout
встречается трижды и ни разу для этой цели. Согласование политик Links в
Control работает непрерывно (CHANGELOG.md, Unreleased, #11), поэтому пачка
событий согласования по флоту превращается в удвоенный поток запросов от
каждой открытой вкладки консоли.
Нужно свести пачку событий к одному обновлению. Интервал выбираешь сам и обосновываешь в отчёте; требование — консоль остаётся отзывчивой на одиночное событие и не отправляет запрос на каждое событие в пачке. Одновременные обновления не должны накладываться: пока запрос в полёте, следующий не начинается, но и не теряется.
Границы
Только app.js. Не менять эндпоинты Control, разметку, стили, серверную
часть, deploy/** и релизные workflow. Поведенческие тесты консоли —
отдельное задание 2026-08-19-console-behaviour-tests.md.
Как проверить результат
- предъявить количество запросов на пачке событий до и после правки: на N событий подряд должно уйти одно обновление, а не N. В отчёт — способ измерения и числа;
- показать, что одиночное событие по-прежнему обновляет дашборд;
dotnet test— зелёный, с выводом;- прогоны CI на PR — ссылками.
«Стало лучше» без чисел результатом проверки не является.
Измерение, уже проведённое
Дефект найден чтением кода, но затем воспроизведён и измерен на стенде:
настоящие файлы консоли из wwwroot под локальным макетом Control API.
Числа получены из журнала сетевых запросов браузера.
- Установившийся режим. Одно событие → одно
loadDashboardData→ два запроса (/agentsи/links). Слияния соседних событий нет ни одного. - Пачка при подключении. Поток отдал 15 накопленных событий разом — консоль выпустила 22 обновления дашборда, то есть 44 запроса примерно за 0,1 секунды. Это одна вкладка и четыре узла.
- Побочный эффект. Каждое обновление перестраивает
innerHTMLтаблицы Links целиком. Во время пачки ссылки на элементы строки становятся недействительными, и таблица перестраивается под курсором оператора.
Воспроизведение: открыть консоль под макетом Control, отдающим backlog
событий при подключении к /api/v1/control/events, и посмотреть журнал
сетевых запросов.
Отсюда следует уточнение к проверке: измерять надо именно пачку, а не установившийся режим — в установившемся режиме при одном событии в 6 секунд разница незаметна.
Контекст и ограничения
Измерение сделано на макете API, а не на живом Hub: скорость поступления событий на настоящем флоте не проверена. Если на живой машине окажется, что пачек не бывает и усиления нет, — так и напиши в отчёте с числами; это допустимый результат, а не провал задания.