Entladen-Ereignis wird verworfen

Das unload-Ereignis wird nach und nach eingestellt. Dazu wird die Standardeinstellung schrittweise geändert, sodass unload-Handler auf Seiten nicht mehr ausgelöst werden, es sei denn, eine Seite hat explizit ihre Reaktivierung aktiviert.

Zeitplan für die Einstellung

Wir haben festgestellt, dass sich das Unload-Verhalten wahrscheinlich schon ab Januar 2019 ändern wird, als wir angekündigt haben, einen Back-Forward-Cache zu implementieren. Parallel zur Implementierung führten wir eine größere Reichweite durch, was zu einem erheblichen Rückgang der Unload-Nutzung führte. Als Ergänzung zu dieser Einführung bieten wir außerdem Möglichkeiten an, die Auswirkungen der Einstellung des Unloads von Chrome 115 zu testen:

Nach diesen Einrichtungs- und Testphasen erwarten wir mit der vorläufigen Einstellung Folgendes:

  • Eine auf einen Bereich reduzierte Phase, in der das Entladen für die 50 beliebtesten Websites nach und nach nicht mehr funktioniert (Referenz zum Zeitpunkt der Erstellung dieses Dokuments).
    • Ab 1% der Nutzer von Chrome 120 (Ende November 2023).
    • Ende bei 100% der Nutzenden bis Ende des 3. Quartals 2024
  • Darüber hinaus beabsichtigen wir, ab dem 3. Quartal 2024 eine allgemeine Phase zu starten, in der das Entfernen auf allen Websites nach und nach eingestellt wird – beginnend mit 1% der Nutzer*innen und bis zum Ende des 1. Quartals 2025 bei 100% der Nutzer*innen enden.

Hinweis: Wir bieten auch ein Menü mit Deaktivierungsoptionen für den Fall, dass dieser Zeitplan für die vorläufige Einstellung nicht ausreicht, um nach dem Entladen zu migrieren. Wir möchten diese vorläufige Einstellung nutzen, um einen Zeitplan für die letzte Phase (vollständige Einstellung von Unload) festzulegen, in der diese Deaktivierungen entfernt oder reduziert werden.

Zeitachse der Einstellung des Unload-Vorgangs.

Hintergrund

unload wurde so entwickelt, dass sie beim Entladen des Dokuments ausgelöst wird. Theoretisch kann sie verwendet werden, um Code immer dann auszuführen, wenn ein Nutzer eine Seite verlässt, oder als Rückruf am Ende der Sitzung.

Szenarien, in denen dieses Ereignis am häufigsten verwendet wurde:

  • Nutzerdaten speichern: Sie können Daten speichern, bevor Sie die Seite verlassen.
  • Bereinigungsaufgaben ausführen: Schließen Sie alle geöffneten Ressourcen, bevor Sie die Seite verlassen.
  • Analysedaten senden: Es werden Daten zu den Nutzerinteraktionen am Ende der Sitzung gesendet.

Allerdings ist das unload-Ereignis äußerst unzuverlässig.

In Chrome und Firefox für Computer ist unload relativ zuverlässig, wirkt sich aber negativ auf die Leistung der Website aus, da die Verwendung von bfcache (Back-Forward-Cache) verhindert wird.

In mobilen Browsern funktioniert unload häufig nicht, da Tabs häufig im Hintergrund geladen und dann abgebrochen werden. Aus diesem Grund priorisieren Browser den bfcache auf Mobilgeräten gegenüber unload und sind somit noch unzuverlässiger. Safari verwendet dieses Verhalten auch auf Desktop-Computern.

Das Chrome-Team glaubt, dass ein mobiles Modell, bei dem bfcache auf Computern priorisiert wird, störender sein würde, da es auch dort unzuverlässiger wäre, wenn dies in Chrome (und Firefox) bisher relativ zuverlässig war.unload Stattdessen ist das Ziel von Chrome, das unload-Ereignis vollständig zu entfernen. Bis dahin bleibt die Funktion auf Computern zuverlässig für diejenigen, die sich ausdrücklich gegen die Einstellung entschieden haben.

Warum sollte das Ereignis unload eingestellt werden?

Die Einstellung von unload ist ein wichtiger Schritt, um das Web, in dem wir leben, besser zu erkennen. Das unload-Ereignis vermittelt ein falsches Gefühl der Kontrolle des Anwendungslebenszyklus, was in der modernen Computerwelt immer unwahrer wird, wie wir im Web surfen.

Mobile Betriebssysteme frieren häufig ein oder entladen Webseiten, um Speicher zu sparen, und Desktop-Browser tun dies inzwischen immer mehr aus denselben Gründen. Auch ohne Eingriffe in das Betriebssystem wechseln Nutzer häufig zwischen Tabs und löschen alte Tabs, ohne dass sie dazu „Seiten verlassen“.

