Performance: measure() Methode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2017 browserübergreifend verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die measure() Methode erstellt ein benanntes PerformanceMeasure-Objekt, das eine Zeitmessung zwischen zwei Markierungen in der Leistungstimeline des Browsers darstellt.
Beim Messen zwischen zwei Markierungen gibt es eine Startmarkierung und eine Endmarkierung. 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 wird, 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 Endmarkierungen zu identifizieren.
Um nur eine endMark anzugeben, 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 aufgenommen werden. Standardmäßig
null. Muss strukturklonbar sein.devtools-
Einige Browser verwenden ein strukturiertes
devtools-Objekt innerhalb desdetail-Objekts als Teil einer Erweiterungs-API, die diese in benutzerdefinierten Spuren in Leistungstraces anzeigt. Weitere Informationen finden Sie in der Dokumentation zur Extensibility API von Chrome.dataType-
Zeichenfolge mit einem Wert von
track-entry(zur Definition einer neuen Spur) odermarker(zur Definition eines Eintrags in einer Spur). colorOptional-
Standardwert
"primary". Muss eine der folgenden sein:"primary","primary-light","primary-dark","secondary","secondary-light","secondary-dark","tertiary","tertiary-light","tertiary-dark","error". trackOptional-
Zeichenfolge des Namens der benutzerdefinierten Spur (erforderlich für
track-entry). trackGroupOptional-
Zeichenfolge des Namens der Gruppierung innerhalb einer benutzerdefinierten Spur (erforderlich für
track-entry). propertiesOptional-
Array von Schlüssel-Wert-Paaren. Werte können jeder JSON-kompatible Typ sein.
tooltipTextOptional-
Kurze Beschreibung für das Tooltip.
startOptional-
Zeitstempel (
DOMHighResTimeStamp), der als Startzeit verwendet werden soll, oder eine Zeichenfolge, die einePerformanceMarkbezeichnet, die für die Startzeit verwendet werden soll.Wenn dies eine Zeichenfolge ist, die eine
PerformanceMarkbezeichnet, dann ist es auf die gleiche Weise definiert wiestartMark. durationOptional-
Dauer (in Millisekunden) zwischen den Start- und Endmarkierungen. Wenn weggelassen, wird dies standardmäßig auf
performance.now()gesetzt; die Zeit, die seit der Erstellung des Kontexts vergangen ist. Wenn angegeben, müssen Sie entwederstartoderendangeben, aber nicht beides. endOptional-
Zeitstempel (
DOMHighResTimeStamp), der als Endzeit verwendet werden soll, oder eine Zeichenfolge, die einePerformanceMarkbezeichnet, die für die Endzeit verwendet werden soll.Wenn dies eine Zeichenfolge ist, die eine
PerformanceMarkbezeichnet, dann ist es auf die gleiche Weise definiert wieendMark.
startMarkOptional-
Eine Zeichenfolge, die eine
PerformanceMarkin der Leistungstimeline bezeichnet. DiePerformanceEntry.startTime-Eigenschaft dieser Markierung wird zur Berechnung der Messung verwendet. endMarkOptional-
Eine Zeichenfolge, die eine
PerformanceMarkin der Leistungstimeline bezeichnet. DiePerformanceEntry.startTime-Eigenschaft dieser Markierung wird zur Berechnung der Messung verwendet. Wenn Sie dieses Argument übergeben möchten, müssen Sie auch entwederstartMarkoder ein leeresmeasureOptions-Objekt übergeben.
Rückgabewert
Der erstellte PerformanceMeasure-Eintrag.
Die zurückgegebene Messung wird die folgenden Eigenschaftswerte haben:
-
entryType- auf"measure"gesetzt. -
name- auf dasname-Argument gesetzt. -
startTime- gesetzt auf:- einen
timestamp, wenn inmeasureOptions.startangegeben. - den
timestampeiner Startmarkierung, wenn inmeasureOptions.startoderstartMarkangegeben - einen Zeitstempel, der aus den
measureOptions.endundmeasureOptions.durationberechnet wurde (wennmeasureOptions.startnicht angegeben war) - 0, wenn es nicht angegeben ist und nicht aus anderen Werten ermittelt werden kann.
- einen
-
duration- gesetzt auf einenDOMHighResTimeStamp, der die Dauer der Messung ist, die durch Subtrahieren derstartTimevom Endzeitstempel berechnet wird.Der Endzeitstempel ist einer von:
- einem
timestamp, wenn inmeasureOptions.endangegeben. - der
timestampeiner Endmarkierung, wenn eine inmeasureOptions.endoderendMarkangegeben ist - ein Zeitstempel, der aus den
measureOptions.startundmeasureOptions.durationberechnet wird (wennmeasureOptions.endnicht angegeben wurde) - der Wert, der von
Performance.now()zurückgegeben wird, wenn keine Endmarkierung angegeben ist oder aus anderen Werten bestimmt werden kann.
- einem
-
detail- gesetzt auf den inmeasureOptionsübergebenen Wert.
Ausnahmen
TypeError-
Diese Ausnahme kann in jedem Fall auftreten, bei dem die Start-, End- oder Dauerwerte mehrdeutig sein könnten:
- Sowohl
endMarkals auchmeasureOptionssind angegeben. measureOptionsist mitdurationangegeben, ohne dass entwederstartoderendspezifiziert wurde.measureOptionsist mit allen vonstart,endunddurationangegeben.
- Sowohl
SyntaxErrorDOMException-
Die benannte Markierung existiert nicht.
- Eine Endmarkierung wird entweder mit
endMarkodermeasureOptions.endangegeben, aber es gibt keinePerformanceMarkim Leistungsbuffer mit dem passenden Namen. - Eine Endmarkierung wird entweder mit
endMarkodermeasureOptions.endangegeben, kann aber nicht in eine Übereinstimmung mit einem schreibgeschützten Attribut imPerformanceTiming-Interface konvertiert werden. - Eine Startmarkierung wird entweder mit
startMarkodermeasureOptions.startangegeben, aber es gibt keinePerformanceMarkim Leistungsbuffer mit dem passenden Namen. - Eine Startmarkierung wird entweder mit
startMarkodermeasureOptions.startangegeben, kann aber nicht in eine Übereinstimmung mit einem schreibgeschützten Attribut imPerformanceTiming-Interface konvertiert werden.
- Eine Endmarkierung wird entweder mit
DataCloneErrorDOMException-
Der
measureOptions.detail-Wert ist nicht-nullund kann nicht mit dem HTML-„StructuredSerialize“-Algorithmus serialisiert werden. RangeError-
Der
measureOptions.detail-Wert ist nicht-nullund es kann während der Serialisierung mit dem HTML-„StructuredSerialize“-Algorithmus kein Speicher zugewiesen werden.
Beispiele
>Messen der Dauer zwischen benannten Markierungen
Angenommen, Sie haben zwei eigene Markierungen "login-started" und "login-finished", können Sie eine Messung namens "login-duration" erstellen, wie im folgenden Beispiel gezeigt. Das zurückgegebene PerformanceMeasure-Objekt wird dann eine duration-Eigenschaft bereitstellen, die Ihnen die verstrichene Zeit zwischen den beiden Markierungen mitteilt.
const loginMeasure = performance.measure(
"login-duration",
"login-started",
"login-finished",
);
console.log(loginMeasure.duration);
Messen der Dauer mit benutzerdefinierten Start- und Endzeiten
Für komplexere Messungen können Sie einen measureOptions-Parameter übergeben. Zum Beispiel können Sie die event.timeStamp-Eigenschaft von einem click Ereignis als Startzeit verwenden.
performance.measure("login-click", {
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
Zusätzliche Messdetails bereitstellen
Sie können die details-Eigenschaft verwenden, um zusätzliche Informationen jeglichen Typs bereitzustellen. Vielleicht möchten Sie beispielsweise aufzeichnen, 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 weitere Details in einem devtools-Objekt bereitzustellen, das verwendet wird, um dieses in Leistungsprofilen anzuzeigen:
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
| Spezifikation |
|---|
| User Timing> # dom-performance-measure> |