Wycofuję zdarzenie unload

Zdarzenie unload będzie stopniowo wycofywane przez stopniową zmianę wartości domyślnej, tak aby moduły obsługi unload przestały się uruchamiać na stronach, chyba że na danej stronie wyrażono zgodę na ich ponowne włączenie.

Harmonogram wycofywania

Zauważyliśmy, że już w styczniu 2019 roku, gdy zapowiedzieliśmy wprowadzenie pamięci podręcznej stanu strony internetowej, w obszarze wyładowywania prawdopodobnie mogły się zmienić. Równolegle z pracami wdrożeniowymi przeprowadziliśmy szeroko zakrojony zasięg, który doprowadził do znacznego spadku wykorzystania wyładowywania. Aby uzupełnić tę kampanię, zaczęliśmy też testować efekty wycofania plików z Chrome 115:

Oto, jak planujemy wycofać funkcję częściowego wycofania po tych etapach kontaktu i okresu próbnego:

  • Etap o ograniczonym zakresie, w którym w przypadku 50 najpopularniejszych witryn przestanie działać (odniesienie w chwili pisania).
    • Od 1% użytkowników Chrome 120 (koniec listopada 2023 r.).
    • Zakończenie z 100% użytkowników do końca III kwartału 2024 r.
  • Oprócz tego w III kwartale 2024 r. zamierzamy rozpocząć fazę ogólną, w ramach której usuwanie wczytane z aplikacji przestanie działać na wszystkich stronach. Proces ten będzie obejmował 1% użytkowników, a do końca pierwszego kwartału 2025 r. obejmie 100% użytkowników.

Pamiętaj, że udostępniamy też menu z opcjami rezygnacji na wypadek, gdy ten harmonogram stopniowego wycofywania nie zapewnia wystarczającej ilości czasu na migrację. Naszym celem jest wykorzystanie płynnego wycofania w ramach ostatniego etapu (całkowite wycofanie wycofywania), w którym te opcje rezygnacji zostaną usunięte lub ograniczone.

Harmonogram wycofywania wyładowywania.

Tło

unload ma uruchamiać się podczas wyładowywania dokumentu. Teoretycznie można go użyć do uruchomienia kodu za każdym razem, gdy użytkownik opuści stronę, lub jako wywołanie zwrotne na koniec sesji.

Oto przykładowe sytuacje, w których to zdarzenie było najczęściej używane:

  • Zapisywanie danych użytkowników: zapisz dane, zanim opuścisz stronę.
  • Wykonywanie zadań związanych z czyszczeniem: przed opuszczeniem strony zamknij otwarte zasoby.
  • Wysyłanie statystyk: wysyłanie danych związanych z interakcjami użytkowników na koniec sesji.

Jednak zdarzenie unload jest bardzo zawodne.

W przeglądarkach Chrome i Firefoksie na komputerze przeglądarka unload jest dość niezawodna, ale ma negatywny wpływ na wydajność strony, ponieważ uniemożliwia korzystanie z pamięci podręcznej stanu strony internetowej.

W przeglądarkach mobilnych unload często nie działa, ponieważ karty często działają w tle, a potem zamykają się. Z tego powodu przeglądarki w przypadku urządzeń mobilnych traktują priorytetowo pamięć podręczną stanu strony internetowej (bfcache), a nie unload. Safari wykorzystuje również to zachowanie na komputerach.

Zespół Chrome uważa, że priorytetowe traktowanie pamięci podręcznej stanu strony internetowej (bfcache) zamiast unload na komputerach może zaszkodzić działaniu tej strony, ponieważ w ten sposób usługa również będzie bardziej zawodna, ponieważ w Chrome (i w Firefoksie) dotychczas była tak niezawodna. Celem Chrome jest całkowite usunięcie zdarzenia unload. Do tego czasu będzie on niezawodny w przypadku użytkowników komputerów, którzy zrezygnowali z jego wycofania.

Dlaczego chcesz wycofać zdarzenie unload?

Wycofanie usługi unload to kluczowy krok w kierunku szerszego uznania internetu, w którym obecnie żyjemy. Zdarzenie unload daje fałszywe poczucie kontroli nad cyklem życia aplikacji, które coraz częściej nie jest zgodne ze sposobem, w jaki przeglądamy internet we współczesnym świecie komputerów.

Mobilne systemy operacyjne często zawieszają się lub wyładowują strony internetowe, by oszczędzać pamięć. Przeglądarki na komputerach coraz częściej robią to z tych samych powodów. Nawet bez interwencji systemu operacyjnego użytkownicy często przełączają się między kartami i zamykają stare karty, nie opuszczając stron.

Usunięcie zdarzenia unload jako zdezaktualizowanego to dowód, że jako twórcy stron internetowych musimy dopilnować, aby nasz model odpowiadał temu w świecie rzeczywistym i nie polegał na przestarzałych koncepcjach, które już nie są aktualne – o ile w ogóle tak się stało.

