PerformanceResourceTiming: finalResponseHeadersStart-Eigenschaft

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Die schreibgeschützte Eigenschaft finalResponseHeadersStart gibt einen timestamp zurück, unmittelbar nachdem der Browser das erste Byte der endgültigen Dokumentantwort (zum Beispiel 200 OK) vom Server erhalten hat.

Dies unterscheidet sich von requestStart (was auch als firstInterimResponseStart dargestellt werden kann), denn hier beginnt es mit den ersten Bytes jeder Antwort, einschließlich Zwischenantworten (zum Beispiel 103 Early Hints), wobei die endgültige Antwort möglicherweise viel später kommt.

Wenn es keine Zwischenantworten gibt, ist requestStart gleich finalResponseHeadersStart und firstInterimResponseStart ist 0.

Für finalResponseHeadersStart gibt es keine Ende-Eigenschaft.

Wert

Die finalResponseHeadersStart-Eigenschaft kann folgende Werte haben:

  • Ein DOMHighResTimeStamp, unmittelbar nachdem der Browser die ersten Bytes der endgültigen Antwort vom Server erhalten hat.
  • 0, falls die Ressource eine Cross-Origin-Anfrage ist und kein Timing-Allow-Origin HTTP-Antwortheader verwendet wird.

Beispiele

Anforderungszeit messen

Die Eigenschaften finalResponseHeadersStart und requestStart können verwendet werden, um zu messen, wie lange es dauert, bis der Browser beginnt, die endgültige Antwort nach dem Senden der Anfrage zu empfangen.

js
const request = entry.finalResponseHeadersStart - entry.requestStart;

Das folgende Beispiel verwendet einen PerformanceObserver, um über neue resource-Leistungseinträge zu informieren, sobald sie in der Leistungszeitleiste des Browsers aufgezeichnet werden. Die buffered-Option wird verwendet, um auf Einträge aus der Zeit vor der Erstellung des Observers zuzugreifen.

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    const request = entry.finalResponseHeadersStart - entry.requestStart;
    if (request > 0) {
      console.log(`${entry.name}: final response time: ${request}ms`);
    }
  });
});

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

Das folgende Beispiel verwendet Performance.getEntriesByType(), das nur resource-Leistungseinträge zeigt, die zum Zeitpunkt des Aufrufs der Methode in der Leistungszeitleiste des Browsers vorhanden sind.

js
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
  const request = entry.finalResponseHeadersStart - entry.requestStart;
  if (request > 0) {
    console.log(`${entry.name}: final response time: ${request}ms`);
  }
});

Das folgende Beispiel zeigt, wie man die Zeit zwischen den ersten und endgültigen Antwort-Headern misst.

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    const diff = entry.finalResponseHeadersStart - entry.responseStart;
    if ((entry.finalResponseHeadersStart > 0) & (diff > 0)) {
      console.log(
        `${entry.name}: time between first and final response start: ${diff}ms`,
      );
    }
  });
});

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

Cross-Origin-Timing-Informationen

Wenn der Wert der finalResponseHeadersStart-Eigenschaft 0 ist, könnte die Ressource eine Cross-Origin-Anfrage sein. Um Cross-Origin-Timing-Informationen anzeigen zu können, muss der Timing-Allow-Origin HTTP-Antwortheader gesetzt werden.

Zum Beispiel, um https://developer.mozilla.org zu erlauben, Timing-Ressourcen zu sehen, sollte die Cross-Origin-Ressource senden:

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

Spezifikationen

Specification
Resource Timing
# dom-performanceresourcetiming-finalresponseheadersstart

Browser-Kompatibilität

Siehe auch