PerformanceResourceTiming

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die PerformanceResourceTiming-Schnittstelle ermöglicht das Abrufen und Analysieren detaillierter Netzwerkzeitdaten bezüglich des Ladens von Ressourcen einer Anwendung. Eine Anwendung kann die Zeitmessungen verwenden, um beispielsweise die Dauer zum Abrufen einer bestimmten Ressource zu bestimmen, wie eine XMLHttpRequest, ein <SVG>, ein Bild oder ein Skript.

PerformanceEntry PerformanceResourceTiming

Beschreibung

Die Eigenschaften der Schnittstelle erstellen eine Ressourcelade-Zeitleiste mit hochauflösenden Zeitstempeln für Netzwerkereignisse wie Start- und Endzeiten von Weiterleitungen, Abrufstart, Start- und Endzeiten der DNS-Suche, Start- und Endzeiten der Antwort und mehr. Zusätzlich erweitert die Schnittstelle PerformanceEntry um weitere Eigenschaften, die Daten über die Größe der abgerufenen Ressource sowie über den Typ der Ressource, der den Abruf initiiert hat, bereitstellen.

Typische Ressourcentiming-Metriken

Die Eigenschaften dieser Schnittstelle erlauben Ihnen die Berechnung bestimmter Ressourcentiming-Metriken. Häufige Anwendungsfälle beinhalten:

  • Messen der TCP-Handshake-Zeit (connectEnd - connectStart)
  • Messen der DNS-Suchzeit (domainLookupEnd - domainLookupStart)
  • Messen der Umleitungszeit (redirectEnd - redirectStart)
  • Messen der Zwischenanfragezeit (firstInterimResponseStart - requestStart)
  • Messen der Anforderungszeit (responseStart - requestStart)
  • Messen der TLS-Verhandlungszeit (requestStart - secureConnectionStart)
  • Messen der Zeit zum Abrufen (ohne Umleitungen) (responseEnd - fetchStart)
  • Messen der ServiceWorker-Verarbeitungszeit (fetchStart - workerStart)
  • Überprüfen, ob Inhalte komprimiert wurden (decodedBodySize sollte nicht encodedBodySize sein)
  • Überprüfen, ob lokale Caches verwendet wurden (transferSize sollte 0 sein)
  • Überprüfen, ob moderne und schnelle Protokolle verwendet werden (nextHopProtocol sollte HTTP/2 oder HTTP/3 sein)
  • Überprüfen, ob die richtigen Ressourcen render-blockierend sind (renderBlockingStatus)

Instanz-Eigenschaften

Von PerformanceEntry geerbt

Diese Schnittstelle erweitert die folgenden PerformanceEntry-Eigenschaften für Ressourcentypen von Leistungseinträgen, indem sie diese qualifiziert und einschränkt:

PerformanceEntry.duration Nur lesbar

Gibt einen timestamp zurück, der die Differenz zwischen den Eigenschaften responseEnd und startTime ist.

PerformanceEntry.entryType Nur lesbar

Gibt "resource" zurück.

PerformanceEntry.name Nur lesbar

Gibt die URL der Ressource zurück.

PerformanceEntry.startTime Nur lesbar

Gibt den timestamp für die Zeit zurück, zu der ein Ressourcenabruf gestartet wurde. Dieser Wert entspricht PerformanceResourceTiming.fetchStart.

Zeitstempel

Die Schnittstelle unterstützt die folgenden Zeitstempel-Eigenschaften, die Sie im Diagramm sehen können und die in der Reihenfolge aufgelistet sind, in der sie beim Abrufen einer Ressource aufgezeichnet werden. Eine alphabetische Auflistung wird in der Navigation links angezeigt.

Zeitstempel-Diagramm, das Zeitstempel in der Reihenfolge auflistet, in der sie beim Abrufen einer Ressource aufgezeichnet werden

PerformanceResourceTiming.redirectStart Nur lesbar

Ein DOMHighResTimeStamp, der die Startzeit des Abrufs repräsentiert, der die Weiterleitung initiiert.

PerformanceResourceTiming.redirectEnd Nur lesbar

Ein DOMHighResTimeStamp unmittelbar nach dem Empfang des letzten Bytes der Antwort der letzten Weiterleitung.

PerformanceResourceTiming.workerStart Nur lesbar

Gibt einen DOMHighResTimeStamp unmittelbar vor dem Aufrufen des FetchEvent zurück, wenn ein Service Worker-Thread bereits läuft, oder unmittelbar bevor der Service Worker-Thread gestartet wird, wenn er noch nicht läuft. Wenn die Ressource nicht von einem Service Worker abgefangen wird, gibt die Eigenschaft immer 0 zurück.

PerformanceResourceTiming.fetchStart Nur lesbar

Ein DOMHighResTimeStamp unmittelbar bevor der Browser beginnt, die Ressource abzurufen.

PerformanceResourceTiming.domainLookupStart Nur lesbar

Ein DOMHighResTimeStamp unmittelbar bevor der Browser die Domänennamensuche für die Ressource beginnt.

PerformanceResourceTiming.domainLookupEnd Nur lesbar

Ein DOMHighResTimeStamp, der die Zeit unmittelbar nach dem Abschluss der Domänennamensuche für die Ressource durch den Browser darstellt.

PerformanceResourceTiming.connectStart Nur lesbar

Ein DOMHighResTimeStamp unmittelbar bevor der Browser beginnt, die Verbindung zum Server herzustellen, um die Ressource abzurufen.

