W 2015 r. wprowadziliśmy synchronizację w tle, która umożliwia odroczenie pracy service workera do momentu, gdy użytkownik będzie mieć połączenie z internetem. Oznacza to, że użytkownik może wpisać wiadomość, kliknąć „Wyślij” i opuścić witrynę, wiedząc, że wiadomość zostanie wysłana od razu lub po uzyskaniu połączenia z internetem.
Jest to przydatna funkcja, ale wymaga, aby proces roboczy usługi był aktywny przez cały czas trwania pobierania. Nie stanowi to problemu w przypadku krótkich zadań, takich jak wysyłanie wiadomości, ale jeśli zadanie trwa zbyt długo, przeglądarka zakończy działanie service workera, ponieważ w przeciwnym razie stanowiłoby to zagrożenie dla prywatności użytkownika i baterii.
Co zrobić, jeśli chcesz pobrać coś, co może zająć dużo czasu, np. film, podcasty lub poziomy gry? Do tego służy pobieranie w tle.
Interfejs Background Fetch jest domyślnie dostępny od Chrome 74.
Oto 2-minutowa prezentacja pokazująca tradycyjny stan rzeczy w porównaniu z używaniem pobierania w tle:
Jak to działa
Pobieranie w tle działa w ten sposób:
- Informujesz przeglądarkę, aby wykonała grupę pobrań w tle.
- Przeglądarka pobiera te elementy i wyświetla użytkownikowi postęp.
- Gdy pobieranie się zakończy lub nie powiedzie, przeglądarka otworzy proces roboczy usługi i wyśle zdarzenie, aby poinformować Cię o tym, co się stało. W tym miejscu możesz zdecydować, co zrobić z odpowiedziami.
Jeśli po kroku 1 użytkownik zamknie strony Twojej witryny, nic się nie stanie – pobieranie będzie kontynuowane. Ponieważ pobieranie jest dobrze widoczne i można je łatwo przerwać, nie ma obaw o prywatność związanych ze zbyt długim zadaniem synchronizacji w tle. Ponieważ service worker nie działa nieustannie, nie ma obawy, że może nadużywać systemu, np. wydobywać bitcoiny w tle.
Na niektórych platformach (np. Androidzie) przeglądarka może się zamknąć po kroku 1, ponieważ może przekazać pobieranie danych systemowi operacyjnemu.
Jeśli użytkownik rozpocznie pobieranie w trybie offline lub przejdzie w tryb offline w trakcie pobierania, pobieranie w tle zostanie wstrzymane i wznowione później.
Interfejs API
Wykrywanie funkcji
Jak w przypadku każdej nowej funkcji, musisz sprawdzić, czy przeglądarka ją obsługuje. W przypadku pobierania w tle wystarczy:
if ('BackgroundFetchManager' in self) {
// This browser supports Background Fetch!
}
Rozpoczynanie pobierania w tle
Główny interfejs API jest powiązany z rejestracją skryptu service worker, więc najpierw zarejestruj skrypt service worker. Następnie:
navigator.serviceWorker.ready.then(async (swReg) => {
const bgFetch = await swReg.backgroundFetch.fetch('my-fetch', ['/ep-5.mp3',