Spec-Zone.ru › Web APIs

Производительность: метод 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.
SyntaxError DOMException

Именованной отметки не существует.

  • Конечная отметка указана с помощью endMark или measureOptions.end, но в буфере производительности нет PerformanceMark с соответствующим именем.
  • Конечная отметка указана с помощью endMark или measureOptions.end, но её нельзя преобразовать, чтобы она соответствовала считываемому только для чтения атрибуту в интерфейсе PerformanceTiming.
  • Начальная отметка указана с помощью startMark или measureOptions.start, но в буфере производительности нет PerformanceMark с соответствующим именем.
  • Начальная отметка указана с помощью startMark или measureOptions.start, но её нельзя преобразовать, чтобы она соответствовала считываемому только для чтения атрибуту в интерфейсе PerformanceTiming.
DataCloneError DOMException

Значение 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API