PerformanceEventTiming
Baseline 2025>
Neu verfügbar
Seit Dezember 2025 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.
Das PerformanceEventTiming-Interface der Event Timing API liefert Informationen über die Latenz bestimmter Ereignistypen, die durch Benutzerinteraktionen ausgelöst werden.
Beschreibung
Diese API macht langsame Ereignisse sichtbar, indem sie Zeitstempel und Dauer für bestimmte Ereignistypen bereitstellt (siehe unten). So können Sie beispielsweise die Zeit zwischen einer Benutzeraktion und dem Beginn der Ausführung ihres Event-Handlers messen oder ermitteln, wie lange die Ausführung eines Event-Handlers dauert.
Diese API ist besonders nützlich, um die Interaction to Next Paint (INP) zu messen: die längste Zeitspanne (abzüglich einiger Ausreißer) zwischen der Interaktion eines Benutzers mit Ihrer App und dem Zeitpunkt, an dem der Browser tatsächlich auf diese Interaktion reagieren konnte.
Üblicherweise arbeiten Sie mit PerformanceEventTiming-Objekten, indem Sie eine PerformanceObserver-Instanz erstellen und anschließend deren Methode observe() aufrufen. Dabei übergeben Sie "event" oder "first-input" als Wert der Option type. Der Callback des PerformanceObserver-Objekts wird dann mit einer Liste von PerformanceEventTiming-Objekten aufgerufen, die Sie analysieren können. Weitere Informationen finden Sie im Beispiel unten.
Standardmäßig werden PerformanceEventTiming-Einträge bereitgestellt, wenn ihre duration mindestens 104 ms beträgt. Forschungsergebnisse deuten darauf hin, dass eine Benutzereingabe als langsam gilt, wenn sie nicht innerhalb von 100 ms verarbeitet wird. 104 ms ist das erste Vielfache von 8, das größer als 100 ms ist (aus Sicherheitsgründen rundet diese API auf das nächste Vielfache von 8 ms).
Sie können für den PerformanceObserver jedoch einen anderen Schwellenwert festlegen, indem Sie die Option durationThreshold in der Methode observe() verwenden.
Dieses Interface erbt Methoden und Eigenschaften von seinem übergeordneten Interface PerformanceEntry:
Bereitgestellte Ereignisse
Die Event Timing API stellt die folgenden Ereignistypen bereit:
| Klickereignisse | [`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) |
|---|---|
| Kompositionsereignisse | [`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-and-Drop-Ereignisse | [`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) |
| Eingabeereignisse | [`beforeinput`](/de/docs/Web/API/Element/beforeinput_event), [`input`](/de/docs/Web/API/Element/input_event) |
| Tastaturereignisse | [`keydown`](/de/docs/Web/API/Element/keydown_event), [`keypress`](/de/docs/Web/API/Element/keypress_event), [`keyup`](/de/docs/Web/API/Element/keyup_event) |
| Mausereignisse | [`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) |
| Pointer-Ereignisse | [`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-Ereignisse | [`touchstart`](/de/docs/Web/API/Element/touchstart_event), [`touchend`](/de/docs/Web/API/Element/touchend_event), [`touchcancel`](/de/docs/Web/API/Element/touchcancel_event) |
Die folgenden Ereignisse sind nicht in der Liste enthalten, da es sich um kontinuierliche Ereignisse handelt und sich für sie derzeit keine aussagekräftigen Ereigniszahlen oder Leistungsmetriken ermitteln lassen: mousemove, pointermove,
pointerrawupdate, touchmove, wheel, drag.
Um eine Liste aller bereitgestellten Ereignisse zu erhalten, können Sie auch die Schlüssel in der Map performance.eventCounts nachschlagen:
const exposedEventsList = [...performance.eventCounts.keys()];
Konstruktor
Dieses Interface hat keinen eigenen Konstruktor. Wie Sie die Informationen, die das PerformanceEventTiming-Interface enthält, üblicherweise abrufen, zeigt das Beispiel unten.
Instanzeigenschaften
Dieses Interface erweitert die folgenden Eigenschaften von PerformanceEntry für Performance-Einträge des Typs Event Timing mit den jeweils beschriebenen Bedeutungen:
PerformanceEntry.durationSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der die Zeitspanne vonstartTimebis zur nächsten Darstellung auf dem Bildschirm angibt (auf die nächsten 8 ms gerundet). PerformanceEntry.entryTypeSchreibgeschützt-
Gibt
"event"(für lang andauernde Ereignisse) oder"first-input"(für die erste Benutzerinteraktion) zurück. PerformanceEntry.nameSchreibgeschützt-
Gibt den Typ des zugehörigen Ereignisses zurück.
PerformanceEntry.startTimeSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der die Eigenschafttimestampdes zugehörigen Ereignisses angibt. Dies ist der Zeitpunkt, zu dem das Ereignis erstellt wurde, und kann als Näherungswert für den Zeitpunkt der Benutzerinteraktion betrachtet werden.
Dieses Interface unterstützt außerdem die folgenden Eigenschaften:
PerformanceEventTiming.cancelableSchreibgeschützt-
Gibt die Eigenschaft
cancelabledes zugehörigen Ereignisses zurück. PerformanceEventTiming.interactionIdSchreibgeschützt-
Gibt die ID zurück, die die Benutzerinteraktion, die das zugehörige Ereignis ausgelöst hat, eindeutig identifiziert.
PerformanceEventTiming.processingStartSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der den Zeitpunkt angibt, zu dem die Weitergabe des Ereignisses begann. Um die Zeit zwischen einer Benutzeraktion und dem Beginn der Ausführung des Event-Handlers zu messen, berechnen SieprocessingStart-startTime. PerformanceEventTiming.processingEndSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der den Zeitpunkt angibt, zu dem die Weitergabe des Ereignisses endete. Um die Ausführungsdauer des Event-Handlers zu messen, berechnen SieprocessingEnd-processingStart. PerformanceEventTiming.targetSchreibgeschützt-
Gibt das letzte Ziel des zugehörigen Ereignisses zurück, sofern es nicht entfernt wurde.
Instanzmethoden
PerformanceEventTiming.toJSON()-
Gibt ein als JSON serialisierbares einfaches Objekt zurück, das das
PerformanceEventTiming-Objekt repräsentiert. Wird vonJSON.stringify()automatisch aufgerufen.
Beispiele
>Informationen zum Event Timing abrufen
Um Informationen zum Event Timing abzurufen, erstellen Sie eine PerformanceObserver-Instanz und rufen anschließend deren Methode observe() auf. Dabei übergeben Sie "event" oder "first-input" als Wert der Option type. Außerdem müssen Sie buffered auf true setzen, um Zugriff auf Ereignisse zu erhalten, die der User Agent während der Erstellung des Dokuments zwischengespeichert hat. Der Callback des PerformanceObserver-Objekts wird dann mit einer Liste von PerformanceEventTiming-Objekten aufgerufen, die Sie analysieren können.
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 beträgt 104 ms; der niedrigste mögliche Schwellenwert für die Dauer beträgt 16 ms.
observer.observe({ type: "event", durationThreshold: 16, buffered: true });
Spezifikationen
| Spezifikation |
|---|
| Event Timing API> # sec-performance-event-timing> |