Onglets en arrière-plan dans Chrome 57

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é de nombreux efforts pour apporter des améliorations supplémentaires. Ce document présente le règlement Chrome. Ce document décrit les règles actuelles de Chrome 57. Pour en savoir plus sur la stratégie à long terme et les autres projets, consultez 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. Le travail en arrière-plan doit être limité au minimum, sauf si cela est absolument nécessaire pour fournir une expérience utilisateur particulière. Vous devez utiliser l'API Page Visibility pour détecter quand la page est en arrière-plan et suspendre toutes les tâches inutiles, 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 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 n'est exécuté qu'une seule fois par seconde. Chrome exécute ces minuteurs par lots une fois par seconde, ce qui garantit que le nombre de réveils de processus est limité 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 du contenu audio pour permettre aux applications de mettre la piste audio suivante en file d'attente.

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.

Limitation budgétaire des minuteurs en arrière-plan basée sur le budget

Disponible dans Chrome 57, la limitation des timers basée sur un budget est une extension supplémentaire du mécanisme d'alignement des timers, qui impose une limite supplémentaire à l'utilisation du processeur par les timers 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 de temps après 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 au fil du temps (actuellement à un taux de 0,01 seconde par seconde). Notez que ce taux de régénération du budget peut être ajusté à mesure que Chrome collecte davantage de données sur le comportement de limitation.

Il existe un certain nombre d'exceptions automatiques à 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 de fermer ces connexions à l'expiration d'un délai La règle "run-timers-once-a-second" est toujours appliquée 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 pendant une longue période.

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 fragments de 50 ms ou moins conformément aux consignes relatives aux performances et utilisez l'écouteur visibilityChange pour éviter d'effectuer un travail inutile en arrière-plan.

Désactivations

Chrome fournit l'indicateur --disable-background-timer-throttling pour des cas d'utilisation tels que l'exécution de suites de tests et d'autres calculs lourds sanctionnés par l'utilisateur.