Alternatywy dla wydarzenia unload

Zamiast unload zalecamy użycie:

  • visibilitychange: aby określić, kiedy zmieni się widoczność strony. To zdarzenie ma miejsce, gdy użytkownik przełącza karty, minimalizuje okno przeglądarki lub otwiera nową stronę. Rozważ stan hidden jako ostatni niezawodny czas zapisywania danych aplikacji i użytkownika.
  • pagehide: umożliwia sprawdzenie, kiedy użytkownik opuścił stronę. Dzieje się tak, gdy użytkownik opuści stronę, ponownie ją załaduje lub zamknie okno przeglądarki. Zdarzenie pagehide nie jest wywoływane, gdy strona jest po prostu zminimalizowana lub przełączana na inną kartę. Pamiętaj, że ponieważ parametr pagehide nie powoduje, że strona nie kwalifikuje się do korzystania z pamięci podręcznej stanu strony internetowej, może się zdarzyć, że po wywołaniu tego zdarzenia uda się ją przywrócić. Jeśli usuwasz zasoby w tym wydarzeniu, być może trzeba będzie je przywrócić podczas przywracania strony.

Zdarzenie beforeunload ma trochę inny przypadek użycia niż zdarzenie unload, ponieważ można go anulować. Często używa się go, aby ostrzegać użytkowników o niezapisanych zmianach podczas opuszczania aplikacji. To zdarzenie jest także zawodne, ponieważ nie uruchomi się po wyłączeniu karty w tle. Zalecamy ograniczenie używania pola beforeunload i dodanie go tylko warunkowo. W przypadku większości zamienników unload używaj tych zdarzeń.

Więcej informacji znajdziesz w tych poradach na temat rezygnacji z korzystania z modułu unload.

Wykryj użycie aplikacji unload

Aby znaleźć na stronach wystąpienie zdarzenia unload, możesz skorzystać z różnych narzędzi. Dzięki temu witryny mogą sprawdzić, czy korzystają z tego zdarzenia – w swoim kodzie czy za pomocą bibliotek – i to może mieć wpływ na to, czy zbliża się wycofanie tego zdarzenia.

Narzędzia deweloperskie w Chrome

Narzędzia deweloperskie w Chrome zawierają kontrolę back-forward-cache, która pomaga wykrywać problemy, które mogą uniemożliwiać witrynie korzystanie z pamięci podręcznej stanu strony internetowej, w tym korzystanie z modułu unload.

Aby przetestować pamięć podręczną stanu strony internetowej, wykonaj te czynności:

  1. Na stronie otwórz Narzędzia deweloperskie, a potem kliknij Aplikacja > Usługi w tle > Pamięć podręczna stanu strony internetowej.

  2. Kliknij Przetestuj pamięć podręczną stanu strony internetowej. Chrome automatycznie otworzy stronę chrome://terms/ i powrót na swoją stronę. Możesz również kliknąć przyciski Wstecz i Dalej w przeglądarce.

Jeśli Twoja strona nie kwalifikuje się do korzystania z pamięci podręcznej stanu strony internetowej, na karcie Pamięć podręczna stanu strony internetowej znajdziesz listę problemów. W sekcji Przydatne możesz sprawdzić, czy korzystasz z usługi unload:

Narzędzie do testowania pamięci podręcznej stanu strony internetowej w Narzędziach deweloperskich w Chrome z wykorzystaniem modułu obsługi wyładowywania

Interfejs API do raportowania

Interfejs API do raportowania może być używany w połączeniu z zasadami uprawnień tylko do odczytu w celu wykrywania przypadków użycia unload przez użytkowników Twojej witryny.

Więcej informacji znajdziesz w artykule Znajdowanie wyładowań za pomocą interfejsu API do raportowania.

Interfejs API Bfcache notRestoredReasons

Właściwość notRestoredReasons dodana do klasy PerformanceNavigationTiming zawiera informacje o tym, czy dokumentom zablokowano korzystanie z bfcache do nawigacji i dlaczego. Instrukcje, jak to zrobić, znajdziesz tutaj. Oto przykład ostrzeżenia o obiekcie odpowiedzi w istniejącym detektorze unload:

{
   children: [],
   id: null,
   name: null,
   reasons: [
     {"reason", "unload-handler"}
   ],
   src: null,
   url: "https://www.example.com/page/"
}

Kontroluj dostęp do: unload

Chrome będzie stopniowo wycofywać zdarzenie unload. Tymczasem możesz korzystać z różnych narzędzi, aby kontrolować to działanie i przygotować się na nadchodzące wycofanie. Pamiętaj, że nie należy stosować tych technik w dłuższej perspektywie i zaplanuj jak najszybsze przejście na alternatywne rozwiązania.

