Performance: `measure()` Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die measure()-Methode erstellt ein benanntes PerformanceMeasure-Objekt, das eine Zeitmessung zwischen zwei Markern in der Leistungstimeline des Browsers darstellt.

Beim Messen zwischen zwei Markern gibt es einen Startmarker und einen Endmarker. Der benannte Zeitstempel wird als Messung bezeichnet.

Syntax

js
measure(measureName)
measure(measureName, startMark)
measure(measureName, startMark, endMark)
measure(measureName, measureOptions)
measure(measureName, measureOptions, endMark)

Wenn nur measureName angegeben ist, wird der Startzeitstempel auf null gesetzt, und der Endzeitstempel (der zur Berechnung der Dauer verwendet wird) ist der Wert, der von Performance.now() zurückgegeben würde.

Sie können Zeichenfolgen verwenden, um PerformanceMark-Objekte als Start- und Endmarker zu identifizieren.

Um nur einen endMark anzugeben, müssen Sie ein leeres measureOptions-Objekt bereitstellen: performance.measure("myMeasure", {}, "myEndMarker").

Parameter

measureName

Ein String, der den Namen der Messung darstellt.

measureOptions Optional

Ein Objekt, das Messoptionen enthalten kann.

detail Optional

Beliebige Metadaten, die in die Messung aufgenommen werden sollen. Standardmäßig null. Muss strukturierbar klonbar sein.

start Optional

Zeitstempel (DOMHighResTimeStamp), der als Startzeit verwendet werden soll, oder ein String, der einen PerformanceMark benennt, der als Startzeit verwendet wird.

Wenn dies ein String ist, der einen PerformanceMark benennt, dann ist er auf die gleiche Weise wie startMark definiert.

duration Optional

Dauer (in Millisekunden) zwischen den Start- und Endzeitpunkten. Wenn weggelassen, wird dies standardmäßig auf performance.now() gesetzt; die Zeit, die seit Erstellung des Kontexts vergangen ist. Wenn angegeben, müssen Sie entweder start oder end angeben, aber nicht beide.

end Optional

Zeitstempel (DOMHighResTimeStamp), der als Endzeit verwendet werden soll, oder ein String, der einen PerformanceMark benennt, der als Endzeit verwendet wird.

Wenn dies ein String ist, der einen PerformanceMark benennt, dann ist er auf die gleiche Weise wie endMark definiert.

startMark Optional

Ein String, der einen PerformanceMark in der Leistungstimeline benennt. Die PerformanceEntry.startTime-Eigenschaft dieses Markers wird zur Berechnung der Messung verwendet.

endMark Optional

Ein String, der einen PerformanceMark in der Leistungstimeline benennt. Die PerformanceEntry.startTime-Eigenschaft dieses Markers wird zur Berechnung der Messung verwendet. Um dieses Argument zu übergeben, müssen Sie entweder startMark oder ein leeres measureOptions-Objekt übergeben.

Rückgabewert

Der erstellte PerformanceMeasure-Eintrag.

Die zurückgegebene Messung hat folgende Eigenschaftswerte:

  • entryType - auf "measure" gesetzt.

  • name - auf das name-Argument gesetzt.

  • startTime - gesetzt auf:

    • einen timestamp, wenn im measureOptions.start angegeben.
    • den timestamp eines Startmarkers, wenn im measureOptions.start oder startMark angegeben.
    • einen Zeitstempel, der aus dem measureOptions.end und measureOptions.duration berechnet wird (wenn measureOptions.start nicht angegeben wurde).
    • 0, wenn er nicht angegeben ist und nicht aus anderen Werten bestimmt werden kann.
  • duration - auf einen DOMHighResTimeStamp gesetzt, der die Dauer der Messung ist, berechnet durch Subtraktion der startTime vom Endzeitstempel.

    Der Endzeitstempel ist einer der folgenden:

    • ein timestamp, wenn im measureOptions.end angegeben.
    • der timestamp eines Endmarkers, wenn einer im measureOptions.end oder endMark angegeben ist.
    • ein Zeitstempel, der aus dem measureOptions.start und measureOptions.duration berechnet wird (wenn measureOptions.end nicht angegeben wurde).
    • der von Performance.now() zurückgegebene Wert, wenn kein Endmarker angegeben ist oder aus anderen Werten bestimmt werden kann.
  • detail - auf den im measureOptions übergebenen Wert gesetzt.

Ausnahmen

TypeError

Dies kann in jedem Fall geworfen werden, in dem der Start, das Ende oder die Dauer mehrdeutig sein könnten:

  • Sowohl endMark als auch measureOptions sind angegeben.
  • measureOptions ist angegeben mit duration, jedoch ohne Angabe von entweder start oder end.
  • measureOptions ist angegeben mit allen start, end und duration.
SyntaxError DOMException

Der benannte Marker existiert nicht.

  • Ein Endmarker wird entweder durch endMark oder measureOptions.end angegeben, aber es gibt keinen PerformanceMark im Leistungsbuffer mit dem passenden Namen.
  • Ein Endmarker wird entweder durch endMark oder measureOptions.end angegeben, aber er kann nicht so konvertiert werden, dass er zu einem schreibgeschützten Attribut im PerformanceTiming-Interface passt.
  • Ein Startmarker wird entweder durch startMark oder measureOptions.start angegeben, aber es gibt keinen PerformanceMark im Leistungsbuffer mit dem passenden Namen.
  • Ein Startmarker wird entweder durch startMark oder measureOptions.start angegeben, aber er kann nicht so konvertiert werden, dass er zu einem schreibgeschützten Attribut im PerformanceTiming-Interface passt.
DataCloneError DOMException

Der measureOptions.detail-Wert ist nicht null und kann nicht mit dem HTML-Algorithmus 'StructuredSerialize' serialisiert werden.

RangeError

Der measureOptions.detail-Wert ist nicht null und Speicher kann während der Serialisierung mit dem HTML-Algorithmus 'StructuredSerialize' nicht zugewiesen werden.

Beispiele

Messung der Dauer zwischen benannten Markern

Gegeben seien zwei Ihrer eigenen Marker "login-started" und "login-finished", so können Sie eine Messung namens "login-duration" erstellen, wie im folgenden Beispiel gezeigt. Das zurückgegebene PerformanceMeasure-Objekt wird Ihnen dann eine duration-Eigenschaft zur Verfügung stellen, um die verstrichene Zeit zwischen den beiden Markern anzugeben.

js
const loginMeasure = performance.measure(
  "login-duration",
  "login-started",
  "login-finished",
);
console.log(loginMeasure.duration);

Messung der Dauer mit benutzerdefinierten Start- und Endzeiten

Um fortgeschrittenere Messungen durchzuführen, können Sie einen measureOptions-Parameter übergeben. Beispielsweise können Sie die event.timeStamp-Eigenschaft aus einem click-Ereignis als Startzeit verwenden.

js
performance.measure("login-click", {
  start: myClickEvent.timeStamp,
  end: myMarker.startTime,
});

Bereitstellung zusätzlicher Messdetails

Sie können die details-Eigenschaft verwenden, um zusätzliche Informationen jeglicher Art bereitzustellen. Vielleicht möchten Sie beispielsweise aufzeichnen, welches HTML-Element angeklickt wurde.

js
performance.measure("login-click", {
  detail: { htmlElement: myElement.id },
  start: myClickEvent.timeStamp,
  end: myMarker.startTime,
});

Spezifikationen

Specification
User Timing
# dom-performance-measure

Browser-Kompatibilität