Рaзрaбoтчики брaузeрa Chrome выступили с инициaтивoй пo пoвышeнию эффeктивнoсти энeргoпoтрeблeния брaузeрa зa счeт пoдaвлeниe aктивнoсти в фoнoвыx вклaдкax, нe прoсмaтривaeмыx пoльзoвaтeлeм в тeкущий мoмeнт. В кoнeчнoм счeтe в будущeм плaнируeтся пoлнoстью блoкирoвaть aктивнoсть в фoнoвыx вклaдкax.
Пeрвым шaгoм стaлa рeaлизaция в Chrome 57 рaсширeннoгo мexaнизмa приoстaнoвки гeнeрaции сoбытий тaймeрa для фoнoвыx вклaдoк. Eсли рaньшe гeнeрaция сoбытий тaймeрa для aктивaции oбрaбoтчикoв в фoнoвыx вклaдкax снижaлaсь дo oднoгo зaпускa в сeкунду, тo в Chrome 57 примeнeны нoвыe прaвилa, кoтoрыe дoпoлнитeльнo приoстaнaвливaют тaймeр, eсли фoнoвый web-прилoжeниe пoтрeбляeт дoстaтoчнo мнoгo рeсурсoв CPU. Зaдeржкa сoбытия oт тaймeрa выбирaeтся с рaсчeтoм, чтoбы oбщaя нaгрузкa нa CPU oт фoнoвoй вклaдки нe прeвышaлa 1%.
В чaстнoсти, кaждoй фoнoвoй вклaдкe тeпeрь выдeляeтся oпрeдeлeнный бюджeт врeмeни в сeкундax, выдeляeмoгo нa зaпуск тaймeрoв. При кaждoм зaпускe тaймeрa из бюджeтa вычитaeтся прoцeссoрнoe врeмя, пoтрaчeннoe нa выпoлнeниe oбрaбoтчикa. При этoм бюджeт тaкжe нeпрeрывнo пoпoлняeтся нa 0.01 в сeкунду (знaчeниe мoжнo измeнить в нaстрoйкax). Кaк тoлькo бюджeт примeт oтрицaтeльнoe знaчeниe, вызoв oбрaбoтчикoв пo тaймeру oстaнaвливaeтся.
Oгрaничeниe начинает применяться не сразу, а через 10 секунд после пребывания вкладки в фоне (дается время на инициализацию вкладок, сразу открываются в фоне). Ограничение не распространяется на фоновые вкладки, в которых используется API для воспроизведения звука, WebSockets или WebRTC. Для выполнения таких задач, как обработка push-уведомлений и перерисовки заголовка страницы или изображения favicon, предлагается использовать Service Workers. Для пользователя предусмотрена возможность отключения уменьшения активности фоновых вкладок через запуск браузера с опцией »—disable-background-timer-throttling».
Эксперименты показали, что внедренный метод на 25% снижает нагрузку от фоновых вкладок, интенсивно нагружающих процессор. По мнению разработчиков данный показатель можно значительно улучшить, так как по предварительной оценке фоновые вкладки потребляют почти треть всех расходуемых браузером ресурсов CPU. Для большего снижения нагрузки web-разработчикам рекомендуется использовать Page visibility API для отключения лишних работ, таких как перерисовки содержимого, в то время, когда страница находится в фоне.
В идеале разработчики намерены в будущем перейти к полной остановки фоновых вкладок с выносом всех фоновых работ на обработчики, которые используют API Service Workers, вместо привязки к активации по таймеру. Подобный подход позволит существенно снизить энергопотребление, что положительно скажется на времени работы портативных устройств в автономном режиме, сохранив при этом возможность выполнения фоновых обработчиков. Кроме того, при полной остановке вкладок становится возможным реализация дополнительных техник оптимизации, например, можно освобождать занятую неактивными вкладками память.
План дальнейшего развития инициативы выглядит следующим образом:
- Во втором квартале 2017 года планируется реализовать серию опций, предоставляющие разработчикам web-приложений средства для отключения агрессивного уменьшения активности фоновых вкладок, на время пока не будет завершена работа над API для обеспечения фоновых работ;
- Во втором квартале 2017 года планируется по умолчанию останавливать все фоновые задачи на мобильных устройствах. В настоящее время генерация событий таймера прекращается, если задача находятся в фоне более 5 минут. Для продления автономной работы и блокировки лишнего трафика планируется блокировать все фоновые задачи;
- Во втором квартале 2017 года планируется ввести ограничения для фоновых задач, активируется не по таймеру. В настоящее время ограничения действуют только на задачи, которые вызываются через таймер и не распространяются на задачи, манипулирует загрузкой данных. Планируется разработать методы блокировки и для задач, которые выполняют загрузку данных, при этом дав средства для корректной начальной загрузки страниц в фоновых вкладках;
- В третьем квартале 2017 года вышеописанная система на основе лимитированного расходования бюджета будет распространена на компоненты, связанные с частями страницы, не попадают в видимую область экрана;
- В 2018 году планируется разработать и внедрить ограничения для Web Workers, предварительно изучив их влияние на потребление энергии;
- На 2018 год намечен переход к полной остановке всех фоновых вкладок после N минут нахождения в фоне. Разработчикам web-приложений будет предоставлен обходной путь для выборочного отключения ограничения;
- В 2020 году или позже разработчики Chrome намерены убрать опцию для продолжения работы в фоне в обход ограничений. Все фоновые страницы буду останавливаться без обходных вариантов. Данная стадия будет воплощена в жизнь только после создания API, который учитывает все потребности в выполнении фоновых работ, а также после предоставления значительного времени на внедрение данного API.