Работает ли Web Worker setTimeout () / setInteval ()? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть скрипт на вкладке foreground , который запускает (выделенный) веб-работник. Теперь я вижу, что setTimeout(xxx, 100) в этом веб-работнике может запускаться не чаще, чем один раз в секунду, а не 10 раз в секунду, как требуется. Я гуглил такое ограничение для неактивных вкладок, но есть ли документы, которые говорят то же самое о веб-работниках? Я проверил это в Chrome и Firefox.

1 Ответ

1 голос
/ 23 апреля 2020

Реальных характеристик такого регулирования не существует, хотя они это допускают :

При желании можно подождать еще один промежуток времени, определенный реализацией.

Это предназначено для того, чтобы пользовательские агенты могли заполнять тайм-ауты по мере необходимости для оптимизации энергопотребления устройства. Например, некоторые процессоры имеют режим пониженного энергопотребления, при котором гранулярность таймеров уменьшается; на таких платформах пользовательские агенты могут замедлять таймеры, чтобы соответствовать этому графику, вместо того, чтобы процессор использовал более точный режим с его более высоким энергопотреблением.

Chrome имеет этот документ от 2017 года, где они раскрывают, как они планировали обрабатывать фоновые вкладки.

Оттуда мы можем увидеть план раздела о Web Workers :

Удушение веб-работников (~ 2018)

В настоящее время мы работаем с веб-работниками, чтобы лучше понять их использование ЦП и влияние на энергопотребление. Мы также рассматриваем возможность регулирования работы веб-работников, заботясь о том, чтобы свести к минимуму битый контент.

Так что это было запланировано на 2018 год, а - вот проблема, отслеживающая его развертывание .

Следует также отметить, что в настоящее время идет активное обсуждение WICG по реализации Page-Lifecycle API . Этот API представит несколько событий и новое «замороженное» состояние, которое для того, что нам интересно, должно также приостановить выполнение Workers .

...