Las pestañas en segundo plano pueden tener un efecto negativo drástico en el rendimiento del navegador, especialmente 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 saber que, a menudo, los usuarios tienen muchas pestañas abiertas en segundo plano. lo que puede afectar gravemente el consumo y la duración de la batería. Trabaja en segundo plano deben mantenerse al mínimo, a menos que sea absolutamente necesario proporcionar una experiencia del usuario en particular. El API de Visibilidad de páginas debe usarse para detectar cuándo la página pasa a 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 existe desde 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 por lotes una vez por segundo, asegurándose de 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 aplicaciones para poner 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
Envío en Chrome 57, La limitación del temporizador basada en el presupuesto es una extensión adicional del mecanismo de alineación 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 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 continuamente con el tiempo (actualmente establecido en un porcentaje 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 a 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 del tiempo de ejecución de una vez por segundo 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
ejecutar paquetes de pruebas y otros cálculos pesados aprobados por el usuario.