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.
Die PerformanceEventTiming-Schnittstelle der Event Timing API bietet Einblicke in die Latenz bestimmter Ereignistypen, die durch Benutzerinteraktionen ausgelöst werden.
Beschreibung
Diese API ermöglicht die Sichtbarkeit bei langsamen Ereignissen, indem sie Ereigniszeitstempel und Dauer für bestimmte Ereignistypen bereitstellt (siehe unten). Zum Beispiel können Sie die Zeit zwischen einer Benutzeraktion und dem Beginn ihres Ereignis-Handlers oder die Zeit, die ein Ereignis-Handler zum Ausführen benötigt, überwachen.
Diese API ist besonders nützlich für die Messung der Interaktion bis zur nächsten Wiedergabe (INP): der längsten Zeitspanne (abzüglich einiger Ausreißer) vom Punkt, an dem ein Benutzer mit Ihrer App interagiert, bis zu dem Punkt, an dem der Browser tatsächlich in der Lage war, auf diese Interaktion zu reagieren.
Normalerweise arbeiten Sie mit PerformanceEventTiming-Objekten, indem Sie eine Instanz von PerformanceObserver erstellen und dann deren observe()-Methode aufrufen, wobei Sie "event" oder "first-input" als Wert der type-Option übergeben. Der Callback des PerformanceObserver-Objekts wird dann mit einer Liste von PerformanceEventTiming-Objekten aufgerufen, die analysiert werden können. Siehe das nachfolgende Beispiel für mehr.
Standardmäßig werden PerformanceEventTiming-Einträge angezeigt, wenn ihre duration 104ms oder mehr beträgt. Forschungsergebnisse legen nahe, dass Benutzereingaben, die nicht innerhalb von 100ms bearbeitet werden, als langsam gelten und 104ms sind das erste Vielfache von 8, das größer als 100ms ist (aus Sicherheitsgründen wird diese API auf das nächste Vielfache von 8ms gerundet).
Sie können jedoch den PerformanceObserver auf einen anderen Schwellenwert einstellen, indem Sie die durationThreshold-Option in der observe()-Methode verwenden.
Diese Schnittstelle erbt Methoden und Eigenschaften von ihrem übergeordneten Element, PerformanceEntry:
Exponierte Ereignisse
Die folgenden Ereignistypen werden von der Event Timing API angezeigt:
| 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) |
|---|---|
| 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 & 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) |
| Zeigereignisse | [`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) |
Bitte beachten Sie, dass die folgenden Ereignisse nicht in der Liste enthalten sind, da es sich um kontinuierliche Ereignisse handelt und zu diesem Zeitpunkt keine aussagekräftigen Ereigniszählungen oder Leistungsmetriken erhalten werden können: mousemove, pointermove,
pointerrawupdate, touchmove, rad, drag.
Um eine Liste aller exponierten Ereignisse zu erhalten, können Sie auch Schlüssel in der performance.eventCounts Karte nachschlagen:
const exposedEventsList = [...performance.eventCounts.keys()];
Konstruktor
Diese Schnittstelle hat keinen eigenen Konstruktor. Siehe das nachfolgende Beispiel, um zu erfahren, wie Sie normalerweise die Informationen erhalten, die die PerformanceEventTiming-Schnittstelle bereitstellt.
Instanzeigenschaften
Diese Schnittstelle erweitert die folgenden PerformanceEntry-Eigenschaften für Ereignis-Timing-Leistungseintragstypen, indem sie wie folgt qualifiziert werden:
PerformanceEntry.durationSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der die Zeit vonstartTimebis zur nächsten Rendering-Wiedergabe darstellt (gerundet auf das nächste Vielfache von 8ms). PerformanceEntry.entryTypeSchreibgeschützt-
Gibt
"event"(für lange Ereignisse) oder"first-input"(für die erste Benutzerinteraktion) zurück. PerformanceEntry.nameSchreibgeschützt-
Gibt den Typ des zugeordneten Ereignisses zurück.
PerformanceEntry.startTimeSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der dietimestamp-Eigenschaft des zugeordneten Ereignisses darstellt. Dies ist die Zeit, zu der das Ereignis erstellt wurde und kann als Proxy für die Zeit betrachtet werden, zu der die Benutzerinteraktion stattfand.
Diese Schnittstelle unterstützt auch die folgenden Eigenschaften:
PerformanceEventTiming.cancelableSchreibgeschützt-
Gibt die
cancelable-Eigenschaft des zugeordneten Ereignisses zurück. PerformanceEventTiming.interactionIdSchreibgeschützt-
Gibt die ID zurück, die die Benutzerinteraktion, welche das zugeordnete Ereignis ausgelöst hat, eindeutig identifiziert.
PerformanceEventTiming.processingStartSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der die Zeit darstellt, zu der das Ereignisdispatch gestartet wurde. Um die Zeit zwischen einer Benutzeraktion und dem Zeitpunkt, an dem der Ereignis-Handler zu laufen beginnt, zu messen, berechnen SieprocessingStart-startTime. PerformanceEventTiming.processingEndSchreibgeschützt-
Gibt einen
DOMHighResTimeStampzurück, der die Zeit darstellt, zu der das Ereignisdispatch beendet wurde. Um die Zeit zu messen, die der Ereignis-Handler zum Ausführen benötigte, berechnen SieprocessingEnd-processingStart. PerformanceEventTiming.targetSchreibgeschützt-
Gibt das letzte Ziel des zugeordneten Ereignisses zurück, falls es nicht entfernt wird.
Instanzmethoden
PerformanceEventTiming.toJSON()-
Überschreibt die
PerformanceEntry.toJSON()-Methode, um eine JSON-Darstellung desPerformanceEventTiming-Objekts zurückzugeben.
Beispiele
Abrufen von Ereignis-Timing-Informationen
Um Ereignis-Timing-Informationen zu erhalten, erstellen Sie eine Instanz von PerformanceObserver und rufen Sie dann seine observe()-Methode auf, wobei Sie "event" oder "first-input" als Wert der type-Option übergeben. Sie müssen auch buffered auf true setzen, um Zugriff auf Ereignisse zu erhalten, die der Benutzeragent beim Erstellen des Dokuments gepuffert hat. Der Callback des PerformanceObserver-Objekts wird dann mit einer Liste von PerformanceEventTiming-Objekten aufgerufen, die analysiert werden 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 einstellen. Der Standardwert ist 104ms und der minimale mögliche Dauer-Schwellenwert ist 16ms.
observer.observe({ type: "event", durationThreshold: 16, buffered: true });
Spezifikationen
| Spezifikation |
|---|
| Event Timing API # sec-performance-event-timing |