Вилку в глаз: realtime в Chrome extension

Заказчикам из беттинга нужен был мониторинг: сопоставлять матчи у разных букмекеров, замечать отставание данных и подавать сигнал со ссылкой на событие.

Выбрали Chrome extension: парсеры собирали события в открытых вкладках, фоновая часть сопоставляла их.

Manifest V2 уже провожали на пенсию, но дед ещё мог. С нужными разрешениями — внедрять JS, хозяйничать в DOM, менять заголовки и ходить на внешние домены из расширения без обычных CORS-ограничений страницы, грабить корованы.

Первый сюрприз: неактивные вкладки переставали обновлять данные. Организовал их поочерёдную активацию через Chrome API под полноэкранным интерфейсом расширения. В нашем сценарии это помогло.

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

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

Попробовал масштаб вкладки 10%. Виджет сохранил высоту, строки уменьшились — поместилось примерно в десять раз больше событий.

Имена, транслитерация и парные матчи потребовали отдельной эвристики. О ней — следующий пост.

Получился единый интерфейс с событиями, уведомлениями и ссылками. Компромисс — зависимость сбора от DOM и поведения площадок.

Такие дела!