Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die Spekulationsregeln API wurde entworfen, um die Performance für zukünftige Navigationen zu verbessern. Sie zielt auf Dokument-URLs ab, nicht auf spezifische Ressourcendateien, und ist daher sinnvoll für Multi-Page-Anwendungen (MPAs) anstelle von Single-Page-Anwendungen (SPAs).
Die Spekulationsregeln API bietet eine Alternative zu der weit verbreiteten <link rel="prefetch">-Funktion und ist dazu gedacht, die Chrome-exklusive, veraltete <link rel="prerender">-Funktion zu ersetzen. Sie bietet viele Verbesserungen gegenüber diesen Technologien sowie eine ausdrucksstärkere, konfigurierbare Syntax, um festzulegen, welche Dokumente vorgeladen oder vorgerendert werden sollen.
Hinweis: Die Spekulationsregeln API behandelt keine Subressourcenvorladungen; dafür müssen Sie <link rel="prefetch"> verwenden.
Spekulationsregeln können innerhalb von inline <script type="speculationrules">-Elementen und externen Textdateien, die durch den Speculation-Rules Antwortheader referenziert werden, spezifiziert werden. Die Regeln werden als JSON-Struktur angegeben.
Ein Skriptbeispiel:
Spekulationsregeln, die ein <script>-Element verwenden, müssen explizit in der Content-Security-Policy script-src Direktive erlaubt werden, wenn die Seite diese enthält. Dies erfolgt durch das Hinzufügen einer der 'inline-speculation-rules' Quelle, einer Hash-Quelle oder einer Nonce-Quelle.
Ein HTTP-Header-Beispiel:
Die Textressource, die das Spekulationsregeln-JSON enthält, kann einen beliebigen gültigen Namen und eine beliebige Erweiterung haben, muss jedoch mit einem application/speculationrules+json MIME-Typ bereitgestellt werden.
Hinweis: Regeln können sowohl mit einem Inline-Skript als auch mit dem HTTP-Header simultan spezifiziert werden – alle auf ein Dokument angewendeten Regeln werden geparst und der Spekulationsregelnliste des Dokuments hinzugefügt.
Sie spezifizieren ein unterschiedliches Array, um die Regeln für jeden spekulativen Ladetyp zu enthalten (zum Beispiel "prerender" oder "prefetch"). Jede Regel ist in einem Objekt enthalten, das zum Beispiel eine Liste von zu holenden Ressourcen spezifiziert, plus Optionen wie eine explizite Referrer-Policy Einstellung für jede Regel. Beachten Sie, dass vorgerenderte URLs ebenfalls vorgeladen werden.
Siehe <script type="speculationrules"> für eine vollständige Erklärung der verfügbaren Syntax.
Das Einfügen von prefetch-Regeln in ein <script type="speculationrules">-Element oder einen Speculation-Rules-Header führt dazu, dass unterstützende Browser den Antwortkörper der referenzierten Seiten herunterladen, jedoch keine der von der Seite referenzierten Subressourcen. Wenn auf eine vorgeladene Seite navigiert wird, wird sie wesentlich schneller gerendert als wenn sie nicht vorgeladen wurde.
Die Ergebnisse werden in einem pro-Dokument-In-Memory-Cache gehalten. Alle gecachten Vorladungen werden verworfen, wenn Sie die aktuelle Seite verlassen, außer natürlich ein vorgeladenes Dokument, zu dem Sie dann navigieren.
Dies bedeutet, dass, wenn Sie etwas vorladen, zu dem der Benutzer nicht navigiert, dies im Allgemeinen eine Verschwendung von Ressourcen ist, obwohl das Ergebnis den HTTP-Cache füllen kann, wenn Header dies zulassen. Das gesagt, die Vorabkosten eines Prefetches sind viel kleiner als die Vorabkosten eines Prerenders, daher wird empfohlen, das Prefetching breit anzuwenden, zum Beispiel alle bedeutenden Seiten Ihrer Seite vorzuhalten, vorausgesetzt sie sind sicher vorzuholen (siehe Unsichere spekulative Ladebedingungen für mehr Details).
Same-Site und Cross-Site Prefetches funktionieren, aber Cross-Site Prefetches sind begrenzt (siehe "same-site" und "cross-site" für eine Erklärung der Unterschiede zwischen den beiden). Aus Datenschutzgründen funktionieren Cross-Site Prefetches derzeit nur, wenn der Benutzer keine Cookies für die Zielseite gesetzt hat – wir möchten nicht, dass Seiten die Benutzeraktivität über vorgeladene Seiten (die sie unter Umständen nie besuchen) basierend auf vorher gesetzten Cookies verfolgen.
Hinweis: In Zukunft wird ein Opt-In für Cross-Site Prefetches über den Supports-Loading-Mode Header bereitgestellt, aber dies war zum Zeitpunkt des Schreibens noch nicht implementiert (nur ein Cross-Origin, Same-Site Prerendering Opt-In war verfügbar).
Für Browser, die es unterstützen, sollten Spekulationsregeln Prefetch gegenüber älteren Prefetch-Mechanismen bevorzugt werden, namentlich <link rel="prefetch"> und fetch() mit einer priority: "low"-Option. Weil wir wissen, dass Spekulationsregeln Prefetch für Navigationen ist, nicht für allgemeine Ressourcenvorhaltung:
Darüber hinaus hat Spekulationsregelsymbolisierung Prefetch:
Das Einfügen von prerender-Regeln in ein <script type="speculationrules">-Element oder einen Speculation-Rules-Header führt dazu, dass unterstützende Browser den Inhalt in einem unsichtbaren Tab abrufen, rendern und laden, der in einem pro-Dokument-In-Memory-Cache gespeichert wird. Dies schließt das Laden aller Subressourcen ein, das Ausführen aller JavaScript, und sogar das Laden von Subressourcen und Durchführen von Datenabrufen, die von JavaScript gestartet werden. Alle gecachten Prerender und ihre Subressourcen werden verworfen, wenn Sie die aktuelle Seite verlassen, außer natürlich ein prerendertes Dokument, zu dem Sie dann navigieren.
Zukünftige Navigationen zu einem prerenderten Dokument werden nahezu sofort ausgeführt. Der Browser aktiviert den unsichtbaren Tab anstelle des üblichen Navigationsprozesses und ersetzt die alte Vordergrundseite durch die prerenderte Seite. Wenn eine Seite aktiviert wird, bevor sie vollständig prerendert wurde, wird sie im aktuellen Zustand aktiviert und lädt dann weiter, was bedeutet, dass Sie trotzdem einen erheblichen Performancevorteil sehen werden.
Prerendering verwendet Speicher und Netzwerkbandbreite. Wenn Sie etwas prerendern, zu dem der Benutzer nicht navigiert, werden diese verschwendet (obwohl das Ergebnis den HTTP-Cache füllen kann, wenn Header dies zulassen, was eine spätere Verwendung erlaubt). Die Vorabkosten eines Prerenders sind viel größer als die Vorabkosten eines Prefetches, und andere Bedingungen könnten auch dazu führen, dass Inhalte unsicher zum Prerendern sind (siehe Unsichere spekulative Ladebedingungen für mehr Details). Daher wird empfohlen, das Prerendering sparsamer zu verwenden und sorgfältig Fälle zu prüfen, in denen eine hohe Wahrscheinlichkeit besteht, dass die Seite navigiert wird und Sie denken, dass der Vorteil für die Benutzererfahrung die zusätzlichen Kosten wert ist.
Hinweis: Um die Menge an möglichem Ressourcenverschwendung einzuordnen: Ein Prerender verwendet etwa die gleiche Menge an Ressourcen wie das Rendern eines <iframe>.
Hinweis: Viele APIs werden während des Prerenderings/aktiviert automatisch zurückgestellt. Siehe Plattformfunktionen, die während des Prerenderings zurückgestellt oder eingeschränkt sind für mehr Details.
Prerendering ist standardmäßig auf same-origin Dokumente beschränkt. Cross-origin, same-site Prerendering ist möglich – es erfordert, dass das Navigationsziel über den Supports-Loading-Mode Header mit einem Wert von credentialed-prerender eingewilligt wird. Cross-Site Prerendering ist derzeit nicht möglich.
Für Browser, die es unterstützen, sollte die Spekulationsregeln Prerender gegenüber älteren Prerender-Mechanismen bevorzugt werden, nämlich <link rel="prerender">:
Sie können überprüfen, ob die Spekulationsregeln API unterstützt wird, indem Sie den folgenden Code verwenden:
Zum Beispiel möchten Sie Spekulationsregeln für das Vorladen in unterstützenden Browsern einfügen, aber in anderen eine ältere Technologie wie <link rel="prefetch"> verwenden:
Dieser Abschnitt betrachtet verschiedene Möglichkeiten, um festzustellen, ob eine angeforderte Seite vorgeladen oder prerendert wurde.
Vorgeladene und prerenderte Seitenanforderungen werden mit dem Sec-Purpose Anfrage-Header gesendet:
Für Prefetch:
Für Prerender:
Server können basierend auf diesem Header antworten, zum Beispiel um spekulative Ladevorgänge zu protokollieren, anderen Inhalt zurückzugeben oder sogar zu verhindern, dass spekulatives Laden stattfindet. Wenn ein Nicht-Erfolgs-Response-Code zurückgegeben wird (jeder HTTP-Status, der nicht im Bereich von 200 bis 299 nach Umleitungen liegt), dann wird die Seite nicht vorgeladen/vorgerendert. Zusätzlich verhindern die Statuscodes 204 und 205 ebenfalls das Prerendering (aber nicht das Prefetching).
Die Verwendung eines Nicht-Erfolgs-Codes (zum Beispiel eines 503) ist der einfachste Weg, um spekulatives Laden serverseitig zu verhindern, obwohl es in der Regel besser ist, das Prefetch/Prerender zuzulassen und JavaScript zu verwenden, um alle Aktionen zu verzögern, die nur passieren sollen, wenn die Seite tatsächlich angesehen wird.
Wenn eine Seite vorgeladen wird, wird ihr PerformanceResourceTiming.deliveryType Eintrag einen Wert von "navigational-prefetch" zurückgeben. Sie könnten das folgende verwenden, um eine Funktion auszuführen, wenn ein Performance-Eintrag vom Typ "navigational-prefetch" empfangen wird:
Diese Technik ist nützlich, wenn die Leistung gemessen wird oder wenn Sie Aktionen verzögern möchten, die Probleme verursachen könnten, wenn sie während des Prefetching auftreten (siehe Unsicheres Prefetching).
Um eine Aktivität während des Prerenderings der Seite auszuführen, können Sie die Document.prerendering Eigenschaft überprüfen. So könnten Sie zum Beispiel einige Analysen ausführen:
Wenn ein prerendertes Dokument aktiviert wird, wird PerformanceNavigationTiming.activationStart auf einen DOMHighResTimeStamp gesetzt, der die Zeit zwischen dem Beginn des Prerenderings und der Aktivierung des Dokuments darstellt. Die folgende Funktion kann sowohl das Prerendering als auch prerenderte Seiten überprüfen:
Wenn die prerenderte Seite durch das Ansehen durch den Benutzer aktiviert wird, wird das prerenderingchange Ereignis ausgelöst. Dies kann verwendet werden, um Aktivitäten zu aktivieren, die zuvor standardmäßig beim Laden der Seite gestartet würden, die Sie jedoch aufschieben möchten, bis die Seite vom Benutzer angesehen wird. Der folgende Code richtet einen Ereignislistener ein, um eine Funktion auszuführen, sobald das Prerendering auf einer prerenderten Seite beendet ist, oder führt sie sofort auf einer nicht prerenderten Seite aus:
Dieser Abschnitt behandelt Bedingungen, auf die Sie achten sollten und unter denen Prefetching und/oder Prerendering unsicher sind. Das bedeutet, dass Prefetching/Prerendering Seiten, die diese Bedingungen aufweisen, möglicherweise Abhilfemaßnahmen in Ihrem Code erfordern oder ganz vermieden werden müssen.
Wie bereits erwähnt, empfehlen wir, Prefetching breit anzuwenden, da das Risiko-Nutzen-Verhältnis relativ gering ist – die potenzielle Ressourcenverschwendung ist minimal, und die Leistungsverbesserungen können signifikant sein. Sie müssen jedoch sicherstellen, dass vorgeladene Seiten keine Probleme mit dem Ablauf Ihrer Anwendung verursachen.
Wenn ein Prefetch durchgeführt wird, lädt der Browser den Antwortkörper der referenzierten Seite über eine einzige GET-Anfrage herunter, die der Benutzer zu einem späteren Zeitpunkt navigieren kann. Probleme können insbesondere dann auftreten, wenn die URL der Anfrage einen serverinitiierten Seiteneffekt hat, den Sie nicht wünschen, bis zur eigentlichen Navigation zur URL.
Zum Beispiel:
Solche Probleme können auf dem Server dadurch gemildert werden, dass Sie auf den Sec-Purpose: prefetch Header achten, während die Anfragen hereinkommen, und dann spezifischen Code auszuführen, um problematische Funktionalität zu verzögern. Später, wenn zur Seite tatsächlich navigiert wird, können Sie mit JavaScript die aufgeschobene Funktionalität einleiten, wenn nötig.
Hinweis: Sie können weitere Details zu dem Erkennungscode im Abschnitt Erkennung von vorgeladenen und prerenderten Seiten finden.
Es ist auch potenziell riskant, ein Dokument vorzuholen, dessen servergerenderte Inhalte durch Aktionen des Benutzers auf der aktuellen Seite geändert werden. Dies könnte zum Beispiel Flash-Verkaufsseiten oder Kinosaal-Seatmaps umfassen. Testen Sie solche Fälle sorgfältig und mildern Sie solche Probleme, indem Sie Inhalte aktualisieren, sobald die Seite geladen wird. Siehe Servergerenderter variierender Zustand für mehr Details zu diesen Fällen.
Hinweis: Browser werden vorgeladene Seiten für kurze Zeit zwischenpuffern (Chrome beispielsweise hält sie 5 Minuten) bevor sie verworfen werden, sodass Ihre Benutzer in jedem Fall Inhalte sehen könnten, die bis zu 5 Minuten veraltet sind.
Veraltete Vorholungen können mit dem prefetchCache Wert des Clear-Site-Data Antwortheaders gelöscht werden. Dies könnte verwendet werden, zum Beispiel wenn sich durch Anfragen, die den Zustand ändern, die gecachten Daten als nicht mehr gültig erweisen, wie etwa beim Abmelden von einer Seite.
Prefetching ist sicher, wenn alle Seiteneffekte des Abrufens der Seite aus JavaScript-Ausführung resultieren, da das JavaScript erst bis zur Aktivierung ausgeführt wird.
Ein letzter Tipp ist, die in Ihrer robots.txt als nicht erlaubt gelisteten URLs zu prüfen — normalerweise verweisen diese URLs auf Seiten, die nur von authentifizierten Benutzern abgerufen werden können und daher nicht in Suchmaschinenergebnissen enthalten sein sollten. Viele davon werden in Ordnung sein, aber es kann ein guter Ort sein, um URLs zu finden, die unsicher zum Vorladen sind (das heißt, sie weisen die oben beschriebenen Bedingungen auf).
Prerendering ist riskanter als Prefetching, deshalb sollte es sparsam eingesetzt werden, in Fällen, bei denen es sich lohnt. Es gibt mehr unsichere Bedingungen, die beim Prerendering zu beachten sind. Daher ist, auch wenn der Nutzen höher ist, das Risiko ebenfalls höher.
Wenn ein Prerendering durchgeführt wird, ruft der Browser die URL per GET ab und rendert und lädt den Inhalt in einen unsichtbaren Tab. Dies schließt das Ausführen des JavaScripts des Inhalts und das Laden aller Subressourcen ein, die von JavaScript abgerufen werden. Inhalte können potenziell unsicher zum Prerendern sein, wenn eine der folgenden Bedingungen beobachtet wird:
Um solche Probleme abzumildern, können Sie die folgenden Techniken verwenden:
Es gibt zwei Hauptarten von servergerendertem Zustand, mit denen Sie sich befassen müssen: veralteter Zustand und benutzerspezifischer Zustand. Dies kann sowohl unsicheres Prefetching als auch Prerendering verursachen.
Benutzerspezifische Zustandsprobleme können auch für andere Benutzereinstellungen auftreten, zum Beispiel Spracheinstellungen, Dunkelmoduspräferenzen oder das Hinzufügen von Artikeln zu einem Warenkorb. Sie können sich auch dann ergeben, wenn nur ein einzelner Tab beteiligt ist:
Die beste Abhilfe für diese Fälle und tatsächlich jedes Mal, wenn Inhalte mit dem Server aus der Synchronisation geraten können, besteht darin, dass sich Seiten bei Bedarf selbst aktualisieren. Beispielsweise könnte ein Server die Broadcast Channel API oder einen anderen Mechanismus wie fetch() oder einen WebSocket verwenden. Seiten können sich dann selbst angemessen aktualisieren, einschließlich spekulativ geladener Seiten, die noch nicht aktiviert wurden.
Wo Aktualisierungen nicht möglich sind, können Spekulationen durch den Clear-Site-Data Antwortheader mit den prefetchCache oder prerenderCache Werten (oder beiden) bereinigt werden, je nachdem.
Der Header kann auf jede gleiche Website HTTP-Anfrage zurückgegeben werden (wie ein /api/add-to-cart API-Aufruf).
Das Aktivieren eines prerendering/prerendered Dokuments verhält sich aus der Sicht des Endbenutzers wie jede herkömmliche Navigation. Das aktivierte Dokument wird im Tab angezeigt und dem Sitzungsverlauf hinzugefügt, und alle vorhandenen Vorlauf-Historieneinträge werden beschnitten. Alle Navigationen, die im Prerendering-Browsing-Kontext vor der Aktivierung stattfinden, beeinflussen den Sitzungsverlauf nicht.
Aus Sicht des Entwicklers kann ein prerendering Dokument als trivialer Sitzungsverlauf betrachtet werden, bei dem nur ein Eintrag — der aktuelle Eintrag — existiert. Alle Navigationen im Prerendering-Kontext werden effektiv ersetzt.
Während API-Funktionen, die auf Sitzungsverlauf wirken (zum Beispiel History und Navigation), innerhalb prerendered Dokumente aufgerufen werden können, operieren sie nur auf dem trivialen Sitzungsverlauf des Kontextes. Folglich nehmen prerendered Dokumente nicht am gemeinsamen Sitzungsverlauf ihrer verweisenden Seite teil. Zum Beispiel können sie ihren Verweis nicht über History.back() navigieren.
Dieses Design stellt sicher, dass Benutzer das erwartete Erlebnis beim Verwenden des Zurück-Buttons haben — das heißt, dass sie zu dem letzten Gesehenen zurückgebracht werden. Sobald ein prerendering Dokument aktiviert wird, wird nur ein einzelner Eintrag im gemeinsamen Sitzungsverlauf hinzugefügt, unter den bisherigen Navigationen, die im Prerendering-Browsing-Kontext stattfanden. Ein Schritt im gemeinsamen Sitzungsverlauf zurückgehen — zum Beispiel durch Drücken des Zurück-Buttons — bringt den Benutzer zur Ursprungsseite zurück.
Da eine prerendered Seite in einem ausgeblendeten Zustand geöffnet ist, werden mehrere API-Funktionen, die potenziell aufdringliche Verhaltensweisen verursachen, nicht in diesem Zustand aktiviert und werden stattdessen zurückgestellt bis die Seite aktiviert wird. Andere Webplattformfunktionen, die beim Prerendering problematisch sind, sind ganz eingeschränkt. Dieser Abschnitt bietet Details darüber, welche Funktionen zurückgestellt oder eingeschränkt sind.
Hinweis: In der kleinen Anzahl von Fällen, in denen das Zurückstellen und Einschränken nicht möglich sind, wird das Prerender abgebrochen.
Zurückstellen bedeutet, dass die API-Funktion sofort ein ausstehendes Versprechen zurückgibt und dann nichts unternimmt bis zur Aktivierung der Seite. Nach der Aktivierung läuft die Funktion normal und das Versprechen wird normal erfüllt oder abgelehnt.
Die Ergebnisse der folgenden asynchronen Funktionen werden in prerendered Dokumenten bis zur Aktivierung zurückgestellt:
Die folgenden Funktionen schlagen automatisch fehl oder verhalten sich nicht in aktivierten Dokumenten.
APIs, die vorübergehende Aktivierung oder angeklebte Aktivierung erfordern:
APIs, die erfordern, dass das enthaltende Dokument fokussiert ist:
APIs, die erfordern, dass der Document.visibilityState des enthaltenden Dokuments "visible" ist:
Die Spekulationsregeln API definiert keine eigenen Schnittstellen.
Eine boolesche Eigenschaft, die true zurückgibt, wenn das Dokument derzeit im Prozess des Prerenderings ist.
prerenderingchange EreignisWird auf einem prerendered Dokument ausgelöst, wenn es aktiviert wird (das heißt, der Benutzer betrachtet die Seite).
PerformanceNavigationTiming.activationStartEine Zahl, die die Zeit zwischen dem Start des Prerenderings eines Dokuments und dessen Aktivierung darstellt.
PerformanceResourceTiming.deliveryType "navigational-prefetch" WertSignalisiert, dass der Typ eines Performance-Eintrags ein Prefetch ist.
Wird verwendet, um die Nutzung von <script type="speculationrules"> zu erlauben, um Spekulationsregeln im Dokument zu definieren, das abgerufen wird.
Clear-Site-Data 'prefetchCache' und 'prerenderCache' WerteVerwendung zum Löschen von Spekulationen. Zum Beispiel, wenn Zustandsänderungen die Spekulationen veraltet machen.
Speculation-RulesLiefert eine Liste von URLs, die auf Textressourcen verweisen, welche Spekulationsregeln JSON-Definitionen enthalten. Wenn die Antwort ein HTML-Dokument ist, werden diese Regeln dem Spekulationsregelsatz des Dokuments hinzugefügt.
Supports-Loading-ModeWird von einem Navigationsziel gesetzt, um die Nutzung verschiedener risikoreicher Lade-Modi zu erlauben. Zum Beispiel erfordert Cross-Origin, Same-Site Prerendering einen Supports-Loading-Mode Wert von credentialed-prerender.
Wird verwendet, um ein Set von Prefetch- und/oder Prerender-Spekulationsregeln im aktuellen Dokument zu definieren, die dem Spekulationsregelsatz des Dokuments hinzugefügt werden.
Für Codebeispiele siehe Prerender pages in Chrome for instant page navigations auf developer.chrome.com (2025)
| HTML # speculative-loading |
| Prerendering Revamped |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.