Karty w tle w Chrome 57

Karty w tle mogą mieć ogromny wpływ na wydajność przeglądarki, zwłaszcza na baterię. Aby temu zaradzić, od kilku lat Chrome wprowadza różne ograniczenia na karty działające w tle. Ostatnio podjęto działania mające na celu wprowadzenie dalszych ulepszeń. W tym dokumencie znajdziesz ogólny opis zasad Chrome. Ten dokument zawiera opis bieżących zasad w Chrome 57. Długoterminową strategię i dalsze plany znajdziesz w tym dokumencie.

Optymalizacja aplikacji pod kątem tła

Deweloperzy witryn powinni pamiętać, że użytkownicy często mają wiele otwartych kart w tle, co może mieć ogromny wpływ na zużycie energii i żywotność baterii. Praca w tle powinna być ograniczona do minimum, chyba że jest to absolutnie konieczne, aby zapewnić użytkownikom konkretne wrażenia. Interfejs Pageability API powinien służyć do wykrywania, kiedy strona działa w tle, i zawieszania niepotrzebnych działań, np. aktualizacji wizualnych.

W przypadku niektórych witryn ta prosta optymalizacja może zmniejszyć wykorzystanie procesora nawet o 75%:

var doVisualUpdates = true;

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

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

Zasady

requestAnimationFrame()

Zgodnie z dokumentacją Chrome nie wywołuje requestAnimationFrame(), gdy strona działa w tle. To rozwiązanie funkcjonuje od 2011 roku.

Wyrównywanie licznika czasu w tle

Od Chrome 11 każdy niezależny licznik czasu jest uruchamiany nie częściej niż raz na sekundę. Chrome uruchamia te minutniki partiami raz na sekundę, dzięki czemu liczba wybudzeń procesu jest ograniczona do minimum. Strony, które odtwarzają dźwięk, są uznawane za widoczne dla użytkowników i są zwolnione z ograniczania licznika czasu w tle. Wyłączenie trwa kilka sekund po zatrzymaniu odtwarzania dźwięku, aby aplikacje mogły dodać kolejną ścieżkę audio do kolejki.

Pamiętaj, że dźwięk jest uważany za słyszalny tylko wtedy, gdy Chrome wyświetla ikonę dźwięku. Ciche strumienie audio nie kwalifikują się do wyjątków.

Ograniczanie licznika czasu w tle na podstawie budżetu

W wersji Chrome 57 ograniczanie licznika czasu na podstawie budżetu to kolejne rozszerzenie mechanizmu wyrównywania licznika czasu, które wprowadza dodatkowy limit wykorzystania procesora przez licznik czasu w tle. Działa to w ten sposób:

  • Każda karta w tle ma określony budżet (w sekundach) na uruchamianie minutników w tle.
  • Po upływie 10 sekund w tle strona może podlegać ograniczeniom czasowym.
  • Zadanie licznika czasu może być wykonywane tylko wtedy, gdy budżet czasowy nie jest ujemny.
  • Po wykonaniu licznika czasu jego czas działania jest odejmowany od budżetu.
  • Budżet jest generowany na bieżąco po upływie czasu (obecnie ustawiony na 0,01 sekundy na sekundę). Pamiętaj, że ten współczynnik ponownego generowania budżetu można dostosować w miarę jak Chrome zbiera więcej danych o ograniczaniu.

Istnieje wiele automatycznych wykluczeń z tego ograniczania:

  • Aplikacje odtwarzające dźwięk są traktowane jako pierwsze i nie są ograniczane.
  • aplikacje z połączeniami w czasie rzeczywistym (WebSockets i WebSockets oraz WebRTC), aby uniknąć zamykania tych połączeń przez przekroczenie limitu czasu. W takich przypadkach reguła licznika czasu działania jest zawsze stosowana.

Zwróć uwagę, że ten mechanizm wykorzystuje czas pracy na ścianie, a nie czas pracy procesora. To dobre oszacowanie czasu pracy procesora i karen, które blokują wątek główny na dłuższy czas.

Pamiętaj też, że jeśli używasz długich zadań w tle, działanie aplikacji może zostać ograniczone przez bardzo długi czas (nawet 100-krotnie dłużej niż czas trwania zadania). Podziel swoją pracę na fragmenty o długości maksymalnie 50 ms zgodnie ze wskazówkami dotyczącymi wydajności i użyj detektora visibilityChange, aby uniknąć wykonywania niepotrzebnej pracy w tle.

Rezygnacje

Chrome udostępnia flagę --disable-background-timer-throttling na potrzeby przypadków użycia takich jak uruchamianie pakietów testowych i inne wymagające od użytkowników intensywne obliczenia.