Karty w tle mogą mieć znaczący negatywny wpływ na wydajność przeglądarki, zwłaszcza na czas pracy na baterii. Aby temu zaradzić, w Chrome umieszczamy różne ograniczenia dotyczące kart działających w tle. W ostatnim czasie wprowadziliśmy wiele ulepszeń, a w tym dokumencie znajdziesz omówienie zasad Chrome. Ten dokument skupia się na opisywaniu bieżących zasad obowiązujących w Chrome 57. Strategię długoterminową i dalsze plany znajdziesz w tym dokumencie.
Optymalizacja aplikacji na potrzeby działania w tle
Programiści stron internetowych powinni pamiętać, że użytkownicy często mają wiele otwartych kart w tle. Może też mieć duży wpływ na zużycie energii i żywotność baterii. Praca w tle należy ograniczyć do minimum, chyba że jest to absolutnie konieczne, konkretne wrażenia użytkownika. Interfejs Page Visibility API należy używać do wykrywania, kiedy strona jest w tle, i wstrzymywania wszystkich niepotrzebnych działań, takich jak aktualizacje wizualne.
W przypadku niektórych stron: 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 jest w tle.
To ustawienie obowiązuje od 2011 roku.
Wyrównanie licznika czasu w tle
Od wersji Chrome 11 każdy niezależny minutnik jest uruchamiany nie częściej niż raz na sekundę. Chrome uruchamia te regulatory w partiach raz na sekundę, aby ograniczyć do minimum liczbę procesów aktywowanych przez timer. Strony odtwarzające dźwięk są uważane za widoczne dla użytkownika i nie podlegają ograniczeniom działania licznika czasu w tle. Wyjątek obowiązuje przez kilka sekund po zakończeniu odtwarzania dźwięku, aby aplikacje mogły ustawić w kole następny dźwięk.
Pamiętaj, że dźwięk jest uznawany za słyszalny tylko wtedy, gdy Chrome pokazuje ikonę dźwięku. Ciche strumienie audio nie kwalifikują się do wyjątków.
Ograniczanie licznika czasu w tle na podstawie budżetu
Dostawa w Chrome 57, ograniczanie licznika czasu na podstawie budżetu jest dalszym rozszerzeniem mechanizmu wyrównywania licznika czasu, przez wprowadzenie dodatkowego ograniczenia wykorzystania procesora przez licznik czasu w tle. Działa on w ten sposób:
- Każda karta w tle ma budżet czasu (w sekundach) przeznaczony na minutniki działające w tle.
- Po 10 sekundach działania w tle strona podlega ograniczeniom budżetu czasowego.
- Zadanie licznika czasu może być uruchamiane tylko wtedy, gdy budżet czasu nie jest ujemny.
- Po zakończeniu licznika czasu jego działania jest odejmowane od budżetu.
- Budżet jest stale regenerowany z czasem (obecnie wynosi 0,01 sekundy na sekundę). Pamiętaj, że tę szybkość odnawiania budżetu można dostosować, gdy Chrome zbierze więcej danych o ograniczaniu szybkości.
Istnieją pewne automatyczne wyjątki od tego ograniczenia:
- Aplikacje odtwarzające dźwięk są uznawane za pierwszy plan i nie są ograniczane.
- Aplikacje z połączeniami w czasie rzeczywistym (WebSockets i WebRTC), aby uniknąć zamykania tych połączeń z powodu przekroczenia limitu czasu. Reguła czasu działania „raz na sekundę” jest wciąż stosowane w tych przypadkach.
Zwróć uwagę, że ten mechanizm wykorzystuje czas działania, a nie czas pracy procesora. Jest to dobre przybliżenie czasu pracy procesora i kart blokujących główny wątek za długi czas.
Pamiętaj też, że jeśli używasz długich zadań w tle, Twoja aplikacja może być ograniczana przez długi czas (do 100 razy dłuższy niż czas trwania zadania).
Podziel pracę na fragmenty o długości nieprzekraczającej 50 ms zgodnie z wytycznymi dotyczącymi wydajności i użyj listenera visibilityChange
, aby uniknąć niepotrzebnej pracy w tle.
Odmowy
Chrome udostępnia flagę --disable-background-timer-throttling
do takich zastosowań jak uruchamianie zestawów testów i inne wymagające dużych zasobów obliczeniowych operacje zatwierdzone przez użytkownika.