| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/API/Speculation_Rules_API | [Back] [Original] |
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.
Want more browser support for this feature? Tell us why.
Experimentell: Dies ist eine experimentelle Technologie
berprfen Sie die Browser-Kompatibilittstabelle sorgfltig vor der Verwendung auf produktiven Webseiten.
Die Spekulationsregeln API wurde entworfen, um die Performance fr zuknftige Navigationen zu verbessern. Sie zielt auf Dokument-URLs ab, nicht auf spezifische Ressourcendateien, und ist daher sinnvoll fr 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 gegenber diesen Technologien sowie eine ausdrucksstrkere, konfigurierbare Syntax, um festzulegen, welche Dokumente vorgeladen oder vorgerendert werden sollen.
Hinweis:
Die Spekulationsregeln API behandelt keine Subressourcenvorladungen; dafr mssen Sie <link rel="prefetch"> verwenden.
Spekulationsregeln knnen 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:
<script type="speculationrules">
{
"prerender": [
{
"where": {
"and": [
{ "href_matches": "/*" },
{ "not": { "href_matches": "/logout" } },
{ "not": { "href_matches": "/*\\?*(^|&)add-to-cart=*" } },
{ "not": { "selector_matches": ".no-prerender" } },
{ "not": { "selector_matches": "[rel~=nofollow]" } }
]
}
}
],
"prefetch": [
{
"urls": ["next.html", "next2.html"],
"requires": ["anonymous-client-ip-when-cross-origin"],
"referrer_policy": "no-referrer"
}
]
}
</script>
Spekulationsregeln, die ein <script>-Element verwenden, mssen explizit in der Content-Security-Policy script-src Direktive erlaubt werden, wenn die Seite diese enthlt. Dies erfolgt durch das Hinzufgen einer der 'inline-speculation-rules' Quelle, einer Hash-Quelle oder einer Nonce-Quelle.
Ein HTTP-Header-Beispiel:
Speculation-Rules: "/rules/prefetch.json"
Die Textressource, die das Spekulationsregeln-JSON enthlt, kann einen beliebigen gltigen Namen und eine beliebige Erweiterung haben, muss jedoch mit einem application/speculationrules+json MIME-Typ bereitgestellt werden.
Hinweis: Regeln knnen 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 hinzugefgt.
Sie spezifizieren ein unterschiedliches Array, um die Regeln fr 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 fr jede Regel. Beachten Sie, dass vorgerenderte URLs ebenfalls vorgeladen werden.
Siehe <script type="speculationrules"> fr eine vollstndige Erklrung der verfgbaren Syntax.
Das Einfgen von prefetch-Regeln in ein <script type="speculationrules">-Element oder einen Speculation-Rules-Header fhrt dazu, dass untersttzende Browser den Antwortkrper 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, auer natrlich 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 fllen 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 fr mehr Details).
Same-Site und Cross-Site Prefetches funktionieren, aber Cross-Site Prefetches sind begrenzt (siehe "same-site" und "cross-site" fr eine Erklrung der Unterschiede zwischen den beiden). Aus Datenschutzgrnden funktionieren Cross-Site Prefetches derzeit nur, wenn der Benutzer keine Cookies fr die Zielseite gesetzt hat wir mchten nicht, dass Seiten die Benutzeraktivitt ber vorgeladene Seiten (die sie unter Umstnden nie besuchen) basierend auf vorher gesetzten Cookies verfolgen.
Hinweis:
In Zukunft wird ein Opt-In fr 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 verfgbar).
Fr Browser, die es untersttzen, sollten Spekulationsregeln Prefetch gegenber lteren Prefetch-Mechanismen bevorzugt werden, namentlich <link rel="prefetch"> und fetch() mit einer priority: "low"-Option. Weil wir wissen, dass Spekulationsregeln Prefetch fr Navigationen ist, nicht fr allgemeine Ressourcenvorhaltung:
<link rel="prefetch"> dies nicht kann.Cache-Control Header blockiert, whrend <link rel="prefetch"> hufig blockiert wird.Darber hinaus hat Spekulationsregelsymbolisierung Prefetch:
fetch() tut dies nicht).Das Einfgen von prerender-Regeln in ein <script type="speculationrules">-Element oder einen Speculation-Rules-Header fhrt dazu, dass untersttzende Browser den Inhalt in einem unsichtbaren Tab abrufen, rendern und laden, der in einem pro-Dokument-In-Memory-Cache gespeichert wird. Dies schliet das Laden aller Subressourcen ein, das Ausfhren aller JavaScript, und sogar das Laden von Subressourcen und Durchfhren von Datenabrufen, die von JavaScript gestartet werden. Alle gecachten Prerender und ihre Subressourcen werden verworfen, wenn Sie die aktuelle Seite verlassen, auer natrlich ein prerendertes Dokument, zu dem Sie dann navigieren.
Zuknftige Navigationen zu einem prerenderten Dokument werden nahezu sofort ausgefhrt. 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 vollstndig prerendert wurde, wird sie im aktuellen Zustand aktiviert und ldt 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 fllen kann, wenn Header dies zulassen, was eine sptere Verwendung erlaubt). Die Vorabkosten eines Prerenders sind viel grer als die Vorabkosten eines Prefetches, und andere Bedingungen knnten auch dazu fhren, dass Inhalte unsicher zum Prerendern sind (siehe Unsichere spekulative Ladebedingungen fr mehr Details). Daher wird empfohlen, das Prerendering sparsamer zu verwenden und sorgfltig Flle zu prfen, in denen eine hohe Wahrscheinlichkeit besteht, dass die Seite navigiert wird und Sie denken, dass der Vorteil fr die Benutzererfahrung die zustzlichen Kosten wert ist.
Hinweis:
Um die Menge an mglichem Ressourcenverschwendung einzuordnen: Ein Prerender verwendet etwa die gleiche Menge an Ressourcen wie das Rendern eines <iframe>.
Hinweis: Viele APIs werden whrend des Prerenderings/aktiviert automatisch zurckgestellt. Siehe Plattformfunktionen, die whrend des Prerenderings zurckgestellt oder eingeschrnkt sind fr mehr Details.
Prerendering ist standardmig auf same-origin Dokumente beschrnkt. Cross-origin, same-site Prerendering ist mglich 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 mglich.
Fr Browser, die es untersttzen, sollte die Spekulationsregeln Prerender gegenber lteren Prerender-Mechanismen bevorzugt werden, nmlich <link rel="prerender">:
<link rel="prerender"> ist Chrome-spezifisch und wurde nie standardisiert, und das Chrome-Entwicklungsteam ist dabei, es abzuschaffen.<link rel="prerender"> dies nicht tut.Cache-Control Einstellungen blockiert, whrend <link rel="prerender"> oft blockiert wird.<link rel="prerender"> ist es ein spekulativer Hinweis und der Browser kann whlen, den Hinweis nicht umzusetzen, basierend auf Benutzereinstellungen, aktuellem Speicherverbrauch oder anderen Heuristiken.Sie knnen berprfen, ob die Spekulationsregeln API untersttzt wird, indem Sie den folgenden Code verwenden:
if (
HTMLScriptElement.supports &&
HTMLScriptElement.supports("speculationrules")
) {
console.log("Your browser supports the Speculation Rules API.");
}
Zum Beispiel mchten Sie Spekulationsregeln fr das Vorladen in untersttzenden Browsern einfgen, aber in anderen eine ltere Technologie wie <link rel="prefetch"> verwenden:
if (
HTMLScriptElement.supports &&
HTMLScriptElement.supports("speculationrules")
) {
const specScript = document.createElement("script");
specScript.type = "speculationrules";
const specRules = {
prefetch: [
{
source: "list",
urls: ["/next.html"],
},
],
};
specScript.textContent = JSON.stringify(specRules);
document.body.append(specScript);
} else {
const linkElem = document.createElement("link");
linkElem.rel = "prefetch";
linkElem.href = "/next.html";
document.head.append(linkElem);
}
Dieser Abschnitt betrachtet verschiedene Mglichkeiten, um festzustellen, ob eine angeforderte Seite vorgeladen oder prerendert wurde.
Vorgeladene und prerenderte Seitenanforderungen werden mit dem Sec-Purpose Anfrage-Header gesendet:
Fr Prefetch:
Sec-Purpose: prefetch
Fr Prerender:
Sec-Purpose: prefetch;prerender
Server knnen basierend auf diesem Header antworten, zum Beispiel um spekulative Ladevorgnge zu protokollieren, anderen Inhalt zurckzugeben oder sogar zu verhindern, dass spekulatives Laden stattfindet. Wenn ein Nicht-Erfolgs-Response-Code zurckgegeben wird (jeder HTTP-Status, der nicht im Bereich von 200 bis 299 nach Umleitungen liegt), dann wird die Seite nicht vorgeladen/vorgerendert. Zustzlich 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 verzgern, die nur passieren sollen, wenn die Seite tatschlich angesehen wird.
Wenn eine Seite vorgeladen wird, wird ihr PerformanceResourceTiming.deliveryType Eintrag einen Wert von "navigational-prefetch" zurckgeben. Sie knnten das folgende verwenden, um eine Funktion auszufhren, wenn ein Performance-Eintrag vom Typ "navigational-prefetch" empfangen wird:
if (
performance.getEntriesByType("navigation")[0].deliveryType ===
"navigational-prefetch"
) {
respondToPrefetch(); // Author-defined function
}
Diese Technik ist ntzlich, wenn die Leistung gemessen wird oder wenn Sie Aktionen verzgern mchten, die Probleme verursachen knnten, wenn sie whrend des Prefetching auftreten (siehe Unsicheres Prefetching).
Um eine Aktivitt whrend des Prerenderings der Seite auszufhren, knnen Sie die Document.prerendering Eigenschaft berprfen. So knnten Sie zum Beispiel einige Analysen ausfhren:
if (document.prerendering) {
analytics.sendInfo("got this far during prerendering!");
}
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 berprfen:
function pagePrerendered() {
return (
document.prerendering ||
self.performance?.getEntriesByType?.("navigation")[0]?.activationStart > 0
);
}
Wenn die prerenderte Seite durch das Ansehen durch den Benutzer aktiviert wird, wird das prerenderingchange Ereignis ausgelst. Dies kann verwendet werden, um Aktivitten zu aktivieren, die zuvor standardmig beim Laden der Seite gestartet wrden, die Sie jedoch aufschieben mchten, bis die Seite vom Benutzer angesehen wird. Der folgende Code richtet einen Ereignislistener ein, um eine Funktion auszufhren, sobald das Prerendering auf einer prerenderten Seite beendet ist, oder fhrt sie sofort auf einer nicht prerenderten Seite aus:
if (document.prerendering) {
document.addEventListener("prerenderingchange", initAnalytics, {
once: true,
});
} else {
initAnalytics();
}
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, mglicherweise Abhilfemanahmen in Ihrem Code erfordern oder ganz vermieden werden mssen.
Wie bereits erwhnt, empfehlen wir, Prefetching breit anzuwenden, da das Risiko-Nutzen-Verhltnis relativ gering ist die potenzielle Ressourcenverschwendung ist minimal, und die Leistungsverbesserungen knnen signifikant sein. Sie mssen jedoch sicherstellen, dass vorgeladene Seiten keine Probleme mit dem Ablauf Ihrer Anwendung verursachen.
Wenn ein Prefetch durchgefhrt wird, ldt der Browser den Antwortkrper der referenzierten Seite ber eine einzige GET-Anfrage herunter, die der Benutzer zu einem spteren Zeitpunkt navigieren kann. Probleme knnen insbesondere dann auftreten, wenn die URL der Anfrage einen serverinitiierten Seiteneffekt hat, den Sie nicht wnschen, bis zur eigentlichen Navigation zur URL.
Zum Beispiel:
Solche Probleme knnen auf dem Server dadurch gemildert werden, dass Sie auf den Sec-Purpose: prefetch Header achten, whrend die Anfragen hereinkommen, und dann spezifischen Code auszufhren, um problematische Funktionalitt zu verzgern. Spter, wenn zur Seite tatschlich navigiert wird, knnen Sie mit JavaScript die aufgeschobene Funktionalitt einleiten, wenn ntig.
Hinweis: Sie knnen 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 gendert werden. Dies knnte zum Beispiel Flash-Verkaufsseiten oder Kinosaal-Seatmaps umfassen. Testen Sie solche Flle sorgfltig und mildern Sie solche Probleme, indem Sie Inhalte aktualisieren, sobald die Seite geladen wird. Siehe Servergerenderter variierender Zustand fr mehr Details zu diesen Fllen.
Hinweis: Browser werden vorgeladene Seiten fr kurze Zeit zwischenpuffern (Chrome beispielsweise hlt sie 5 Minuten) bevor sie verworfen werden, sodass Ihre Benutzer in jedem Fall Inhalte sehen knnten, die bis zu 5 Minuten veraltet sind.
Veraltete Vorholungen knnen mit dem prefetchCache Wert des Clear-Site-Data Antwortheaders gelscht werden. Dies knnte verwendet werden, zum Beispiel wenn sich durch Anfragen, die den Zustand ndern, die gecachten Daten als nicht mehr gltig erweisen, wie etwa beim Abmelden von einer Seite.
Prefetching ist sicher, wenn alle Seiteneffekte des Abrufens der Seite aus JavaScript-Ausfhrung resultieren, da das JavaScript erst bis zur Aktivierung ausgefhrt wird.
Ein letzter Tipp ist, die in Ihrer robots.txt als nicht erlaubt gelisteten URLs zu prfen normalerweise verweisen diese URLs auf Seiten, die nur von authentifizierten Benutzern abgerufen werden knnen 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 heit, sie weisen die oben beschriebenen Bedingungen auf).
Prerendering ist riskanter als Prefetching, deshalb sollte es sparsam eingesetzt werden, in Fllen, bei denen es sich lohnt. Es gibt mehr unsichere Bedingungen, die beim Prerendering zu beachten sind. Daher ist, auch wenn der Nutzen hher ist, das Risiko ebenfalls hher.
Wenn ein Prerendering durchgefhrt wird, ruft der Browser die URL per GET ab und rendert und ldt den Inhalt in einen unsichtbaren Tab. Dies schliet das Ausfhren des JavaScripts des Inhalts und das Laden aller Subressourcen ein, die von JavaScript abgerufen werden. Inhalte knnen potenziell unsicher zum Prerendern sein, wenn eine der folgenden Bedingungen beobachtet wird:
Um solche Probleme abzumildern, knnen Sie die folgenden Techniken verwenden:
Sec-Purpose: prefetch Header auf dem Server, whrend die Anfragen hereinkommen, und dann spezifischen Code auszufhren, um problematische Funktionalitt zu verzgern.prerenderingchange Ereignis, um zu erkennen, wann die prerenderte Seite tatschlich aktiviert wird und fhren Sie entsprechend Code aus. Dies ist in zwei Fllen ntzlich:
fetch() oder einem WebSocket aktualisiert werden. Dies stellt sicher, dass der Benutzer aktuelle Inhalte nach der Aktivierung des Prerenderings sieht.Document.prerendering Eigenschaft, um das Ausfhren auf prerenderten Seiten zu verzgern) wie Google Analytics oder NewRelic.
<iframe>s whrend des Prerenderings verzgert wird, bis die Aktivierung erfolgt. Dies geschieht, um Probleme zu vermeiden, die durch das Laden von Cross-Origin-Seiten entstehen, die sich des Prerenderings nicht bewusst sind, und um Komplexitten zu vermeiden, welche Anmeldedaten und Speicher diesen Frames zur Verfgung gestellt werden sollen. Es bedeutet, dass Benutzer in einigen Fllen zunchst leere Frames sehen knnen, es bedeutet aber auch, dass die meisten Drittanbieter-Widgets wie Ad-Tech whrend des Prerenderings sicher verwendet werden knnen.prerenderingchange Ereignisses, wie zuvor erwhnt.Es gibt zwei Hauptarten von servergerendertem Zustand, mit denen Sie sich befassen mssen: veralteter Zustand und benutzerspezifischer Zustand. Dies kann sowohl unsicheres Prefetching als auch Prerendering verursachen.
https://site.example/a in Tab 1 und https://site.example/b in Tab 2, whrend er nicht angemeldet ist.https://site.example/b prerendert https://site.example/c. Es wird im abgemeldeten Zustand prerendert.https://site.example in Tab 1 an.https://site.example/c, was die prerendered-Seite aktiviert.https://site.example/c an, was den Benutzer verwirrt, da er dachte, er sei angemeldet.Benutzerspezifische Zustandsprobleme knnen auch fr andere Benutzereinstellungen auftreten, zum Beispiel Spracheinstellungen, Dunkelmodusprferenzen oder das Hinzufgen von Artikeln zu einem Warenkorb. Sie knnen sich auch dann ergeben, wenn nur ein einzelner Tab beteiligt ist:
https://site.example/product.https://site.example.com/product prerendert https://site.example.com/cart. Es wird mit 0 Artikeln im Warenkorb prerendert.https://site.example.com/cart, was die prerendered-Seite aktiviert.Die beste Abhilfe fr diese Flle und tatschlich jedes Mal, wenn Inhalte mit dem Server aus der Synchronisation geraten knnen, besteht darin, dass sich Seiten bei Bedarf selbst aktualisieren. Beispielsweise knnte ein Server die Broadcast Channel API oder einen anderen Mechanismus wie fetch() oder einen WebSocket verwenden. Seiten knnen sich dann selbst angemessen aktualisieren, einschlielich spekulativ geladener Seiten, die noch nicht aktiviert wurden.
Wo Aktualisierungen nicht mglich sind, knnen 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 zurckgegeben werden (wie ein /api/add-to-cart API-Aufruf).
Das Aktivieren eines prerendering/prerendered Dokuments verhlt sich aus der Sicht des Endbenutzers wie jede herkmmliche Navigation. Das aktivierte Dokument wird im Tab angezeigt und dem Sitzungsverlauf hinzugefgt, und alle vorhandenen Vorlauf-Historieneintrge 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.
Whrend API-Funktionen, die auf Sitzungsverlauf wirken (zum Beispiel History und Navigation), innerhalb prerendered Dokumente aufgerufen werden knnen, operieren sie nur auf dem trivialen Sitzungsverlauf des Kontextes. Folglich nehmen prerendered Dokumente nicht am gemeinsamen Sitzungsverlauf ihrer verweisenden Seite teil. Zum Beispiel knnen sie ihren Verweis nicht ber History.back() navigieren.
Dieses Design stellt sicher, dass Benutzer das erwartete Erlebnis beim Verwenden des Zurck-Buttons haben das heit, dass sie zu dem letzten Gesehenen zurckgebracht werden. Sobald ein prerendering Dokument aktiviert wird, wird nur ein einzelner Eintrag im gemeinsamen Sitzungsverlauf hinzugefgt, unter den bisherigen Navigationen, die im Prerendering-Browsing-Kontext stattfanden. Ein Schritt im gemeinsamen Sitzungsverlauf zurckgehen zum Beispiel durch Drcken des Zurck-Buttons bringt den Benutzer zur Ursprungsseite zurck.
Da eine prerendered Seite in einem ausgeblendeten Zustand geffnet ist, werden mehrere API-Funktionen, die potenziell aufdringliche Verhaltensweisen verursachen, nicht in diesem Zustand aktiviert und werden stattdessen zurckgestellt bis die Seite aktiviert wird. Andere Webplattformfunktionen, die beim Prerendering problematisch sind, sind ganz eingeschrnkt. Dieser Abschnitt bietet Details darber, welche Funktionen zurckgestellt oder eingeschrnkt sind.
Hinweis: In der kleinen Anzahl von Fllen, in denen das Zurckstellen und Einschrnken nicht mglich sind, wird das Prerender abgebrochen.
Zurckstellen bedeutet, dass die API-Funktion sofort ein ausstehendes Versprechen zurckgibt und dann nichts unternimmt bis zur Aktivierung der Seite. Nach der Aktivierung luft die Funktion normal und das Versprechen wird normal erfllt oder abgelehnt.
Die Ergebnisse der folgenden asynchronen Funktionen werden in prerendered Dokumenten bis zur Aktivierung zurckgestellt:
MediaDevices.selectAudioOutput()BackgroundFetchManager.fetch()BroadcastChannel.postMessage()CredentialsContainer.create(), CredentialsContainer.get(), CredentialsContainer.store()Navigator.requestMediaKeySystemAccess()Navigator.getGamepads(), gamepadconnected Ereignis, gamepaddisconnected EreignisGeolocation.getCurrentPosition(), Geolocation.watchPosition(), Geolocation.clearWatch()HTMLMediaElement API: Die Wiedergabeposition wird whrend das enthaltende Dokument prerendert wird nicht fortschreitenIdleDetector.start()MediaDevices.getUserMedia() (und die ltere Navigator.getUserMedia() Version), MediaDevices.enumerateDevices()Notification() Konstruktor, Notification.requestPermission()PushManager.subscribe()ScreenOrientation.lock(), ScreenOrientation.unlock()Sensor.start()ServiceWorker.postMessage(), ServiceWorkerContainer.register(), ServiceWorkerRegistration.update(), ServiceWorkerRegistration.unregister()StorageManager.persist()AudioContexts drfen nicht starten, whrend das enthaltene Dokument prerendert wirdBluetooth.getDevices(), Bluetooth.requestDevice()HID.getDevices(), HID.requestDevice()LockManager.query(), LockManager.request()Navigator.requestMIDIAccess()NDefReader.write(), NDefReader.scan()Serial.getPorts(), Serial.requestPort()SpeechRecognition.abort(), SpeechRecognition.start(), SpeechRecognition.stop(), SpeechSynthesis.cancel(), SpeechSynthesis.pause(), SpeechSynthesis.resume(), SpeechSynthesis.speak()USB.getDevices(), USB.requestDevice()XRSystem.requestSession()Die folgenden Funktionen schlagen automatisch fehl oder verhalten sich nicht in aktivierten Dokumenten.
APIs, die vorbergehende Aktivierung oder angeklebte Aktivierung erfordern:
beforeunload Ereignis generiert werdenWindow.showDirectoryPicker(), Window.showOpenFilePicker(), Window.showSaveFilePicker()Element.requestFullscreen()IdleDetector.requestPermission()Keyboard.lock() (erfordert Vollbild)PaymentRequest.show()PresentationRequest.start()Element.requestPointerLock()MediaDevices.getDisplayMedia()Navigator.share()APIs, die erfordern, dass das enthaltende Dokument fokussiert ist:
APIs, die erfordern, dass der Document.visibilityState des enthaltenden Dokuments "visible" ist:
HTMLVideoElement.requestPictureInPicture() (erfordert, dass der Sichtbarkeitsstatus des enthaltenden Dokuments "visible" ist, oder vorbergehende Aktivierung)WakeLock.request()<a> und <area> Elemente mit dem download Attribut, werden ihre Downloads verzgern, bis das Prerendering beendet ist.javascript: URLsdata: URLsblob: URLsabout: URLs, einschlielich about:blank und about:srcdocWindow.sessionStorage kann verwendet werden, aber das Verhalten ist sehr spezifisch, um Seiten zu vermeiden, die erwarten, dass nur eine Seite auf den Sitzungsspeicher der Registerkarte gleichzeitig zugreifen kann. Eine prerendered-Seite beginnt daher mit einem Klon des Sitzungsspeicherstatus der Tabelle von dem Zeitpunkt, an dem sie erstellt wurde. Nach der Aktivierung wird der Klon des Speichers der prerendered-Seite verworfen und der Hauptspeicherstatus der Tabelle wird stattdessen verwendet. Seiten, die Sitzungsspeicher verwenden, knnen das prerenderingchange Ereignis verwenden, um zu erkennen, wann dieser Speichertausch auftritt.Window.print(): Alle Aufrufe dieser Methode werden ignoriert.Window.alert() kehrt sofort zurck, ohne einen Dialog anzuzeigen.Window.confirm() kehrt sofort mit false zurck, ohne einen Dialog anzuzeigen.Window.prompt() kehrt sofort mit einem leeren String ("") zurck, ohne einen Dialog anzuzeigen.<iframe> Loads werden whrend des Prerenderings verzgert, bis die Seite aktiviert wird.Die Spekulationsregeln API definiert keine eigenen Schnittstellen.
Document.prerendering Eine boolesche Eigenschaft, die true zurckgibt, wenn das Dokument derzeit im Prozess des Prerenderings ist.
prerenderingchange Ereignis Wird auf einem prerendered Dokument ausgelst, wenn es aktiviert wird (das heit, der Benutzer betrachtet die Seite).
PerformanceNavigationTiming.activationStart Eine Zahl, die die Zeit zwischen dem Start des Prerenderings eines Dokuments und dessen Aktivierung darstellt.
PerformanceResourceTiming.deliveryType "navigational-prefetch" Wert Signalisiert, dass der Typ eines Performance-Eintrags ein Prefetch ist.
Content-Security-Policy 'inline-speculation-rules' Wert 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' Werte Verwendung zum Lschen von Spekulationen. Zum Beispiel, wenn Zustandsnderungen die Spekulationen veraltet machen.
Speculation-Rules Liefert 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 hinzugefgt.
Supports-Loading-Mode Wird 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.
<script type="speculationrules"> Wird verwendet, um ein Set von Prefetch- und/oder Prerender-Spekulationsregeln im aktuellen Dokument zu definieren, die dem Spekulationsregelsatz des Dokuments hinzugefgt werden.
Fr Codebeispiele siehe Prerender pages in Chrome for instant page navigations auf developer.chrome.com (2025)
| Spezifikation |
|---|
| HTML # speculative-loading |
| Prerendering Revamped |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |