Les onglets en arrière-plan peuvent avoir un impact négatif important sur les performances du navigateur, en particulier sur l'autonomie de la batterie. Pour limiter ce problème, Chrome applique diverses restrictions aux onglets en arrière-plan depuis plusieurs années. Nous avons récemment déployé des efforts pour apporter d'autres améliorations. Ce document présente le règlement Chrome. Ce document décrit les règles actuelles de Chrome 57. Pour découvrir une stratégie à long terme et d'autres projets, ce document.
Optimiser une application pour l'arrière-plan
Les développeurs Web doivent savoir que les utilisateurs ont souvent de nombreux onglets ouverts en arrière-plan, ce qui peut avoir un impact important sur la consommation d'énergie et l'autonomie de la batterie. Travailler en arrière-plan doivent être réduites au minimum, sauf s'il est absolument nécessaire de fournir une expérience utilisateur particulière. L'API Page Visibility doit être utilisée pour détecter quand la page est en arrière-plan et suspendre tout travail inutile, comme les mises à jour visuelles.
Pour certains sites, cette optimisation simple peut réduire l'utilisation du processeur jusqu'à 75%:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
Règles
requestAnimationFrame()
Conformément à la documentation,
Chrome n'appelle pas requestAnimationFrame()
lorsqu'une page est affichée en arrière-plan.
Ce comportement est en place depuis 2011.
Alignement du minuteur en arrière-plan
Depuis Chrome 11, chaque minuteur indépendant ne s'exécute pas plus d'une fois par seconde. Chrome exécute ces minuteurs par lots une fois par seconde, ce qui permet de s'assurer que le nombre de wakeups de processus est réduit au minimum. Les pages diffusant du contenu audio audible sont considérées comme visibles par l'utilisateur et sont exclues de la limitation des timers en arrière-plan. L'exception dure plusieurs secondes après l'arrêt de la lecture audio pour permettre aux applications de mettre en file d'attente le prochain titre audio.
Notez que le son est considéré comme audible lorsque Chrome affiche l'icône audio et uniquement lorsque Chrome affiche l'icône audio. Les flux audio silencieux n'ouvrent pas droit à des exceptions.
Limiter les timers en arrière-plan en fonction du budget
Livraison dans Chrome 57, la limitation de minuterie basée sur le budget est une extension supplémentaire du mécanisme d'alignement du minuteur, en plaçant une limite supplémentaire sur l'utilisation du CPU par les minuteurs en arrière-plan. Il fonctionne comme suit :
- Chaque onglet en arrière-plan dispose d'un budget de temps (en secondes) pour exécuter des minuteurs en arrière-plan.
- Une page est soumise à des limites de budget temporel au bout de 10 secondes en arrière-plan.
- Une tâche de minuteur ne peut s'exécuter que lorsque le budget de temps est positif.
- Une fois qu'un minuteur a été exécuté, sa durée d'exécution est soustraite du budget.
- Le budget se régénère continuellement avec le temps (actuellement défini sur un taux de 0,01 seconde par seconde). Notez que ce taux de régénération du budget peut être ajusté Chrome collecte davantage de données sur le comportement de limitation.
Plusieurs exceptions automatiques s'appliquent à cette limitation :
- Les applications qui diffusent du contenu audio sont considérées comme au premier plan et ne sont pas limitées.
- Applications avec des connexions en temps réel (WebSockets et WebRTC), pour éviter la fermeture de ces connexions par expiration du délai. La règle d'exécution une fois par seconde est toujours s'appliquent dans ces cas.
Notez que son mécanisme utilise la durée d'exécution, et non le temps CPU. Il s'agit d'une bonne approximation du temps CPU et des pénalités qui bloquent le thread principal depuis longtemps.
Enfin, n'oubliez pas que si vous utilisez des tâches longues en arrière-plan, votre application peut être limitée pendant une très longue période (jusqu'à 100 fois la durée de votre tâche).
Divisez votre travail en blocs de 50 ms ou moins conformément aux consignes de performances, et utilisez l'écouteur visibilityChange
pour éviter d'effectuer des tâches inutiles en arrière-plan.
Désactivations
Chrome fournit l'indicateur --disable-background-timer-throttling
pour les cas d'utilisation tels que l'exécution de suites de tests et d'autres calculs lourds autorisés par l'utilisateur.