Pestañas en segundo plano en Chrome 57

Las pestañas en segundo plano pueden tener un efecto negativo considerable en el rendimiento del navegador, en especial, en la duración de batería. Para mitigar este problema, Chrome aplicó varias restricciones a las pestañas en segundo plano durante los últimos años. Recientemente, se realizaron varios esfuerzos para realizar mejoras adicionales, y en este documento se ofrece una descripción general de la política de Chrome. Este documento se centra en la descripción de las políticas actuales de Chrome 57. Puedes encontrar la estrategia a largo plazo y los planes adicionales en este documento.

Cómo optimizar una aplicación para el segundo plano

Los desarrolladores web deben saber que los usuarios a menudo tienen muchas pestañas abiertas en segundo plano y que esto puede tener un efecto grave en el uso de energía y la duración de la batería. Se debe reducir al mínimo el trabajo en segundo plano, a menos que sea absolutamente necesario para proporcionar una experiencia del usuario en particular. Se debe usar la API de visibilidad de páginas para detectar cuándo la página está en segundo plano y suspender todo el trabajo innecesario, como las actualizaciones visuales.

En el caso de algunos sitios, esta optimización simple puede reducir el uso de CPU hasta en un 75%:

var doVisualUpdates = true;

document.addEventListener('visibilitychange', function(){
    doVisualUpdates = !document.hidden;
});

function update() {
    if (!doVisualUpdates) {
    return;
    }
    doStuff();
}

Políticas

requestAnimationFrame()

Según la documentación, Chrome no llama a requestAnimationFrame() cuando una página está en segundo plano. Este comportamiento se aplica desde 2011.

Alineación del temporizador en segundo plano

A partir de Chrome 11, cada temporizador independiente no se ejecuta más de una vez por segundo. Chrome ejecuta estos temporizadores por lotes una vez por segundo, lo que garantiza que la cantidad de activaciones de procesos se mantenga al mínimo. Las páginas que reproducen audio audible se consideran visibles para el usuario y están exentas de la limitación del temporizador en segundo plano. La exención dura varios segundos después de que el audio deja de reproducirse para permitir que las aplicaciones pongan en cola la siguiente pista de audio.

Ten en cuenta que el audio se considera audible solo cuando Chrome muestra el ícono de audio. Las transmisiones de audio silenciosas no otorgan exenciones.

Limitación del temporizador en segundo plano basada en el presupuesto

Envío en Chrome 57, la limitación del temporizador basada en el presupuesto es una extensión adicional del mecanismo de alineación del temporizador, que establece un límite adicional en el uso de CPU del temporizador en segundo plano. Funciona de la siguiente manera:

  • Cada pestaña en segundo plano tiene un presupuesto (en segundos) para ejecutar temporizadores en segundo plano.
  • Una página está sujeta a limitaciones de presupuesto de tiempo después de 10 segundos en segundo plano.
  • Solo se puede ejecutar una tarea de temporizador si el presupuesto de tiempo no es negativo.
  • Después de que se ejecuta un cronómetro, su tiempo de ejecución se resta del presupuesto.
  • El presupuesto se vuelve a generar continuamente con el tiempo (actualmente establecido a una velocidad de 0.01 segundos por segundo). Ten en cuenta que esta tasa de regeneración de presupuesto se puede ajustar a medida que Chrome recopila más datos sobre el comportamiento de la regulación.

Hay una serie de exenciones automáticas a esta limitación:

  • Las aplicaciones que reproducen audio se consideran en primer plano y no están limitadas.
  • Aplicaciones con conexiones en tiempo real (WebSockets y WebRTC) para evitar cerrar estas conexiones por tiempo de espera La regla de cronómetros de ejecución una vez por segundo aún se aplica en estos casos.

Ten en cuenta que este mecanismo usa tiempo, no de CPU. Es una buena aproximación del tiempo de CPU y penaliza el bloqueo del subproceso principal durante mucho tiempo.

Por último, recuerda que, si usas tareas largas en segundo plano, tu aplicación puede limitarse durante un período muy prolongado (hasta 100 veces la duración de tu tarea). Divide tu trabajo en fragmentos de 50 ms o menos según los lineamientos de rendimiento y usa el objeto de escucha visibilityChange para evitar hacer trabajo innecesario en segundo plano.

Rechazos

Chrome proporciona la marca --disable-background-timer-throttling para casos de uso como la ejecución de paquetes de pruebas y otros cálculos pesados aprobados por el usuario.