Podane niżej opcje umożliwiają włączanie i wyłączanie modułów obsługi unload w celu przetestowania, jak witryna działa bez nich. Dzięki temu możesz przygotować się na nadchodzące wycofanie. Istnieją różne typy zasad:

  • Zasady dotyczące uprawnień: to interfejs API platformy, który umożliwia właścicielom witryn kontrolowanie dostępu do funkcji na poziomie witryny lub poszczególnych stron za pomocą nagłówków HTTP.
  • Zasady korporacyjne: narzędzia dla administratorów IT służące do konfigurowania Chrome w organizacji lub firmie. Możesz je skonfigurować w panelu administracyjnym, takim jak konsola administracyjna Google.
  • Flagi Chrome: umożliwia każdemu deweloperowi zmianę ustawienia wycofywania unload, aby przetestować wpływ zmian na różne witryny.

Zasady dotyczące uprawnień

Zasady dotyczące uprawnień dodaliśmy z Chrome 115, aby umożliwić witrynom rezygnację z funkcji obsługi unload i natychmiastowe korzystanie z pamięci podręcznej stanu strony internetowej w celu zwiększenia wydajności witryn. Zapoznaj się z przykładami konfigurowania tej funkcji w witrynie. Dzięki temu witryny będą przygotować się na wycofanie unload.

Zostanie on rozszerzony w Chrome 117, aby umożliwić witrynom odwrotne działanie i wyrazić zgodę na dalsze uruchamianie modułów obsługi unload, ponieważ Chrome zmienia ustawienie domyślne, tak aby w przyszłości nie były już uruchamiane. Zapoznaj się z tymi przykładami, aby nadal zezwalać na uruchamianie w witrynie modułów obsługi wyładowywania. Ta zgoda nie będzie obowiązywać na zawsze i powinna dać witrynom czas na migrację z modułów obsługi unload.

Zasady przedsiębiorstwa

Firmy, których oprogramowanie wymaga do prawidłowego działania zdarzenia unload, mogą za pomocą zasady ForcePermissionPolicyUnloadDefaultEnabled zapobiec stopniowemu wycofywaniu urządzeń kontrolowanych przez nie. Jeśli włączysz tę zasadę, zasada unload będzie nadal domyślnie włączona w przypadku wszystkich źródeł. Strona może nadal ustawić bardziej rygorystyczne zasady. Podobnie jak w przypadku rezygnacji z zasad dotyczących uprawnień, jest to narzędzie służące do łagodzenia potencjalnych zmian powodujących niezgodność, ale nie należy go używać na stałe.

Flagi Chrome i przełączniki wiersza poleceń

Oprócz zasady firmowej możesz wyłączyć wycofywanie dla poszczególnych użytkowników za pomocą flag Chrome i przełączników wiersza poleceń:

Ustawienie chrome://flags/#deprecate-unload na enabled przywróci domyślne wycofywanie i uniemożliwi uruchamianie modułów obsługi unload. Nadal możesz je zastępować w poszczególnych witrynach zgodnie z zasadami dotyczącymi uprawnień, ale nadal będą się uruchamiać domyślnie.

Tymi ustawieniami można też sterować za pomocą przełączników wiersza poleceń.

Porównanie opcji

W poniższej tabeli podano podsumowanie różnych zastosowań omówionych wcześniej opcji:

Wycofanie wycofywania Wycofanie wycofania (z wyjątkami) Zapobiegaj wycofywaniu, aby zapewnić czas na migrację
Zasada dotycząca uprawnień
(dotyczy stron/witryn)
Tak Tak Tak
Zasady przedsiębiorstwa
(dotyczy urządzeń)
Nie Nie Tak
Flagi Chrome
(dotyczy poszczególnych użytkowników)
Tak Nie Nie
Przełączniki wiersza poleceń Chrome
(dotyczy poszczególnych użytkowników)
Tak Nie Tak

Podsumowanie

Moduły obsługi unload są wycofywane. Ich zawodność przez długi czas była zawodna i nie można zagwarantować, że uruchomią się w każdym przypadku zniszczenia dokumentu. Poza tym moduły obsługi unload są niezgodne z funkcją bfcache.

Witryny, które obecnie używają modułów obsługi unload, powinny przygotować się na nadchodzące wycofanie. W tym celu warto przetestować istniejące moduły obsługi unload, usunąć je lub przenieść albo w ostateczności opóźnić wycofanie, jeśli potrzebne będzie więcej czasu.

Podziękowania

Dziękujemy Kenjim Baheux, Fergalowi Daly, Adrianom Jarę i Jeremy'em Wagnerowi za pomoc w przejrzeniu tego artykułu.

Baner powitalny: Anja Bauermann i film Unsplash