PerformanceEventTiming
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Интерфейс PerformanceEventTiming API событий тайминга предоставляет информацию о задержке определенных типов событий, запускаемых пользователем.
Описание
Этот API обеспечивает просмотр медленных событий, предоставляя отметки времени и длительность для определенных типов событий (см. ниже). Например, вы можете отслеживать время между действием пользователя и началом его обработчика событий или время выполнения обработчика событий.
Этот API особенно полезен для измерения Interaction to Next Paint (INP): максимального времени (за вычетом некоторых выбросов) с момента взаимодействия пользователя с вашим приложением до момента, когда браузер фактически смог ответить на это взаимодействие.
Обычно вы работаете с объектами PerformanceEventTiming путем создания экземпляра PerformanceObserver и вызова его метода observe(), передав в него "event" или "first-input" в качестве значения опции type. Затем обратный вызов объекта PerformanceObserver будет вызван со списком объектов PerformanceEventTiming, которые вы можете проанализировать. Подробнее см. пример ниже.
По умолчанию записи PerformanceEventTiming отображаются, когда их duration составляет 104 мс или больше. Исследования показывают, что ввод пользователя, который не обрабатывается в течение 100 мс, считается медленным, а 104 мс — это первое кратное 8, большее 100 мс (по соображениям безопасности этот API округляется до ближайшего кратного 8 мс). Однако вы можете установить PerformanceObserver на другой порог с помощью опции durationThreshold в методе observe().
Этот интерфейс наследует методы и свойства от своего родителя, PerformanceEntry:
Отображаемые события
API тайминга событий отображает следующие типы событий:
| События клика | auxclick, click, contextmenu, dblclick |
|---|---|
| События составления | compositionend, compositionstart, compositionupdate |
| События перетаскивания и сброса | dragend, dragenter, dragleave, dragover, dragstart, drop |
| События ввода | beforeinput, input |
| События клавиатуры | keydown, keypress, keyup |
| События мыши | mousedown, mouseenter, mouseleave, mouseout, mouseover, mouseup |
| События указателя | pointerover, pointerenter, pointerdown, pointerup, pointercancel, pointerout, pointerleave, gotpointercapture, lostpointercapture |
| События касания | touchstart, touchend, touchcancel |
Обратите внимание, что следующие события не включены в список, потому что они являются непрерывными событиями, и на данном этапе нельзя получить значимые счетчики событий или метрики производительности: mousemove, pointermove, pointerrawupdate, touchmove, wheel, drag.
Чтобы получить список всех отображаемых событий, вы также можете найти ключи в карте performance.eventCounts:
const exposedEventsList = [...performance.eventCounts.keys()];
Конструктор
У этого интерфейса нет собственного конструктора. См. пример ниже, чтобы узнать, как получить информацию, хранящуюся в интерфейсе PerformanceEventTiming.
Свойства экземпляра
Этот интерфейс расширяет следующие свойства PerformanceEntry для типов записей производительности тайминга событий следующим образом:
-
PerformanceEntry.durationТолько для чтения -
Возвращает
DOMHighResTimeStamp, представляющий время отstartTimeдо следующей отрисовки (округлено до ближайших 8 мс). -
PerformanceEntry.entryTypeТолько для чтения -
Возвращает
"event"(для длительных событий) или"first-input"(для первого взаимодействия пользователя). -
PerformanceEntry.nameТолько для чтения -
Возвращает тип связанного события.
-
PerformanceEntry.startTimeТолько для чтения -
Возвращает
DOMHighResTimeStamp, представляющий свойствоtimestampсвязанного события. Это время создания события и может рассматриваться как прокси для времени взаимодействия пользователя.
Этот интерфейс также поддерживает следующие свойства:
-
PerformanceEventTiming.cancelableТолько для чтения -
Возвращает свойство
cancelableсвязанного события. -
PerformanceEventTiming.interactionIdТолько для чтения Экспериментально -
Возвращает идентификатор, который однозначно определяет взаимодействие пользователя, вызвавшее связанное событие.
-
PerformanceEventTiming.processingStartТолько для чтения -
Возвращает
DOMHighResTimeStamp, представляющий время начала отправки события. Чтобы измерить время между действием пользователя и началом работы обработчика событий, вычислитеprocessingStart-startTime. -
PerformanceEventTiming.processingEndТолько для чтения -
Возвращает
DOMHighResTimeStamp, представляющий время окончания отправки события. Чтобы измерить время выполнения обработчика событий, вычислитеprocessingEnd-processingStart. -
PerformanceEventTiming.targetТолько для чтения -
Возвращает последний целевой объект связанного события, если он не удалён.
Методы экземпляра
PerformanceEventTiming.toJSON()-
Возвращает JSON-представление объекта
PerformanceEventTiming.
Примеры
Получение информации о тайминге событий
Чтобы получить информацию о времени событий, создайте экземпляр PerformanceObserver, а затем вызовите его метод observe(), передав "event" или "first-input" в качестве значения параметра type. Вам также необходимо установить buffered на true для доступа к событиям, которые пользовательский агент буферизовал во время построения документа. Затем обратный вызов объекта PerformanceObserver будет вызван со списком объектов PerformanceEventTiming, которые вы можете проанализировать.
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 });
Вы также можете установить другое значение durationThreshold. Значение по умолчанию составляет 104 мс, а минимально возможное значение порога продолжительности — 16 мс.
observer.observe({ type: "event", durationThreshold: 16, buffered: true });
Спецификации
| Спецификация |
|---|
| API времени событий # sec-performance-event-timing |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
PerformanceEventTiming |
76 | 79 | 89 | 63 | Нет | 76 | 89 | 54 | Нет | 12.0 | 76 |
cancelable |
76 | 79 | 89 | 63 | Нет | 76 | 89 | 54 | Нет | 12.0 | 76 |
interactionId |
96 | 96 | Нет | 82 | Нет | 96 | Нет | 67 | Нет | 17.0 | 96 |
processingEnd |
76 | 79 | 89 | 63 | Нет | 76 | 89 | 54 | Нет | 12.0 | 76 |
processingStart |
76 | 79 | 89 | 63 | Нет | 76 | 89 | 54 | Нет | 12.0 | 76 |
target |
85 | 85 | 89 | 71 | Нет | 85 | 89 | 60 | Нет | 14.0 | 85 |
toJSON |
76 | 79 | 89 | 63 | Нет | 76 | 89 | 54 | Нет | 12.0 | 76 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEventTiming