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 Marken in der Leistungstimeline des Browsers darstellt.
Beim Messen zwischen zwei Marken gibt es jeweils eine Startmarke und eine Endmarke. Der benannte Zeitstempel wird als Messung bezeichnet.
Syntax
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 Endmarken zu identifizieren.
Um nur eine endMark bereitzustellen, müssen Sie ein leeres measureOptions Objekt bereitstellen: performance.measure("myMeasure", {}, "myEndMarker").
Parameter
measureName-
Eine Zeichenfolge, die den Namen der Messung darstellt.
measureOptionsOptional-
Ein Objekt, das Messoptionen enthalten kann.
detailOptional-
Beliebige Metadaten, die in die Messung einbezogen werden sollen. Standardmäßig
null. Muss strukturklon-bar sein.devtools-
Einige Browser verwenden ein strukturiertes
devtoolsObjekt innerhalb desdetailObjekts als Teil einer Extensibility API, die diese in benutzerdefinierten Spuren in Leistungstraces anzeigt. Siehe die Chrome's Extensibility API-Dokumentation für weitere Informationen.dataTypeExperimentell-
Zeichenfolge mit dem Wert
track-entry(zum Definieren einer neuen Spur) odermarker(zum Definieren eines Eintrags in einer Spur). colorOptional Experimentell-
Standardmäßig
"primary". Muss eines der folgenden Werte sein:"primary","primary-light","primary-dark","secondary","secondary-light","secondary-dark","tertiary","tertiary-light","tertiary-dark","error". trackOptional Experimentell-
Zeichenfolge des Namens der benutzerdefinierten Spur (erforderlich für
track-entry). trackGroupOptional Experimentell-
Zeichenfolge des Namens der Gruppierung innerhalb einer benutzerdefinierten Spur (erforderlich für
track-entry). propertiesOptional Experimentell-
Array von Schlüssel-Wert-Paaren. Werte können jeden JSON-kompatiblen Typ haben.
tooltipTextOptional Experimentell-
Kurze Beschreibung für Tooltip.
startOptional-
Zeitstempel (
DOMHighResTimeStamp) der als Startzeit verwendet werden soll, oder eine Zeichenfolge, die einePerformanceMarkbenennt, die als Startzeit verwendet werden soll.Wenn dies eine Zeichenfolge ist, die eine
PerformanceMarkbenennt, dann ist diese in derselben Weise definiert wiestartMark. durationOptional-
Dauer (in Millisekunden) zwischen den Start- und Endmarkenzeiten. Wenn nicht angegeben, wird standardmäßig
performance.now()verwendet; die Zeit, die seit der Erstellung des Kontexts verstrichen ist. Wenn angegeben, müssen Sie entwederstartoderendangeben, jedoch nicht beide. endOptional-
Zeitstempel (
DOMHighResTimeStamp) der als Endzeit verwendet werden soll, oder eine Zeichenfolge, die einePerformanceMarkbenennt, die als Endzeit verwendet werden soll.Wenn dies eine Zeichenfolge ist, die eine
PerformanceMarkbenennt, dann ist diese in derselben Weise definiert wieendMark.
startMarkOptional-
Eine Zeichenfolge, die eine
PerformanceMarkin der Leistungstimeline benennt. DiePerformanceEntry.startTimeEigenschaft dieser Marke wird zur Berechnung der Messung verwendet. endMarkOptional-
Eine Zeichenfolge, die eine
PerformanceMarkin der Leistungstimeline benennt. DiePerformanceEntry.startTimeEigenschaft dieser Marke wird zur Berechnung der Messung verwendet. Wenn Sie dieses Argument übergeben möchten, müssen Sie entwederstartMarkoder ein leeresmeasureOptionsObjekt übergeben.
Rückgabewert
Der erstellte PerformanceMeasure Eintrag.
Die zurückgegebene Messung wird folgende Eigenschaftswerte haben:
-
entryType- auf"measure"gesetzt. -
name- auf dasnameArgument gesetzt. -
startTime- gesetzt auf:- einen
timestamp, falls inmeasureOptions.startangegeben. - den
timestampeiner Startmarke, falls inmeasureOptions.startoderstartMarkangegeben. - einen Zeitstempel, der aus
measureOptions.endundmeasureOptions.durationberechnet wurde (fallsmeasureOptions.startnicht angegeben wurde). - 0, falls er nicht angegeben ist und nicht aus anderen Werten bestimmt werden kann.
- einen
-
duration- auf einenDOMHighResTimeStampgesetzt, der die Dauer der Messung ist, die durch Subtrahieren desstartTimevom Endzeitstempel berechnet wird.Der Endzeitstempel ist einer der folgenden:
- ein
timestamp, falls inmeasureOptions.endangegeben. - der
timestampeiner Endmarke, falls eine inmeasureOptions.endoderendMarkangegeben ist. - ein Zeitstempel, der aus
measureOptions.startundmeasureOptions.durationberechnet wurde (fallsmeasureOptions.endnicht angegeben wurde). - der Wert, der von
Performance.now()zurückgegeben wird, falls keine Endmarke angegeben ist oder aus anderen Werten bestimmt werden kann.
- ein
-
detail- auf den inmeasureOptionsübergebenen Wert gesetzt.
Ausnahmen
TypeError-
Dies kann in jedem Fall ausgelöst werden, in dem der Start, das Ende oder die Dauer mehrdeutig sein könnten:
- Sowohl
endMarkals auchmeasureOptionssind angegeben. measureOptionsist mitdurationangegeben, aber ohne Angabe entweder vonstartoderend.measureOptionsist angegeben mit allenstart,endundduration.
- Sowohl
SyntaxErrorDOMException-
Die benannte Marke existiert nicht.
- Eine Endmarke ist mit entweder
endMarkodermeasureOptions.endangegeben, aber es gibt keinePerformanceMarkim Leistungsbuffer mit dem übereinstimmenden Namen. - Eine Endmarke ist mit entweder
endMarkodermeasureOptions.endangegeben, aber sie kann nicht konvertiert werden, um mit einem schreibgeschützten Attribut in derPerformanceTimingSchnittstelle übereinzustimmen. - Eine Startmarke ist mit entweder
startMarkodermeasureOptions.startangegeben, aber es gibt keinePerformanceMarkim Leistungsbuffer mit dem übereinstimmenden Namen. - Eine Startmarke ist mit entweder
startMarkodermeasureOptions.startangegeben, aber sie kann nicht konvertiert werden, um mit einem schreibgeschützten Attribut in derPerformanceTimingSchnittstelle übereinzustimmen.
- Eine Endmarke ist mit entweder
DataCloneErrorDOMException-
Der
measureOptions.detailWert ist nicht-nullund kann nicht unter Verwendung des HTML "StructuredSerialize" Algorithmus serialisiert werden. RangeError-
Der
measureOptions.detailWert ist nicht-nullund es kann während der Serialisierung unter Verwendung des HTML "StructuredSerialize" Algorithmus kein Speicher zugewiesen werden.
Beispiele
>Messen der Dauer zwischen benannten Markern
Angenommen, Sie haben zwei eigene Marker "login-started" und "login-finished", können Sie eine Messung namens "login-duration" erstellen, wie im folgenden Beispiel gezeigt. Das zurückgegebene PerformanceMeasure Objekt stellt dann eine duration Eigenschaft bereit, die Ihnen die verstrichene Zeit zwischen den beiden Markern anzeigt.
const loginMeasure = performance.measure(
"login-duration",
"login-started",
"login-finished",
);
console.log(loginMeasure.duration);
Messen der Dauer mit benutzerdefinierten Start- und Endzeiten
Um fortschrittlichere Messungen durchzuführen, können Sie einen measureOptions Parameter übergeben. Zum Beispiel können Sie die event.timeStamp Eigenschaft eines click Events als Startzeit verwenden.
performance.measure("login-click", {
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
Bereitstellen zusätzlicher Messdetails
Sie können die details Eigenschaft verwenden, um zusätzliche Informationen beliebigen Typs bereitzustellen. Vielleicht möchten Sie zum Beispiel festhalten, welches HTML-Element angeklickt wurde.
performance.measure("login-click", {
detail: { htmlElement: myElement.id },
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
DevTools Extensibility API
Für Browser, die die Extensibility API unterstützen, können Sie den detail Parameter verwenden, um mehr Details in einem devtools Objekt bereitzustellen, das in Leistungsprofilen angezeigt wird:
const imageProcessingTimeStart = performance.now();
// ... later in your code
performance.measure("Image Processing Complete", {
start: imageProcessingTimeStart,
end: performance.now(),
detail: {
// This data appears in the "Summary"
extraInfo: {
imageId: "xyz-123",
source: "cache",
checkUrl: "https://example.com/check/xyz-123",
},
// The devtools object controls the track visualization
devtools: {
dataType: "track-entry",
track: "Image Processing Tasks",
trackGroup: "My Tracks",
color: "tertiary-dark",
properties: [
["Filter Type", "Gaussian Blur"],
// Values can be objects, arrays, or other types
["Resize Dimensions", { w: 500, h: 300 }],
// String values that are URLs get linkified
["Image URL", "https://example.com/img.png"],
],
tooltipText: "Image processed successfully",
},
},
});
Spezifikationen
| Specification |
|---|
| User Timing> # dom-performance-measure> |