Das unload-Ereignis als veraltet zu entfernen, ist eine Erkenntnis, dass wir als Webentwickler dafür sorgen müssen, dass unser Paradigma dem der realen Welt entspricht. Sie dürfen nicht von veralteten Konzepten abhängig sein, die nicht mehr wahr sind, falls sie das jemals getan haben sollten.

Alternativen zu unload-Veranstaltungen

Anstelle von unload wird empfohlen:

  • visibilitychange: Mit diesem Parameter legen Sie fest, wann sich die Sichtbarkeit einer Seite ändert. Dieses Ereignis tritt ein, wenn der Nutzer zwischen Tabs wechselt, das Browserfenster minimiert oder eine neue Seite öffnet. Der hidden-Status ist die letzte zuverlässige Zeit zum Speichern von App- und Nutzerdaten.
  • pagehide: Damit wird ermittelt, wann der Nutzer die Seite verlassen hat. Dieses Ereignis tritt ein, wenn der Nutzer die Seite verlässt, die Seite neu lädt oder das Browserfenster schließt. Das pagehide-Ereignis wird nicht ausgelöst, wenn die Seite einfach minimiert oder zu einem anderen Tab gewechselt wird. Hinweis: Da eine Seite durch pagehide nicht für den Back-Forward-Cache zugelassen wird, kann sie möglicherweise wiederhergestellt werden, nachdem dieses Ereignis ausgelöst wurde. Wenn Sie in diesem Termin Ressourcen bereinigen, müssen sie möglicherweise bei der Seitenwiederherstellung wiederhergestellt werden.

Das Ereignis beforeunload hat einen etwas anderen Anwendungsfall als unload, da es ein abgebrochenes Ereignis ist. Sie wird häufig verwendet, um Nutzer vor nicht gespeicherten Änderungen zu warnen, wenn sie die Seite verlassen. Dieses Ereignis ist außerdem unzuverlässig, da es nicht ausgelöst wird, wenn ein Hintergrund-Tab gelöscht wird. Es wird empfohlen, die Verwendung von beforeunload einzuschränken und nur bedingt hinzuzufügen. Verwenden Sie stattdessen für die meisten unload-Ersetzungen die oben genannten Ereignisse.

Weitere Informationen finden Sie in dieser Empfehlung, den unload-Handler niemals zu verwenden.

Nutzung von unload erkennen

Es gibt verschiedene Tools, mit denen du die Auftritte des unload-Ereignisses auf Seiten finden kannst. So können Websites feststellen, ob sie dieses Ereignis verwenden – entweder in ihrem eigenen Code oder über Bibliotheken – und können von der bevorstehenden Einstellung betroffen sein.

Chrome-Entwicklertools

Die Chrome-Entwicklertools umfassen eine back-forward-cache-Prüfung, mit der du Probleme erkennen kannst, durch die deine Seite möglicherweise nicht für den Back-Forward-Cache verwendet werden kann. Dies schließt die Verwendung des unload-Handlers ein.

So testen Sie den Back-Forward-Cache:

  1. Öffne auf deiner Seite die Entwicklertools und gehe zu Anwendung > Hintergrunddienste > Back-Forward-Cache.

  2. Klicken Sie auf Back-Forward-Cache testen. Chrome leitet Sie automatisch zu chrome://terms/ und zurück zu Ihrer Seite weiter. Alternativ können Sie auf die Zurück- und Vorwärts-Schaltflächen des Browsers klicken.

Wenn Ihre Seite nicht für das Back-Forward-Caching geeignet ist, wird auf dem Tab Back-Forward-Cache eine Liste der Probleme angezeigt. Unter Umsetzbar sehen Sie, ob Sie unload verwenden:

Das Back-Forward-Cache-Testtool in den Chrome-Entwicklertools zeigt, dass ein Unload-Handler verwendet wurde.

Reporting API

Die Reporting API kann in Verbindung mit einer schreibgeschützten Berechtigungsrichtlinie verwendet werden, um die Nutzung von unload durch Ihre Websitenutzer zu erkennen.

Weitere Informationen

Bfcache notRestoredReasons-API

Das Attribut notRestoredReasons, das der Klasse PerformanceNavigationTiming hinzugefügt wurde, gibt Informationen dazu, ob und aus welchem Grund das Verwenden des bfcache durch Dokumente blockiert wurde. Eine Nutzungsanleitung finden Sie hier. Hier sehen Sie ein Beispiel dafür, wie die Antwortobjektwarnung eines vorhandenen unload-Listeners aussieht:

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

Zugriff auf unload steuern

Chrome wird das unload-Ereignis schrittweise einstellen. In der Zwischenzeit können Sie verschiedene Tools verwenden, um dieses Verhalten zu steuern und sich auf die bevorstehende Einstellung vorzubereiten. Denken Sie daran, dass Sie sich langfristig nicht auf diese Methoden verlassen und stattdessen so schnell wie möglich zu den Alternativen migrieren sollten.