PerformanceResourceTiming.secureConnectionStart Nur lesbar

Ein DOMHighResTimeStamp unmittelbar bevor der Browser beginnt, den Handshake-Prozess zur Sicherung der aktuellen Verbindung auszuführen.

PerformanceResourceTiming.connectEnd Nur lesbar

Ein DOMHighResTimeStamp unmittelbar nachdem der Browser die Verbindung zum Server zur Ressourcengewinnung hergestellt hat.

PerformanceResourceTiming.requestStart Nur lesbar

Ein DOMHighResTimeStamp unmittelbar bevor der Browser beginnt, die Ressource vom Server anzufordern.

PerformanceResourceTiming.firstInterimResponseStart Experimentell Nur lesbar

Ein DOMHighResTimeStamp, der die Zwischenanfragezeit repräsentiert (zum Beispiel 100 Continue oder 103 Early Hints).

PerformanceResourceTiming.responseStart Nur lesbar

Ein DOMHighResTimeStamp unmittelbar nachdem der Browser das erste Byte der Antwort vom Server erhält.

PerformanceResourceTiming.responseEnd Nur lesbar

Ein DOMHighResTimeStamp unmittelbar nachdem der Browser das letzte Byte der Ressource empfängt oder unmittelbar bevor die Transportverbindung geschlossen wird, je nachdem, was zuerst eintritt.

Zusätzliche Ressourceninformationen

Darüber hinaus bietet diese Schnittstelle folgende Eigenschaften, die mehr Informationen über eine Ressource enthalten:

PerformanceResourceTiming.contentType Nur lesbar Experimentell

Ein String, der eine minimierte und standardisierte Version des MIME-Typs der abgerufenen Ressource darstellt.

PerformanceResourceTiming.decodedBodySize Nur lesbar

Eine Zahl, die die Größe (in Oktetten) der vom Abruf (HTTP oder Cache) des Nachrichtenkörpers empfangenen Daten darstellt, nach Entfernung jeglicher angewandter Inhaltskodierung.

PerformanceResourceTiming.deliveryType Experimentell Nur lesbar

Gibt an, wie die Ressource geliefert wurde — zum Beispiel aus dem Cache oder aus einem Navigations-Vorladen.

PerformanceResourceTiming.encodedBodySize Nur lesbar

Eine Zahl, die die Größe (in Oktetten) der beim Abruf (HTTP oder Cache) empfangenen Nutzlast darstellt, bevor jegliche angewandte Inhaltskodierungen entfernt wurden.

PerformanceResourceTiming.initiatorType Nur lesbar

Ein String, der das Web-Plattform-Feature repräsentiert, welches den Leistungseintrag initiiert hat.

PerformanceResourceTiming.nextHopProtocol Nur lesbar

Ein String, der das Netzwerkprotokoll repräsentiert, das zum Abrufen der Ressource verwendet wird, wie durch die ALPN Protocol ID (RFC7301) identifiziert.

PerformanceResourceTiming.renderBlockingStatus Nur lesbar

Ein String, der den Render-Blockierungsstatus darstellt. Entweder "blocking" oder "non-blocking".

PerformanceResourceTiming.responseStatus Nur lesbar

Eine Zahl, die den HTTP-Antwortstatuscode repräsentiert, der beim Abrufen der Ressource zurückgegeben wurde.

PerformanceResourceTiming.transferSize Nur lesbar

Eine Zahl, die die Größe (in Oktetten) der abgerufenen Ressource darstellt. Die Größe umfasst sowohl die Antwortheaderfelder als auch den Antwortnutzlastkörper.

PerformanceResourceTiming.serverTiming Nur lesbar

Ein Array von PerformanceServerTiming-Einträgen, die Timing-Metriken des Servers enthalten.

Instanz-Methoden

PerformanceResourceTiming.toJSON()

Gibt eine JSON-Darstellung des PerformanceResourceTiming-Objekts zurück.

Beispiele

Protokollieren von Ressourcentiming-Informationen

Beispiel mit einem PerformanceObserver, der über neue resource-Leistungseinträge benachrichtigt, sobald sie in der Leistung-Zeitleiste des Browsers aufgezeichnet werden. Verwenden Sie die buffered-Option, um auf Einträge von vor der Erstellung des Beobachters zuzugreifen.

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    console.log(entry);
  });
});

observer.observe({ type: "resource", buffered: true });

Beispiel mit Performance.getEntriesByType(), das nur resource-Leistungseinträge zeigt, die zum Zeitpunkt des Aufrufs dieser Methode in der Leistung-Zeitleiste des Browsers vorhanden sind:

js
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
  console.log(entry);
});

Sicherheitsanforderungen

Cross-Origin-Timing-Informationen

Viele der Eigenschaften für das Ressourcentiming sind auf 0 oder einen leeren String beschränkt, wenn die Ressource eine Cross-Origin-Anfrage ist. Um Cross-Origin-Timing-Informationen offenzulegen, muss der Timing-Allow-Origin HTTP-Antwortheader gesetzt werden.

Zum Beispiel, um https://developer.mozilla.org den Zugriff auf Ressourcentiming-Informationen zu ermöglichen, sollte die Cross-Origin-Ressource senden:

http
Timing-Allow-Origin: https://developer.mozilla.org

Spezifikationen

Specification
Resource Timing
# resources-included-in-the-performanceresourcetiming-interface

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch