PerformanceResourceTiming
Базовая Широко доступна *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2017 года.
* Некоторые части этой функции могут иметь разный уровень поддержки.
Примечание: Эта функция доступна в Веб-воркерах.
Интерфейс PerformanceResourceTiming позволяет извлекать и анализировать подробные данные о времени загрузки ресурсов приложения. Приложение может использовать эти метрики времени, чтобы определить, например, сколько времени занимает загрузка определенного ресурса, такого как XMLHttpRequest, <SVG>, изображение или скрипт.
Описание
Свойства интерфейса создают временную шкалу загрузки ресурса с отметками времени высокой точности для сетевых событий, таких как время начала и окончания перенаправления, начало и окончание получения, начало и окончание поиска DNS, время начала и окончания ответа и многое другое. Кроме того, интерфейс расширяет PerformanceEntry другими свойствами, которые предоставляют данные о размере полученного ресурса, а также типе ресурса, инициировавшего запрос.
Типичные метрики времени загрузки ресурсов
Свойства этого интерфейса позволяют рассчитывать определенные метрики времени загрузки ресурсов. Распространенные случаи использования включают:
- Измерение времени рукопожатия TCP (
connectEnd-connectStart) - Измерение времени поиска DNS (
domainLookupEnd-domainLookupStart) - Измерение времени перенаправления (
redirectEnd-redirectStart) - Измерение времени промежуточного запроса (
firstInterimResponseStart-finalResponseHeadersStart) - Измерение времени запроса (
responseStart-requestStart) - Измерение времени согласования TLS (
requestStart-secureConnectionStart) - Измерение времени получения (без перенаправлений) (
responseEnd-fetchStart) - Измерение времени обработки ServiceWorker (
fetchStart-workerStart) - Проверка, был ли контент сжат (
decodedBodySizeне должно бытьencodedBodySize) - Проверка, были ли задействованы кэши (
transferSizeдолжны быть0) - Проверка, используются ли современные и быстрые протоколы (
nextHopProtocolдолжен быть HTTP/2 или HTTP/3) - Проверка, являются ли правильные ресурсы блокирующими для рендеринга (
renderBlockingStatus)
Свойства экземпляра
Унаследовано от PerformanceEntry
Этот интерфейс расширяет следующие свойства PerformanceEntry для типов входов производительности ресурсов, квалифицируя и ограничивая их следующим образом:
-
PerformanceEntry.durationТолько для чтения -
Возвращает
timestamp, который является разницей между свойствамиresponseEndиstartTime. -
PerformanceEntry.entryTypeТолько для чтения -
Возвращает
"resource". -
PerformanceEntry.nameТолько для чтения -
Возвращает URL ресурса.
-
PerformanceEntry.startTimeТолько для чтения -
Возвращает
timestampдля момента начала загрузки ресурса. Это значение эквивалентноPerformanceResourceTiming.fetchStart.
Отметки времени
Интерфейс поддерживает следующие свойства отметки времени, которые вы можете увидеть на диаграмме, и они перечислены в порядке их записи при загрузке ресурса. В навигации слева представлен алфавитный список.
-
PerformanceResourceTiming.redirectStartТолько для чтения -
DOMHighResTimeStamp, представляющая время начала загрузки, вызвавшей перенаправление. -
PerformanceResourceTiming.redirectEndТолько для чтения -
DOMHighResTimeStampсразу после получения последнего байта ответа последнего перенаправления. -
PerformanceResourceTiming.workerStartТолько для чтения -
Возвращает
DOMHighResTimeStampнепосредственно перед отправкойFetchEvent, если поток Service Worker уже запущен, или непосредственно перед запуском потока Service Worker, если он еще не запущен. Если ресурс не перехватывается потоком Service Worker, свойство всегда возвращает 0. -
PerformanceResourceTiming.fetchStartТолько для чтения -
DOMHighResTimeStampнепосредственно перед тем, как браузер начинает загрузку ресурса. -
PerformanceResourceTiming.domainLookupStartТолько для чтения -
DOMHighResTimeStampнепосредственно перед тем, как браузер начинает поиск доменного имени ресурса. -
PerformanceResourceTiming.domainLookupEndТолько для чтения -
DOMHighResTimeStamp, представляющая время сразу после завершения браузером поиска доменного имени ресурса. -
PerformanceResourceTiming.connectStartТолько для чтения -
DOMHighResTimeStampнепосредственно перед тем, как браузер начинает устанавливать соединение с сервером для получения ресурса. -
PerformanceResourceTiming.secureConnectionStartТолько для чтения -
DOMHighResTimeStampнепосредственно перед тем, как браузер начинает процесс рукопожатия для обеспечения безопасности текущего соединения. -
PerformanceResourceTiming.connectEndТолько для чтения -
DOMHighResTimeStampсразу после того, как браузер завершил установку соединения с сервером для получения ресурса. -
PerformanceResourceTiming.requestStartТолько для чтения -
DOMHighResTimeStampнепосредственно перед тем, как браузер начнет запрос ресурса у сервера. -
PerformanceResourceTiming.firstInterimResponseStartЭкспериментально Только для чтения -
DOMHighResTimeStamp, представляющая время промежуточного ответа (например, 100 Continue или 103 Early Hints). -
PerformanceResourceTiming.responseStartТолько для чтения -
DOMHighResTimeStampсразу после того, как браузер получил первый байт ответа от сервера (который может быть промежуточным ответом). -
PerformanceResourceTiming.finalResponseHeadersStartЭкспериментально Только для чтения -
DOMHighResTimeStamp, представляющая время ответа окончательных заголовков (например, 200 Success) после любого промежуточного времени ответа. -
PerformanceResourceTiming.responseEndТолько для чтения -
DOMHighResTimeStampсразу после того, как браузер получил последний байт ресурса или непосредственно перед закрытием транспортного соединения, в зависимости от того, что произойдет раньше.
Дополнительная информация о ресурсе
Кроме того, этот интерфейс предоставляет следующие свойства, содержащие дополнительную информацию о ресурсе:
-
PerformanceResourceTiming.contentTypeТолько для чтения Экспериментальная -
Строка, представляющая собой минимизированную и стандартизированную версию MIME-типа полученного ресурса.
-
PerformanceResourceTiming.decodedBodySizeТолько для чтения -
Число, представляющее размер (в октетах) полученного из запроса (HTTP или кеша) тела сообщения после удаления применённого кодирования.
-
PerformanceResourceTiming.deliveryTypeЭкспериментальная Только для чтения -
Указывает, как был доставлен ресурс — например, из кеша или из навигационного предварительного получения.
-
PerformanceResourceTiming.encodedBodySizeТолько для чтения -
Число, представляющее размер (в октетах) полученного из запроса (HTTP или кеша) тела полезной нагрузки до удаления применённого кодирования.
-
PerformanceResourceTiming.initiatorTypeТолько для чтения -
Строка, представляющая веб-платформенную функцию, которая инициировала запись производительности.
-
PerformanceResourceTiming.nextHopProtocolТолько для чтения -
Строка, представляющая сетевой протокол, используемый для получения ресурса, как определено в ALPN Protocol ID (RFC7301).
-
PerformanceResourceTiming.renderBlockingStatusТолько для чтения -
Строка, представляющая состояние блокировки рендеринга. Либо
"blocking"или"non-blocking". -
PerformanceResourceTiming.responseStatusТолько для чтения -
Число, представляющее код состояния HTTP-ответа, возвращённый при получении ресурса.
-
PerformanceResourceTiming.transferSizeТолько для чтения -
Число, представляющее размер (в октетах) полученного ресурса. Размер включает в себя поля заголовка ответа и тело полезной нагрузки ответа.
-
PerformanceResourceTiming.serverTimingТолько для чтения -
Массив записей
PerformanceServerTiming, содержащих метрики времени сервера.
Методы экземпляра
PerformanceResourceTiming.toJSON()-
Возвращает JSON-представление объекта
PerformanceResourceTiming.
Примеры
Регистрация информации о времени обработки ресурсов
Пример использования PerformanceObserver, который уведомляет о новых записях производительности resource по мере их записи в временной шкале производительности браузера. Используйте опцию buffered для доступа к записям, которые были созданы до создания наблюдателя.
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry);
});
});
observer.observe({ type: "resource", buffered: true });
Пример использования Performance.getEntriesByType(), который показывает только записи производительности resource в временной шкале производительности браузера на момент вызова этого метода:
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
console.log(entry);
});
Требования безопасности
Информация о времени обработки кросс-доменных запросов
Многие свойства времени обработки ресурсов ограничены и возвращают 0 или пустую строку, когда ресурс является кросс-доменным запросом. Чтобы предоставить информацию о времени обработки кросс-доменных запросов, необходимо установить HTTP-заголовок Timing-Allow-Origin.
Например, чтобы позволить https://developer.mozilla.org видеть информацию о времени обработки ресурсов, кросс-доменный ресурс должен отправлять:
Timing-Allow-Origin: https://developer.mozilla.org
Спецификации
| Спецификация |
|---|
| Время обработки ресурсов # resources-included-in-the-performanceresourcetiming-interface |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
PerformanceResourceTiming |
29 | 12 | 35 | 16 | 11 | 29 | 35 | 16 | 11 | 2.0 | 4.4 |
|---|---|---|---|---|---|---|---|---|---|---|---|
connectEnd |
43 | 12 | 35 | 32 | 11 | 43 | 35 | 32 | 11 | 4.0 | 43 |
connectStart |
43 | 12 | 35 | 32 | 11 | 43 | 35 | 32 | 11 | 4.0 | 43 |
contentType |
Нет | Нет | 129 | Нет | Нет | Нет | 129 | Нет | Нет | Нет | Нет |
decodedBodySize |
54 | 17 | 45 | 41 | 16.4 | 54 | 45 | 41 | 16.4 | 6.0 | 54 |
deliveryType |
117 | 117 | Нет | 103 | Нет | 117 | Нет | 78 | Нет | 24.0 | 117 |
domainLookupEnd |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
domainLookupStart |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
encodedBodySize |
54 | 17 | 45 | 41 | 16.4 | 54 | 45 | 41 | 16.4 | 6.0 | 54 |
fetchStart |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
finalResponseHeadersStart |
133115–133 | 133115–133 | Нет | 101 | Нет | 133115–133 | Нет | 77 | Нет | 23.0 | 133115–133 |
firstInterimResponseStart |
115 | 115 | Нет | 101 | Нет | 115 | Нет | 77 | Нет | 23.0 | 115 |
initiatorType |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
nextHopProtocol |
61 | 17 | 45 | 48 | 11 | 61 | 45 | 45 | 11 | 8.0 | 61 |
redirectEnd |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
redirectStart |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
renderBlockingStatus |
107 | 107 | Нет | 93 | Нет | 107 | Нет | 73 | Нет | 21.0 | 107 |
requestStart |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
responseEnd |
43 | 12 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
responseStart |
133115–133Возвращает время финального ответа, даже если доступен промежуточный ответ. |
12 | 35 |
101Возвращает время финального ответа, даже если доступен промежуточный ответ. |
11 | 133115–133Возвращает время финального ответа, даже если доступен промежуточный ответ. |
35 |
77Возвращает время финального ответа, даже если доступен промежуточный ответ. |
11 |
23.0Возвращает время финального ответа, даже если доступен промежуточный ответ. |
133115–133Возвращает время финального ответа, даже если доступен промежуточный ответ. |
responseStatus |
109 | 109 | 129 | 95 | Нет | 109 | 129 | 74 | Нет | 21.0 | 109 |
secureConnectionStart |
43 | 18 | 35 | 30 | 11 | 43 | 35 | 30 | 11 | 4.0 | 43 |
serverTiming |
65 | 79 | 61 | 52 | 16.4 | 65 | 61 | 47 | 16.4 | 9.0 | 65 |
toJSON |
45 | 16 | 35 | 32 | 11 | 45 | 35 | 32 | 11 | 5.0 | 45 |
transferSize |
54 | 17 | 45 | 41 | 16.4 | 54 | 45 | 41 | 16.4 | 6.0 | 54 |
workerStart |
46 | 16 | 58 | 32 | 11 | 46 | 58 | 32 | 11 | 5.0 | 46 |
|---|---|---|---|---|---|---|---|---|---|---|---|
worker_support |
43 | 15 | 60 | 32 | 12 | 43 | 60 | 32 | Нет | 4.0 | 43 |
См. также
© 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/PerformanceResourceTiming