Synchronizuj dane aplikacji internetowej w tle, aby zwiększyć wygodę korzystania z aplikacji
Czy kiedykolwiek wystąpiła u Ciebie któraś z poniższych sytuacji?
- Jazda pociągiem lub metrem przy niestabilnym lub braku połączenia.
- Ograniczenie przez operatora po obejrzeniu zbyt wielu filmów
- Życie w kraju, w którym przepustowość jest trudno nadążyć za popytem
Jeśli tak, to z pewnością czuliście frustrację określone czynności w internecie, i zastanawialiśmy się, dlaczego aplikacje na konkretnych platformach tak często radzą sobie lepiej. w takich sytuacjach. Aplikacje działające na określonych platformach mogą pobierać aktualne treści, np. artykuły informacyjne lub pogodę informacji z wyprzedzeniem. Nawet jeśli w metrze nie ma sieci, możesz wiadomości.
Okresowa synchronizacja w tle umożliwia okresową synchronizację aplikacji internetowych danych w tle, co przybliża aplikacje internetowe do działania .
Wypróbuj
Możesz wypróbować okresową synchronizację w tle, korzystając z prezentacji na żywo Przed użyciem upewnij się, że:
- Używasz Chrome 80 lub nowszej wersji.
- Ty instalacja aplikację internetową, zanim włączysz okresową synchronizację w tle.
Pojęcia i wykorzystanie
Okresowa synchronizacja w tle pozwala wyświetlać aktualne treści, gdy progresywna aplikacja internetowa działa lub uruchomiono stronę wspieraną przez skrypt service worker. Odbywa się to przez pobranie danych w w tle, gdy aplikacja lub strona nie są używane. Uniemożliwi to aplikacji treści, które nie są odświeżane po uruchomieniu. Na razie zapobiega wyświetlaniu w aplikacji wskaźnika postępu przed odświeżeniem.
Bez okresowej synchronizacji w tle aplikacje internetowe muszą używać alternatywnych metod, pobrać dane. Typowym przykładem jest używanie powiadomienia push do wybudzania usługi. . Przerwanemu przez użytkownika komunikatowi np. „Dostępne są nowe dane” Aktualizacja danych jest zasadniczo efektem ubocznym. Nadal masz możliwość korzystania z powiadomień push w przypadku naprawdę ważnych informacji, takich jak aktualności.
Okresową synchronizację w tle można łatwo pomylić z synchronizacją w tle. Chociaż mają podobne nazwy, różnią się od siebie ich zastosowaniami. Poza innymi rzeczami synchronizacji w tle używa się najczęściej do ponownego wysyłania danych na serwer, poprzednie żądanie zakończyło się niepowodzeniem.
Odpowiednie zaangażowanie użytkowników
Nieprawidłowo wykonane – okresowa synchronizacja w tle może niepotrzebnie zużywać i zasobami Google Cloud. Przed opublikowaniem przeglądarka Chrome przeprowadziła okres próbny, aby czy był on słuszny. W tej sekcji opisujemy niektóre decyzje projektowe Chrome w celu zapewnienia jak największej przydatności tej funkcji.
Pierwszą decyzją podjętą w Chrome było to, że aplikacja internetowa może używać synchronizacji w tle, jeśli użytkownik zainstalował ją na swoim urządzeniu i uruchomiła ją jako odrębną aplikację. Okresowa synchronizacja w tle jest niedostępna w kontekście zwykłej karty w Chrome.
Poza tym Chrome nie chce, aby nieużywane lub rzadko używane aplikacje internetowe
zużywają baterię lub dane, Chrome zaprojektował okresową synchronizację w tle,
będą musieli na niej zarabiać. Konkretnie:
Chrome używa wyniku zaangażowania w witrynie
(about://site-engagement/
), aby określić, czy i jak często mogą być przeprowadzane okresowe synchronizacje w tle.
dla danej aplikacji internetowej. Inaczej mówiąc, zdarzenie periodicsync
nie zostanie w ogóle uruchomione, chyba że zdarzenie związane z zaangażowaniem
wynik jest większy od zera, a jego wartość wpływa na częstotliwość, z jaką
Wywoływane zdarzenie: periodicsync
. Dzięki temu jedyne aplikacje synchronizujące się
to te, z których aktywnie korzystasz.
Okresowa synchronizacja w tle ma pewne podobieństwa z istniejącymi interfejsami API oraz na popularnych platformach. Na przykład jednorazowa synchronizacja w tle oraz powiadomienia push pozwalają wydłużyć działanie logiki aplikacji internetowej (dzięki skrypt service worker) po zamknięciu strony przez użytkownika. Na większości platform często mają zainstalowane aplikacje, które okresowo korzystają z sieci w tle, aby zapewnić większy komfort użytkownikom w przypadku krytycznych aktualizacji, pobierania treści z wyprzedzeniem, synchronizowania danych itd. Podobnie okresowa synchronizacja w tle Wydłuża okres przechowywania logiki aplikacji internetowej tak, aby uruchamiała się regularnie co może zająć kilka minut.
Jeśli przeglądarka pozwoliła na występowanie tego błędu często i bez ograniczeń, może budzić pewne obawy dotyczące prywatności. Oto jak Chrome rozwiązał ten problem ryzyko okresowej synchronizacji w tle:
- Synchronizacja w tle działa tylko w sieci, w której urządzenie które były wcześniej połączone. Chrome zaleca, by łączyć się tylko z sieciami obsługiwanymi przez wiarygodnych podmiotów.
- Tak jak w przypadku każdej komunikacji internetowej, okresowa synchronizacja w tle ujawnia adres IP adres klienta, serwer, z którym komunikuje się, oraz nazwa serwera. Aby ograniczyć ekspozycję do mniejszości, gdyby aplikacja synchronizowana, gdy działała na pierwszym planie, przeglądarka ogranicza częstotliwość jej tło synchronizuje się zgodnie z częstotliwością używania jej przez użytkownika. Jeśli osoba przestaje często korzystać z aplikacji, okresowa synchronizacja w tle; przestanie się aktywować. To lepsze rozwiązanie w porównaniu z obecnym statusem w przypadku platform aplikacji.
Kiedy można go używać?
Zasady korzystania różnią się w zależności od przeglądarki. Podsumowując, Chrome wstawia te wymagania dotyczące okresowej synchronizacji w tle:
- Konkretny wynik zaangażowania użytkownika.
- Obecność poprzednio używanej sieci.
Czas synchronizacji nie jest kontrolowany przez programistów. częstotliwość synchronizacji będzie zależała od tego, jak często aplikacja jest używana. (Pamiętaj, że aplikacje działające na poszczególnych platformach tego nie robią). Zajmuje się też mocą urządzenia, stan połączenia.
Kiedy należy go używać?
Gdy mechanizm Service Worker obudzi się, aby obsłużyć zdarzenie periodicsync
, masz już
możliwość zażądania danych, ale nie obowiązek do tego. Obsługa
musisz wziąć pod uwagę warunki sieciowe i dostępne miejsce na dane
rozważanie zakupu i pobieranie w odpowiedzi różnej ilości danych. Za pomocą
następujące zasoby, które mogą okazać się pomocne:
- Interfejs Network Information API
- Wykrywam tryb oszczędzania danych
- Szacowanie dostępnego miejsca na dane
Uprawnienia
Po zainstalowaniu skryptu service worker użyj Uprawnienia
API do wysyłania zapytań
za periodic-background-sync
. Możesz to zrobić w oknie lub
kontekstu skryptu service worker.
const status = await navigator.permissions.query({
name: 'periodic-background-sync',
});
if (status.state === 'granted') {
// Periodic background sync can be used.
} else {
// Periodic background sync cannot be used.
}
Rejestrowanie synchronizacji okresowej
Jak już wspomnieliśmy, okresowa synchronizacja w tle wymaga skryptu service worker. Odzyskaj
PeriodicSyncManager
z użyciem ServiceWorkerRegistration.periodicSync
i wywołaj
register()
. Rejestracja wymaga tagu i minimalnej liczby
interwał synchronizacji (minInterval
). Tag identyfikuje zarejestrowaną synchronizację
co umożliwia zarejestrowanie wielu synchronizacji. W przykładzie poniżej nazwa tagu to
'content-sync'
i minInterval
to jeden dzień.
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
try {
await registration.periodicSync.register('content-sync', {
// An interval of one day.
minInterval: 24 * 60 * 60 * 1000,
});
} catch (error) {
// Periodic background sync cannot be used.
}
}
Weryfikacja rejestracji
Wywołaj funkcję periodicSync.getTags()
, aby pobrać tablicę tagów rejestracji.
poniższy przykład używa nazw tagów do potwierdzenia, że aktualizacja pamięci podręcznej jest aktywna. Pozwoli to uniknąć
Aktualizuję.
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
const tags = await registration.periodicSync.getTags();
// Only update content if sync isn't set up.
if (!tags.includes('content-sync')) {
updateContentOnPageLoad();
}
} else {
// If periodic background sync isn't supported, always update.
updateContentOnPageLoad();
}
Możesz też użyć narzędzia getTags()
, aby wyświetlić listę aktywnych rejestracji w witrynie.
na stronie ustawień aplikacji, aby użytkownicy mogli włączyć lub wyłączyć określone typy
aktualizacje.
Reagowanie na okresowe zdarzenie synchronizacji w tle
Aby reagować na okresowe zdarzenie synchronizacji w tle, dodaj zdarzenie periodicsync
do skryptu service worker. Przekazany do niej obiekt event
będzie zawierać
Parametr tag
pasujący do wartości użytej podczas rejestracji. Jeśli na przykład plik
zarejestrowano okresową synchronizację w tle z nazwą 'content-sync'
, a następnie
event.tag
będzie mieć 'content-sync'
.
self.addEventListener('periodicsync', (event) => {
if (event.tag === 'content-sync') {
// See the "Think before you sync" section for
// checks you could perform before syncing.
event.waitUntil(syncContent());
}
// Other logic for different tags as needed.
});
Wyrejestrowywanie synchronizacji
Aby zakończyć zarejestrowaną synchronizację, wywołaj periodicSync.unregister()
, podając nazwę
synchronizację, którą chcesz wyrejestrować.
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
await registration.periodicSync.unregister('content-sync');
}
Interfejsy
Oto krótkie omówienie interfejsów dostępnych w ramach raportu okresowego Interfejs API synchronizacji.
PeriodicSyncEvent
Przekazuje do modułu obsługi zdarzeńServiceWorkerGlobalScope.onperiodicsync
w przez przeglądarkę.PeriodicSyncManager
Rejestruje i wyrejestrowuje okresowe synchronizacje oraz udostępnia tagi dla zarejestrowanych synchronizacji. Pobierz instancję tej klasy z instancji ServiceWorkerRegistration.periodicSync usłudze.ServiceWorkerGlobalScope.onperiodicsync
Rejestruje moduł obsługi, który otrzymujePeriodicSyncEvent
.ServiceWorkerRegistration.periodicSync
Zwraca odwołanie doPeriodicSyncManager
.
Przykład
Aktualizowanie treści
W tym przykładzie użyto okresowej synchronizacji w tle do pobierania i zapisywania w pamięci podręcznej aktualnych artykułów z witryny z wiadomościami lub bloga. Zwróć uwagę na nazwę tagu, która wskazuje rodzaj tej synchronizacji ('update-articles'
). Wywołanie updateArticles()
jest zawartym w elemencie event.waitUntil()
, więc skrypt service worker nie zakończy działania, dopóki artykuły nie zostaną pobrane i zapisane.
async function updateArticles() {
const articlesCache = await caches.open('articles');
await articlesCache.add('/api/articles');
}
self.addEventListener('periodicsync', (event) => {
if (event.tag === 'update-articles') {
event.waitUntil(updateArticles());
}
});
Dodawanie okresowej synchronizacji w tle do istniejącej aplikacji internetowej
Ten zestaw zmian był niezbędny, aby dodać okresową synchronizację w tle z istniejącą aplikacją PWA. Ten przykład zawiera kilka przydatnych instrukcji rejestrowania, które opisują stan okresowej synchronizacji w tle z aplikacją internetową.
Debugowanie
Uzyskanie pełnego obrazu okresowej synchronizacji w tle może być wyzwaniem. podczas testowania lokalnego. Informacje o aktywnych rejestracjach, przybliżona synchronizacja i odstępy czasu, a dzienniki wcześniejszych zdarzeń synchronizacji dostarczają cennego kontekstu podczas debugowania zachowanie aplikacji internetowej. Na szczęście wszystkie te informacje dzięki eksperymentalnej funkcji w Narzędziach deweloperskich w Chrome.
Nagrywanie lokalnej aktywności
Sekcja Okresowa synchronizacja w tle w Narzędziach deweloperskich skupia się na kluczowych zdarzeniach. w okresowym cyklu życia synchronizacji w tle: zarejestrowanie się w celu synchronizacji, synchronizacji w tle i wyrejestrowania. Aby uzyskać informacje o tych zdarzeniach, kliknij Rozpocznij nagrywanie.
Podczas nagrywania w Narzędziach deweloperskich pojawią się pozycje odpowiadające zdarzeniom, kontekst i metadane dla każdego z nich.
Po jednokrotnym włączeniu nagrywania będzie ono aktywne przez maksymalnie 3 dni. dzięki którym Narzędzia deweloperskie mogą rejestrować informacje na potrzeby debugowania lokalnego związane z synchronizacją w tle. które mogą mieć miejsce nawet w kilku godzinach w przyszłości.
Symuluję zdarzenia
Nagrywanie aktywności w tle może być pomocne, ale zdarzają się sytuacje,
chcesz natychmiast przetestować moduł obsługi periodicsync
, bez czekania na
aby było uruchamiane z normalną częstotliwością.
Możesz to zrobić w sekcji Skrypty service worker w panelu Aplikacje w Narzędzia deweloperskie w Chrome. W polu Synchronizacja okresowa możesz podać tag zdarzenia i wywoływać je dowolną liczbę razy.
Korzystanie z interfejsu Narzędzi deweloperskich
Od Chrome 81 w interfejsie będzie widoczna sekcja Okresowa synchronizacja w tle Panel aplikacji Narzędzi deweloperskich.