PerformanceEventTiming

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Das PerformanceEventTiming-Interface der Event Timing API bietet Einblicke in die Latenz bestimmter Ereignistypen, die durch Benutzerinteraktionen ausgelöst werden.

Beschreibung

Diese API ermöglicht Einblicke in langsame Ereignisse, indem sie Zeitstempel von Ereignissen und deren Dauer für bestimmte Ereignistypen bereitstellt (siehe unten). Beispielsweise können Sie die Zeit zwischen einer Benutzeraktion und dem Start ihres Ereignishandlers überwachen oder die Zeit, die ein Ereignishandler benötigt, um abzulaufen.

Diese API ist besonders nützlich zur Messung der Interaction to Next Paint (INP): Dies ist die längste Zeit (abzüglich einiger Ausreißer) von dem Zeitpunkt, zu dem ein Benutzer mit Ihrer App interagiert, bis zu dem Zeitpunkt, an dem der Browser tatsächlich auf diese Interaktion reagieren konnte.

Normalerweise arbeiten Sie mit PerformanceEventTiming-Objekten, indem Sie eine PerformanceObserver-Instanz erstellen und dann ihre observe()-Methode aufrufen, wobei Sie "event" oder "first-input" als Wert der type-Option übergeben. Der Rückruf des PerformanceObserver-Objekts wird dann mit einer Liste von PerformanceEventTiming-Objekten aufgerufen, die Sie analysieren können. Siehe das Beispiel unten für mehr.

Standardmäßig werden PerformanceEventTiming-Einträge angezeigt, wenn ihre duration 104 ms oder mehr beträgt. Forschungsergebnisse legen nahe, dass Benutzereingaben, die nicht innerhalb von 100 ms verarbeitet werden, als langsam gelten, und 104 ms ist das erste Vielfache von 8, das größer ist als 100 ms (aus Sicherheitsgründen wird diese API auf das nächste Vielfache von 8 ms gerundet). Sie können jedoch den PerformanceObserver auf einen anderen Schwellenwert einstellen, indem Sie die Option durationThreshold in der observe()-Methode verwenden.

Dieses Interface erbt Methoden und Eigenschaften von seinem übergeordneten Element, PerformanceEntry:

PerformanceEntry PerformanceEventTiming

Exponierte Ereignisse

Die folgenden Ereignistypen werden von der Event Timing API bereitgestellt:

Klickevents [`auxclick`](/de/docs/Web/API/Element/auxclick_event), [`click`](/de/docs/Web/API/Element/click_event), [`contextmenu`](/de/docs/Web/API/Element/contextmenu_event), [`dblclick`](/de/docs/Web/API/Element/dblclick_event)
Kompositionsevents [`compositionend`](/de/docs/Web/API/Element/compositionend_event), [`compositionstart`](/de/docs/Web/API/Element/compositionstart_event), [`compositionupdate`](/de/docs/Web/API/Element/compositionupdate_event)
Drag-&-Drop-Events [`dragend`](/de/docs/Web/API/HTMLElement/dragend_event), [`dragenter`](/de/docs/Web/API/HTMLElement/dragenter_event), [`dragleave`](/de/docs/Web/API/HTMLElement/dragleave_event), [`dragover`](/de/docs/Web/API/HTMLElement/dragover_event), [`dragstart`](/de/docs/Web/API/HTMLElement/dragstart_event), [`drop`](/de/docs/Web/API/HTMLElement/drop_event)
Inputevents [`beforeinput`](/de/docs/Web/API/Element/beforeinput_event), [`input`](/de/docs/Web/API/Element/input_event)
Tastaturevents [`keydown`](/de/docs/Web/API/Element/keydown_event), [`keypress`](/de/docs/Web/API/Element/keypress_event), [`keyup`](/de/docs/Web/API/Element/keyup_event)
Mausevents [`mousedown`](/de/docs/Web/API/Element/mousedown_event), [`mouseenter`](/de/docs/Web/API/Element/mouseenter_event), [`mouseleave`](/de/docs/Web/API/Element/mouseleave_event), [`mouseout`](/de/docs/Web/API/Element/mouseout_event), [`mouseover`](/de/docs/Web/API/Element/mouseover_event), [`mouseup`](/de/docs/Web/API/Element/mouseup_event)
Pointerevents [`pointerover`](/de/docs/Web/API/Element/pointerover_event), [`pointerenter`](/de/docs/Web/API/Element/pointerenter_event), [`pointerdown`](/de/docs/Web/API/Element/pointerdown_event), [`pointerup`](/de/docs/Web/API/Element/pointerup_event), [`pointercancel`](/de/docs/Web/API/Element/pointercancel_event), [`pointerout`](/de/docs/Web/API/Element/pointerout_event), [`pointerleave`](/de/docs/Web/API/Element/pointerleave_event), [`gotpointercapture`](/de/docs/Web/API/Element/gotpointercapture_event), [`lostpointercapture`](/de/docs/Web/API/Element/lostpointercapture_event)
Touch-Events [`touchstart`](/de/docs/Web/API/Element/touchstart_event), [`touchend`](/de/docs/Web/API/Element/touchend_event), [`touchcancel`](/de/docs/Web/API/Element/touchcancel_event)

