Las pestañas en segundo plano pueden tener un efecto negativo significativo en el rendimiento del navegador, sobre todo en la duración de la batería. Para mitigar esto, Chrome ha estado aplicando varias restricciones a las pestañas en segundo plano durante los últimos años. Recientemente, se realizaron varios esfuerzos para realizar más mejoras, y en este documento se proporciona una descripción general de la política de Chrome. En este documento, se describen las políticas actuales de Chrome 57. Puedes encontrar la estrategia a largo plazo y otros planes en este documento.
Cómo optimizar una aplicación para el segundo plano
Los desarrolladores web deben tener en cuenta que los usuarios suelen tener muchas pestañas abiertas en segundo plano, lo que puede tener un efecto grave en el uso de energía y la duración de la batería. El trabajo en segundo plano debe reducirse al mínimo, 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 algunos sitios, esta sencilla optimización puede reducir el uso de la 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 implementó en 2011.
Alineación del temporizador en segundo plano
A partir de Chrome 11, cada temporizador independiente se ejecuta no más de una vez por segundo. Chrome ejecuta estos temporizadores en 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 se detiene la reproducción de audio 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 sin sonido no otorgan exenciones.
Limitación del temporizador en segundo plano basada en el presupuesto
La limitación del temporizador basada en el presupuesto, que se envía en Chrome 57, es una extensión adicional del mecanismo de alineación del temporizador, que establece un límite adicional en el uso de la CPU del temporizador en segundo plano. Funciona de la siguiente manera:
- Cada pestaña en segundo plano tiene un presupuesto de tiempo (en segundos) para ejecutar temporizadores en segundo plano.
- Una página está sujeta a limitaciones de tiempo después de 10 segundos en segundo plano.
- Una tarea de temporizador solo se puede ejecutar cuando el presupuesto de tiempo no es negativo.
- Después de que se ejecuta un temporizador, su tiempo de ejecución se resta del presupuesto.
- El presupuesto se regenera de forma continua con el tiempo (actualmente, se establece en una tasa de 0.01 segundos por segundo). Ten en cuenta que esta tasa de regeneración del presupuesto se puede ajustar a medida que Chrome recopila más datos sobre el comportamiento de limitación.
Existen varias exenciones automáticas de esta limitación:
- Las aplicaciones que reproducen audio se consideran en primer plano y no se limitan.
- Aplicaciones con conexiones en tiempo real (WebSockets y WebRTC) para evitar que se cierren estas conexiones por tiempo de espera La regla de ejecutar temporizadores una vez por segundo se sigue aplicando en estos casos.
Ten en cuenta que este mecanismo usa tiempo de pared, no tiempo de CPU. Es una buena aproximación del tiempo de la 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 controlarse durante un período muy largo (hasta 100 veces la duración de la 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 realizar 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.