Achtergrondtabbladen in chroom 57

Achtergrondtabbladen kunnen een dramatisch negatief effect hebben op de browserprestaties, vooral op de levensduur van de batterij. Om dit te verzachten heeft Chrome de afgelopen jaren verschillende beperkingen opgelegd aan achtergrondtabbladen. De laatste tijd zijn er een aantal pogingen ondernomen om verdere verbeteringen aan te brengen, en dit document geeft een overzicht van het Chrome-beleid. Dit document richt zich op het beschrijven van het huidige beleid in Chrome 57. De langetermijnstrategie en verdere plannen zijn te vinden in dit document .

Een applicatie optimaliseren voor achtergrond

Webontwikkelaars moeten zich ervan bewust zijn dat gebruikers vaak veel tabbladen op de achtergrond open hebben en dat dit een ernstig effect kan hebben op het stroomverbruik en de levensduur van de batterij. Werk op de achtergrond moet tot een minimum worden beperkt, tenzij het absoluut noodzakelijk is om een ​​bepaalde gebruikerservaring te bieden. De Paginazichtbaarheid-API moet worden gebruikt om te detecteren wanneer de pagina de achtergrond heeft en al het onnodige werk, zoals visuele updates, op te schorten.

Voor sommige sites kan deze eenvoudige optimalisatie het CPU-gebruik met maar liefst 75% verminderen:

var doVisualUpdates = true;

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

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

Beleid

verzoekAnimatieFrame()

Volgens de documentatie roept Chrome requestAnimationFrame() niet aan wanneer een pagina zich op de achtergrond bevindt. Dit gedrag bestaat sinds 2011.

Uitlijning van de achtergrondtimer

Sinds Chrome 11 wordt elke onafhankelijke timer niet vaker dan één keer per seconde uitgevoerd. Chrome voert deze timers één keer per seconde in batches uit, zodat het aantal proceswakeups tot een minimum wordt beperkt. Pagina's die hoorbare audio afspelen, worden beschouwd als zichtbaar voor de gebruiker en zijn vrijgesteld van beperking van de achtergrondtimer. De vrijstelling duurt enkele seconden nadat het afspelen van de audio is gestopt, zodat toepassingen de volgende audiotrack in de wachtrij kunnen plaatsen.

Houd er rekening mee dat audio als hoorbaar wordt beschouwd wanneer en alleen wanneer Chrome het audiopictogram weergeeft. Stille audiostreams geven geen vrijstelling.

Op budget gebaseerde achtergrondtimerbeperking

Verzending in Chrome 57 , op budget gebaseerde timerbeperking is een verdere uitbreiding van het timeruitlijningsmechanisme, waardoor een extra limiet wordt gesteld aan het CPU-gebruik van de achtergrondtimer. Het werkt als volgt:

  • Elk achtergrondtabblad heeft een tijdsbudget (in seconden) voor het uitvoeren van timers op de achtergrond.
  • Een pagina wordt onderworpen aan tijdsbudgetbeperkingen na 10 seconden op de achtergrond.
  • Een timertaak mag alleen worden uitgevoerd als het tijdsbudget niet-negatief is.
  • Nadat een timer is uitgevoerd, wordt de looptijd ervan afgetrokken van het budget.
  • Het budget wordt in de loop van de tijd voortdurend vernieuwd (momenteel ingesteld op een snelheid van 0,01 seconde per seconde). Houd er rekening mee dat deze regeneratiesnelheid van het budget kan worden aangepast naarmate Chrome meer gegevens verzamelt over het beperkingsgedrag.

Er zijn een aantal automatische vrijstellingen van deze beperking:

  • Applicaties die audio afspelen, worden beschouwd als voorgrond en worden niet beperkt.
  • Applicaties met real-time verbindingen (WebSockets en WebRTC), om te voorkomen dat deze verbindingen door time-out worden afgesloten. In deze gevallen wordt nog steeds de run-timers-once-a-second-regel toegepast.

Merk op dat dit mechanisme gebruik maakt van wall-time en niet van CPU-tijd. Het is een goede benadering van de CPU-tijd en bestraft het langdurig blokkeren van de hoofdthread.

Houd er ten slotte rekening mee dat als u lange taken op de achtergrond gebruikt, uw toepassing gedurende een zeer lange periode kan worden beperkt (tot 100 keer de duur van uw taak). Splits uw werk op in delen van 50 ms of minder volgens de prestatierichtlijnen en gebruik de visibilityChange listener om te voorkomen dat u onnodig werk op de achtergrond doet.

Opt-outs

Chrome biedt de vlag --disable-background-timer-throttling voor gebruiksscenario's zoals het uitvoeren van testsuites en andere door de gebruiker goedgekeurde zware berekeningen.