Beachten Sie, dass die folgenden Ereignisse nicht in der Liste enthalten sind, da sie kontinuierliche Ereignisse sind und derzeit keine aussagekräftigen Ereigniszählungen oder Leistungsmetriken abgeleitet werden können: mousemove, pointermove, pointerrawupdate, touchmove, wheel, drag.

Um eine Liste aller sichtbaren Ereignisse zu erhalten, können Sie auch Schlüssel in der performance.eventCounts-Karte nachschlagen:

js
const exposedEventsList = [...performance.eventCounts.keys()];

Konstruktor

Dieses Interface hat keinen eigenen Konstruktor. Siehe das Beispiel unten, um zu erfahren, wie Sie typischerweise die Informationen erhalten, die das PerformanceEventTiming-Interface enthält.

Instanz-Eigenschaften

Dieses Interface erweitert die folgenden PerformanceEntry-Eigenschaften für Ereignis-Timing-Performance-Entry-Typen, indem es sie wie folgt qualifiziert:

PerformanceEntry.duration Nur lesbar

Gibt einen DOMHighResTimeStamp zurück, der die Zeit von startTime bis zum nächsten Rendering-Paint darstellt (auf die nächste 8 ms gerundet).

PerformanceEntry.entryType Nur lesbar

Gibt "event" (für lange Ereignisse) oder "first-input" (für die erste Benutzerinteraktion) zurück.

PerformanceEntry.name Nur lesbar

Gibt den Typ des zugehörigen Ereignisses zurück.

PerformanceEntry.startTime Nur lesbar

Gibt einen DOMHighResTimeStamp zurück, der die timestamp-Eigenschaft des zugehörigen Ereignisses darstellt. Dies ist die Zeit, zu der das Ereignis erstellt wurde, und kann als Ersatz für die Zeit angesehen werden, zu der die Benutzerinteraktion aufgetreten ist.

Dieses Interface unterstützt auch die folgenden Eigenschaften:

PerformanceEventTiming.cancelable Nur lesbar

Gibt die cancelable-Eigenschaft des zugehörigen Ereignisses zurück.

PerformanceEventTiming.interactionId Nur lesbar Experimentell

Gibt die ID zurück, die die Benutzerinteraktion, die das zugehörige Ereignis ausgelöst hat, eindeutig identifiziert.

PerformanceEventTiming.processingStart Nur lesbar

Gibt einen DOMHighResTimeStamp zurück, der die Zeit darstellt, zu der die Ereignisdisposition begann. Um die Zeit zwischen einer Benutzeraktion und dem Beginn der Ausführung des Ereignishandlers zu messen, berechnen Sie processingStart-startTime.

PerformanceEventTiming.processingEnd Nur lesbar

Gibt einen DOMHighResTimeStamp zurück, der die Zeit darstellt, zu der die Ereignisdisposition endete. Um die Zeit zu messen, die der Ereignishandler für die Ausführung benötigt hat, berechnen Sie processingEnd-processingStart.

PerformanceEventTiming.target Nur lesbar

Gibt das letzte Ziel des zugehörigen Ereignisses zurück, sofern es nicht entfernt wurde.

Instanz-Methoden

PerformanceEventTiming.toJSON()

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

Beispiele

Abrufen von Ereignis-Timing-Informationen

Um Ereignis-Timing-Informationen abzurufen, erstellen Sie eine PerformanceObserver-Instanz und rufen dann ihre observe()-Methode auf, wobei Sie "event" oder "first-input" als Wert der type-Option übergeben. Sie müssen auch buffered auf true setzen, um auf Ereignisse zuzugreifen, die der User Agent während der Erstellung des Dokuments zwischengespeichert hat. Der Rückruf des PerformanceObserver-Objekts wird dann mit einer Liste von PerformanceEventTiming-Objekten aufgerufen, die Sie analysieren können.

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    // Full duration
    const duration = entry.duration;

    // Input delay (before processing event)
    const delay = entry.processingStart - entry.startTime;

    // Synchronous event processing time
    // (between start and end dispatch)
    const eventHandlerTime = entry.processingEnd - entry.processingStart;
    console.log(`Total duration: ${duration}`);
    console.log(`Event delay: ${delay}`);
    console.log(`Event handler duration: ${eventHandlerTime}`);
  });
});

// Register the observer for events
observer.observe({ type: "event", buffered: true });

Sie können auch einen anderen durationThreshold festlegen. Der Standardwert ist 104 ms und die minimal mögliche Dauergrenze beträgt 16 ms.

js
observer.observe({ type: "event", durationThreshold: 16, buffered: true });

Spezifikationen

Specification
Event Timing API
# sec-performance-event-timing

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch