Производительность: метод measure()
Базовая линия Широко доступна *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.
* Некоторые части этой функции могут иметь разную степень поддержки.
Примечание: Эта функция доступна в Web Workers.
Метод measure() создаёт объект PerformanceMeasure с именем, представляющий измерение времени между двумя отметками на временной шкале производительности браузера.
При измерении между двумя отметками есть начальная отметка и конечная отметка соответственно. Имя отметки времени называется измерением.
Синтаксис
measure(measureName) measure(measureName, startMark) measure(measureName, startMark, endMark) measure(measureName, measureOptions) measure(measureName, measureOptions, endMark)
Если указан только measureName, начальная отметка времени устанавливается в ноль, а конечная отметка времени (которая используется для расчёта продолжительности) — это значение, которое вернёт Performance.now().
Можно использовать строки для идентификации объектов PerformanceMark в качестве начальных и конечных отметок.
Чтобы указать только endMark, необходимо предоставить пустой объект measureOptions: performance.measure("myMeasure", {}, "myEndMarker").
Параметры
measureName-
Строка, представляющая имя измерения.
measureOptionsНеобязательно-
Объект, который может содержать параметры измерения.
detailНеобязательно-
Произвольные метаданные, которые необходимо включить в измерение. По умолчанию
null. Должен быть структурируемо клонируемым. startНеобязательно-
Отметка времени (
DOMHighResTimeStamp) для использования в качестве начального времени или строка, которая задаёт имяPerformanceMarkдля использования в качестве начального времени.Если это строка, которая задаёт имя
PerformanceMark, то она определяется так же, какstartMark. durationНеобязательно-
Продолжительность (в миллисекундах) между начальной и конечной отметками времени. Если не указано, по умолчанию используется
performance.now()— время, прошедшее с момента создания контекста. Если указано, необходимо также указатьstartилиend, но не оба. endНеобязательно-
Отметка времени (
DOMHighResTimeStamp) для использования в качестве конечного времени или строка, которая задаёт имяPerformanceMarkдля использования в качестве конечного времени.Если это строка, которая задаёт имя
PerformanceMark, то она определяется так же, какendMark.
startMarkНеобязательно-
Строка, которая задаёт имя
PerformanceMarkна временной шкале производительности. Для расчёта измерения будет использоваться свойствоPerformanceEntry.startTimeэтой отметки. endMarkНеобязательно-
Строка, которая задаёт имя
PerformanceMarkна временной шкале производительности. Для расчёта измерения будет использоваться свойствоPerformanceEntry.startTimeэтой отметки. Если вы хотите передать этот аргумент, вам также необходимо передатьstartMarkили пустойmeasureOptionsобъект.
Возвращаемое значение
Созданная запись PerformanceMeasure.
У возвращаемого измерения будут следующие значения свойств:
-
entryType— установлено на"measure". -
name— установлено на значение аргументаname. -
startTime— установлено на:- значения
timestamp, если оно указано вmeasureOptions.start. - значение
timestampначальной отметки, если она указана вmeasureOptions.startилиstartMark - значение времени, вычисленное по
measureOptions.endиmeasureOptions.duration(еслиmeasureOptions.startне указано) - 0, если оно не указано и не может быть определено по другим значениям.
- значения
-
duration— установлено наDOMHighResTimeStamp, которое представляет собой продолжительность измерения, вычисленную путём вычитанияstartTimeиз конечной отметки времени.Конечная отметка времени — это одно из:
- значение
timestamp, если оно указано вmeasureOptions.end. - значение
timestampконечной отметки, если она указана вmeasureOptions.endилиendMark - значение времени, вычисленное по
measureOptions.startиmeasureOptions.duration(еслиmeasureOptions.endне указано) - значение, возвращаемое
Performance.now(), если конечная отметка не указана или не может быть определена по другим значениям.
- значение
-
detail— установлено на значение, переданное вmeasureOptions.
Исключения
TypeError-
Это может быть выброшено в любом случае, когда начало, конец или продолжительность могут быть неоднозначными:
- Оба
endMarkиmeasureOptionsуказаны. -
measureOptionsуказан сduration, но без указанияstartилиend. -
measureOptionsуказан со всемиstart,end, иduration.
- Оба
-
SyntaxErrorDOMException -
Именованной отметки не существует.
- Конечная отметка указана с помощью
endMarkилиmeasureOptions.end, но в буфере производительности нетPerformanceMarkс соответствующим именем. - Конечная отметка указана с помощью
endMarkилиmeasureOptions.end, но её нельзя преобразовать, чтобы она соответствовала считываемому только для чтения атрибуту в интерфейсеPerformanceTiming. - Начальная отметка указана с помощью
startMarkилиmeasureOptions.start, но в буфере производительности нетPerformanceMarkс соответствующим именем. - Начальная отметка указана с помощью
startMarkилиmeasureOptions.start, но её нельзя преобразовать, чтобы она соответствовала считываемому только для чтения атрибуту в интерфейсеPerformanceTiming.
- Конечная отметка указана с помощью
-
DataCloneErrorDOMException -
Значение
measureOptions.detailне являетсяnullи не может быть сериализовано с помощью алгоритма HTML «StructuredSerialize». RangeError-
Значение
measureOptions.detailне являетсяnullи память не может быть выделена во время сериализации с помощью алгоритма HTML «StructuredSerialize».
Примеры
Измерение продолжительности между именованными отметками
Исходя из двух ваших собственных отметок "login-started" и "login-finished", можно создать измерение под названием "login-duration", как показано в следующем примере. Возвращаемый объект PerformanceMeasure затем предоставит свойство duration, чтобы указать вам время, прошедшее между двумя отметками.
const loginMeasure = performance.measure( "login-duration", "login-started", "login-finished", ); console.log(loginMeasure.duration);
Измерение продолжительности с пользовательскими начальными и конечными отметками времени
Для выполнения более сложных измерений можно передать параметр measureOptions. Например, можно использовать свойство event.timeStamp из события щелчка по элементу в качестве начального времени.
performance.measure("login-click", {
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
Предоставление дополнительных деталей измерения
Свойство details можно использовать для предоставления дополнительной информации любого типа. Например, можно записать, какой HTML-элемент был нажат.
performance.measure("login-click", {
detail: { htmlElement: myElement.id },
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
Спецификации
| Спецификация |
|---|
| User Timing # dom-performance-measure |
Совместимость с браузерами
| Настольные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
measure |
2825–28 | 12 | 38 | 33 | 11 | 2825–28 | 42 | 33 | 11 | 1.5 | 4.4 |
measureOptions_parameter |
77 | 79 | 103 | 64 | 14.1 | 77 | 103 | 55 | 14.5 | 12.0 | 77 |
returns_performancemeasure |
78 | 79 | 103 | 65 | 14.1 | 78 | 103 | 56 | 14.5 | 12.0 | 78 |
© 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/Performance/measure