Обновить

Комментарии 2

Не очень понял какая проблема была и зачем для каких-то публикаций держать активный браузер с 1 вкладкой. Но да, неактивная вкладка через 5 минут понижает частоту проверки таймаутов до 1 раза в минуту https://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs (и вроде работает для всех современных браузеров). Столкнулся с этим когда всякие фоновые апдейты надо было делать. В итоге сошлись на том что бекенд держит сессию 2 минуты и даже отсталый фронтенд в фоне который надеется что опрашивает каждые 30сек успевает продлить сессию. Как заметили в ответах СО в идеале нужно использовать веб воркер, он не уходит в фон.

Спасибо за ссылку, механика ровно та же.

Контекст, который я в статье, видимо, недорассказал: это не мой фронтенд. Публикации идут в ЧУЖИЕ редакторы — Дзен, vc.ru, TenChat, сам Хабр — через CDP в общем Chrome, где живут авторизованные сессии. Вкладка там не одна: у каждого публикатора своя, плюс вкладки живого человека, который в этом же браузере работает руками. Отсюда и «активный браузер»: он один на всех, и отнимать у него передний план нельзя — этим я как раз и сломал человеку день, с чего статья и началась.

Поэтому веб-воркер, к сожалению, мимо: чужой код страницы я не переписываю. Тикают там их таймеры — автосохранение черновика, дебаунс ввода, ожидание ответа на загрузку картинки. Единственный рычаг снаружи — сказать браузеру, что вкладка активна:

Emulation.setFocusEmulationEnabled({enabled:true})

Page.setWebLifecycleState({state:'active'})

С ними setInterval на 100 мс даёт 79 тиков за 8 секунд вместо 5.

Про «через 5 минут раз в минуту» — у меня до минутного режима не доходило, публикация живёт минуты, а не десятки минут. Ловил что-то помягче, около одного тика в полторы секунды. Хватало и этого: DOM отвечает, скриншот снимается, а редактор внутри еле шевелится.

И грабля, ради которой стоило писать: одной команды при открытии вкладки мало. Вкладка рождается активной, окрик уходит в состояние, которого ещё нет, а душат её позже — когда уводят в фон. Пришлось повторять каждые пять секунд отдельным голым соединением.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации