Summary

  • El borrador de Page Visibility publicado por W3C el 2 de junio de 2011 describió un estado de visibilidad para la página y el evento visibilitychange cuando ese estado variaba.
  • Puso como ejemplo un correo web que consulta el servidor cada pocos segundos mientras está a la vista y cada varios minutos cuando la pestaña queda oculta. El servicio elegía ese ritmo.

El correo está en la pestaña de atrás, detrás de un artículo, un mapa y quizá la receta de la cena. Su dueño lleva rato en otra cosa. La pestaña, entretanto, vuelve a consultar el buzón. Y otra vez. Parece un portero que pregunta cada pocos segundos si ha llegado una carta a una casa vacía. Cuando varias páginas hacen lo mismo, la diligencia empieza a cobrar en procesador y batería.

El borrador de Page Visibility del 2 de junio de 2011 propuso compartir un dato que el navegador ya conocía. Sabe qué pestaña está delante, cuándo una ventana se minimiza y si el documento aparece en alguna pantalla. La página podía leer document.hidden y un estado de visibilidad; visibilitychange le comunicaba las transiciones. Ese aviso permitía adaptar el trabajo a la situación que el navegador observaba.

Los autores escogieron el correo como caso de uso. A la vista del lector, revisar mensajes cada pocos segundos puede ser razonable. Escondido detrás de otra pestaña, el mismo servicio podría hacerlo cada pocos minutos. La elección pertenece a la aplicación, que conoce la urgencia de sus mensajes. El navegador aporta la condición. El programa decide cuánto esfuerzo gastar cuando nadie verá el resultado de inmediato.

La propuesta publicada en enero de 2011 en la lista del W3C había puesto sobre la mesa más escenas: el cronómetro de un rompecabezas que se detiene cuando el jugador se va, la consulta periódica que se pausa y el vídeo que espera a que alguien abra su pestaña. Son respuestas distintas a la misma noticia. Una partida protege el tiempo del jugador; un buzón reduce preguntas; un vídeo espera público.

La palabra «oculta» necesitaba una definición útil. El borrador ponía de ejemplo una pestaña en segundo plano, un navegador minimizado y una pantalla bloqueada. Si el documento aparecía al menos parcialmente en una pantalla, contaba como visible. También contemplaba herramientas de accesibilidad que cubren gran parte de la pantalla y aun así muestran la página ampliada. El objetivo era informar sobre la presentación del documento, con más precisión que la que daban los eventos de foco y desenfoque.

El evento visibilitychange era el timbre para cambiar de turno. Consultar el estado una vez al abrir la página dejaría fuera el resto del día: el lector pasa al mapa, vuelve al correo y se marcha otra vez. El borrador de última convocatoria de julio de 2011 mantuvo esos ejemplos al pulir la interfaz. Cada transición daba a la aplicación una ocasión de revisar su propio horario.

La Recomendación de W3C del 14 de mayo de 2013 recogió hidden, visibilityState y visibilitychange, junto con estados previstos para situaciones como la precarga fuera de pantalla o la salida de un documento. La segunda edición de octubre de 2013 llevó una enmienda deliciosamente pequeña: corregir una errata en el nombre de visibilitychange en la sección 4.3. Después de acordar cuándo una página está presente, tocó asegurarse de que el nombre del aviso estuviera bien escrito.

Este mecanismo responde a una pregunta distinta de la que trató Web Workers. Un worker aparta una cuenta larga de la parte que atiende los clics. Page Visibility dice a una aplicación si su trabajo merece el mismo ritmo cuando la página queda fuera de la vista. Un correo puede necesitar ambos recursos: un lugar para procesar datos y una señal para consultar menos a menudo. La ubicación del trabajo y su calendario son decisiones diferentes.

La meta declarada en 2011 era desarrollar aplicaciones más eficientes en uso de procesador y energía. La idea cabía en una escena doméstica: cuando nadie está en la habitación, el cartero puede dejar de tocar la puerta a cada minuto. El navegador tenía la llave para saber si la habitación estaba vacía. La página recibió por fin el recado.