Summary

  • Рабочий проект W3C Page Visibility от 2 июня 2011 года описал состояние видимости документа и событие visibilitychange, которое сообщает странице о переходе.
  • В качестве примера авторы взяли веб-почту: пока её видно, проверять новые письма каждые несколько секунд; после ухода во вкладку на заднем плане — раз в несколько минут. Интервал выбирало приложение.

Почта осталась за картой, статьёй и вкладкой с корзиной. Хозяин давно занят другим, а она снова спрашивает сервер: нет ли письма? Спрашивает ещё раз. Так мог бы работать образцовый консьерж, который каждые несколько секунд звонит в пустую квартиру. Когда таким усердием заняты многие вкладки, счёт приходит процессору и батарее.

Проект W3C от 2 июня 2011 года устранил разрыв в знаниях. Браузер видит, какая вкладка впереди, свёрнуто ли окно и попадает ли документ хотя бы на один экран. Странице дали document.hidden, состояние видимости и событие visibilitychange при его изменении. Один участник сообщал положение окна, другой решал, как организовать собственную работу.

Пример с электронной почтой был намеренно будничным. Человек смотрит на входящие — можно часто спрашивать о новостях. Перешёл в другую вкладку — приложение вправе увеличить паузу до нескольких минут. Служба знает, как быстро нужны её сообщения. Браузер знает, есть ли перед глазами место, куда их показать. Протокол дал им возможность соединить эти два знания, не назначая всем сайтам один распорядок дня.

Январское предложение 2011 года в публичной переписке W3C перечисляло и другие ситуации: остановить часы головоломки, когда игрок ушёл; сократить опрос сервера; подождать с видео до первого взгляда на вкладку. Один и тот же сигнал ведёт к разным решениям. Игра бережёт честное игровое время, почта — запросы, видео — внимание зрителя.

Слово «скрыта» требовало аккуратности. Проект называл вкладку на заднем плане, свёрнутое окно и заблокированный экран. Если документ хотя бы частично показывался на каком-либо экране, он оставался видимым. Авторы учли и средства доступности, которые закрывают обычный вид окна, но показывают увеличенную страницу. Браузер сообщал о представлении документа на экране точнее, чем сама страница могла бы вывести из событий получения и потери фокуса.

Состояние меняется много раз. Одного чтения document.hidden при загрузке мало для человека, который открыл почту, ушёл на карту и вернулся через час. visibilitychange отмечает переходы, позволяя приложению пересмотреть свой график. Проект последнего сбора замечаний от июля 2011 года сохранил практические примеры и уточнял интерфейс. Браузер приносил новости о видимости; программа выбирала, когда ей работать усерднее.

Рекомендация W3C от 14 мая 2013 года закрепила hidden, visibilityState и visibilitychange, а также предусмотрела дополнительные состояния для отдельных случаев предварительной загрузки и завершения документа. Вторая редакция от октября 2013 года исправила только опечатку в имени visibilitychange в разделе 4.3. Несколько лет обсуждали, как узнать, видна ли страница; потом потребовалась ещё одна вычитка, чтобы правильно написать название сигнала. Стандартам тоже нужен редактор.

Механизм соседствует с Web Workers, но отвечает на иной вопрос. Worker переносит долгий расчёт из места, где страница должна реагировать на щелчки. Page Visibility сообщает приложению, когда работу можно делать реже или позже. Почтовая служба могла бы использовать оба инструмента: считать в отдельной среде и реже опрашивать сервер в скрытой вкладке. Место труда и его расписание — разные решения.

Проект 2011 года называл эффективность процессора и расхода энергии среди целей. Суть легко объяснить без лаборатории: в пустой комнате незачем каждые несколько секунд проверять почтовый ящик. Браузер уже знал, что комната опустела. Осталось передать это известие работавшей в ней странице.