Mit den folgenden Optionen können Sie unload-Handler aktivieren oder deaktivieren, um zu testen, wie Ihre Website ohne sie funktioniert. So sind Sie auf die bevorstehende Einstellung vorbereitet. Es gibt verschiedene Arten von Richtlinien:

  • Berechtigungsrichtlinie: Dies ist eine Plattform-API, mit der Websiteinhaber den Zugriff auf Funktionen auf Website- oder Seitenebene mithilfe von HTTP-Headern steuern können.
  • Unternehmensrichtlinien: Tools, mit denen IT-Administratoren Chrome für ihre Organisation oder ihr Unternehmen konfigurieren können. Diese lassen sich über ein Admin-Steuerfeld wie die Admin-Konsole konfigurieren.
  • Chrome-Flags: Damit können einzelne Entwickler die Einstellung von unload ändern, um die Auswirkungen auf verschiedenen Websites zu testen.

Berechtigungsrichtlinie

Aus Chrome 115 wurde eine Berechtigungsrichtlinie hinzugefügt, die es Websites ermöglicht, unload-Handler zu deaktivieren und sofort vom bfcache zu profitieren und so die Websiteleistung zu verbessern. Diese Beispiele zeigen, wie Sie dies für Ihre Website festlegen. So können Websites die Einstellung von unload vorantreiben.

Dies wird in Chrome 117 erweitert, damit Websites umgekehrt werden und weiterhin versuchen können, unload-Handler auszulösen, da Chrome die Standardeinstellung so ändert, dass diese in Zukunft nicht ausgelöst werden. Diese Beispiele zeigen, wie Sie weiterhin zulassen, dass Unload-Handler für Ihre Website ausgelöst werden. Dieses Opt-in bleibt nicht für immer bestehen und sollte verwendet werden, um Websites Zeit für die Migration von unload-Handlern zu geben.

Unternehmensrichtlinie

Unternehmen, deren Software auf das unload-Ereignis angewiesen ist, um ordnungsgemäß zu funktionieren, können mit der Richtlinie ForcePermissionPolicyUnloadDefaultEnabled verhindern, dass ihre verwalteten Geräte nach und nach eingestellt werden. Wenn Sie diese Richtlinie aktivieren, ist unload weiterhin standardmäßig für alle Ursprünge aktiviert. Auf einer Seite können auf Wunsch trotzdem strengere Richtlinien festgelegt werden. Wie bei der Deaktivierung der Berechtigungsrichtlinie ist auch dieses Tool ein Tool zum Minimieren potenzieller funktionsgefährdender Änderungen. Es sollte jedoch nicht unbegrenzt verwendet werden.

Chrome-Flags und Befehlszeilenparameter

Neben der Unternehmensrichtlinie können Sie die Einstellung für einzelne Nutzer über die Chrome-Flags und Befehlszeilen-Switches deaktivieren:

Wenn Sie chrome://flags/#deprecate-unload auf enabled setzen, wird die Standardeinstellung für die Einstellung übernommen und es wird verhindert, dass unload-Handler ausgelöst werden. Sie können zwar weiterhin für einzelne Websites über die Berechtigungsrichtlinie überschrieben werden, werden aber standardmäßig weiterhin ausgelöst.

Diese Einstellungen können auch über Befehlszeilenschalter gesteuert werden.

Vergleich der Optionen

In der folgenden Tabelle sind die verschiedenen Verwendungsmöglichkeiten der zuvor erläuterten Optionen zusammengefasst:

Einstellung vorantreiben Einstellung voranbringen (mit Ausnahmen) Einstellung verhindern, um den Zeitpunkt für eine Migration zu sichern
Berechtigungsrichtlinie
(gilt für Seiten/Websites)
Ja Ja Ja
Unternehmensrichtlinie
(gilt für Geräte)
Nein Nein Ja
Chrome-Flags
(gilt für einzelne Nutzer)
Ja Nein Nein
Befehlszeileneinstellungen in Chrome
(gilt für einzelne Nutzer)
Ja Nein Ja

Fazit

unload-Handler werden nicht mehr unterstützt. Sie sind schon lange unzuverlässig und werden nicht in allen Fällen ausgelöst, in denen ein Dokument zerstört wird. Außerdem sind unload-Handler nicht mit bfcache kompatibel.

Websites, für die derzeit unload-Handler verwendet werden, sollten sich auf die bevorstehende Einstellung vorbereiten, indem sie vorhandene unload-Handler testen, sie entfernen oder migrieren oder als letzte Option die Einstellung verzögern, wenn mehr Zeit benötigt wird.

Danksagungen

Vielen Dank an Kenji Baheux, Fergal Daly, Adriana Jara und Jeremy Wagner für die Hilfe bei der Lektüre dieses Artikels.

Hero-Image von Anja Bauermann auf Unsplash