Вилку в глаз: realtime в Chrome extension
Заказчикам из беттинга нужен был мониторинг: сопоставлять матчи у разных букмекеров, замечать отставание данных и подавать сигнал со ссылкой на событие.
Выбрали Chrome extension: парсеры собирали события в открытых вкладках, фоновая часть сопоставляла их.
Manifest V2 уже провожали на пенсию, но дед ещё мог. С нужными разрешениями — внедрять JS, хозяйничать в DOM, менять заголовки и ходить на внешние домены из расширения без обычных CORS-ограничений страницы, грабить корованы.
Первый сюрприз: неактивные вкладки переставали обновлять данные. Организовал их поочерёдную активацию через Chrome API под полноэкранным интерфейсом расширения. В нашем сценарии это помогло.
Отдельно контролировали поступление данных: сборщики периодически отправляли события с временем сериализации. После нескольких пропущенных обновлений по таймауту показывали предупреждение и исключали букмекера из сравнения до восстановления. Пользователь мог перезапустить вкладки или подождать.
Второй сюрприз: у одного букмекера события за пределами видимой части списка исчезали из DOM. Виртуализация — удобно пользователю, грустно парсеру.
Попробовал масштаб вкладки 10%. Виджет сохранил высоту, строки уменьшились — поместилось примерно в десять раз больше событий.
Имена, транслитерация и парные матчи потребовали отдельной эвристики. О ней — следующий пост.
Получился единый интерфейс с событиями, уведомлениями и ссылками. Компромисс — зависимость сбора от DOM и поведения площадок.
Такие дела!