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 Marken in der Leistungszeitleiste des Browsers darstellt.
Beim Messen zwischen zwei Marken gibt es eine Startmarke und eine Endmarke. Der benannte Zeitstempel wird als Measure 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 Start-Zeitstempel auf null gesetzt, und der End-Zeitstempel (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 verwenden:
performance.measure("myMeasure", {}, "myEndMarker").
Parameter
measureName-
Ein String, der den Namen des Measure darstellt.
measureOptionsOptional-
Ein Objekt, das Messoptionen enthalten kann.
detailOptional-
Beliebige Metadaten, die im Measure enthalten sein sollen. Standardmäßig
null. Muss strukturiert klonbar sein.devtools-
Einige Browser verwenden ein strukturiertes
devtools-Objekt innerhalb desdetail-Objekts als Teil einer Erweiterungs-API, die diese in benutzerdefinierte Spuren in Leistungs-Traces einbindet. Weitere Informationen finden Sie in der Chrome's Extensibility API Dokumentation.dataType-
String mit einem Wert von
track-entry(zum Definieren einer neuen Spur) odermarker(zum Definieren eines Eintrags in einer Spur). colorOptional-
Standardmäßig
"primary". Muss einer der folgenden Werte sein:"primary","primary-light","primary-dark","secondary","secondary-light","secondary-dark","tertiary","tertiary-light","tertiary-dark","error". trackOptional-
String des Namens der benutzerdefinierten Spur (erforderlich für
track-entry). trackGroupOptional-
String des Namens der Gruppierung innerhalb einer benutzerdefinierten Spur (erforderlich für
track-entry). propertiesOptional-
Array aus 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 ein String, der den Namen einerPerformanceMarkangibt, die als Startzeit verwendet werden soll.Wenn dies ein String ist, der eine
PerformanceMarkbenennt, dann ist er auf die gleiche Weise wiestartMarkdefiniert. durationOptional-
Dauer (in Millisekunden) zwischen den Start- und Endmarkenzeiten. Wenn weggelassen, ist dies standardmäßig
performance.now(); die Zeit, die seit der Erstellung des Kontexts verstrichen ist. Wenn angegeben, müssen Sie entwederstartoderendangeben, aber nicht beide. endOptional-
Zeitstempel (
DOMHighResTimeStamp), der als Endzeit verwendet werden soll, oder ein String, der den Namen einerPerformanceMarkangibt, die als Endzeit verwendet werden soll.Wenn dies ein String ist, der eine
PerformanceMarkbenennt, dann ist er auf die gleiche Weise wieendMarkdefiniert.
startMarkOptional-
Ein String, der eine
PerformanceMarkin der Leistungszeitleiste benennt. DiePerformanceEntry.startTime-Eigenschaft dieser Marke wird zur Berechnung des Measure verwendet. endMarkOptional-
Ein String, der eine
PerformanceMarkin der Leistungszeitleiste benennt. DiePerformanceEntry.startTime-Eigenschaft dieser Marke wird zur Berechnung des Measure verwendet. Wenn Sie dieses Argument übergeben möchten, müssen Sie entwederstartMarkoder ein leeresmeasureOptions-Objekt übergeben.
Rückgabewert
Der PerformanceMeasure-Eintrag, der erstellt wurde.
Das zurückgegebene Measure wird die folgenden Eigenschaftswerte haben:
-
entryType- wird auf"measure"gesetzt. -
name- wird auf dasname-Argument gesetzt. -
startTime- wird gesetzt auf:- einen
timestamp, wenn inmeasureOptions.startangegeben. - den
timestampeiner Startmarke, wenn inmeasureOptions.startoderstartMarkangegeben. - einen Zeitstempel berechnet aus
measureOptions.endundmeasureOptions.duration(wennmeasureOptions.startnicht angegeben wurde). - 0, wenn es nicht angegeben ist und nicht aus anderen Werten ermittelt werden kann.
- einen
-
duration- wird auf einenDOMHighResTimeStampgesetzt, der die Dauer des Measure ist, berechnet durch Subtraktion derstartTimevom End-Zeitstempel.Der End-Zeitstempel ist einer der folgenden:
- ein
timestamp, wenn inmeasureOptions.endangegeben. - der
timestampeiner Endmarke, wenn eine inmeasureOptions.endoderendMarkangegeben ist. - ein Zeitstempel berechnet aus
measureOptions.startundmeasureOptions.duration(wennmeasureOptions.endnicht angegeben wurde). - der von
Performance.now()zurückgegebene Wert, wenn keine Endmarke angegeben ist oder aus anderen Werten ermittelt werden kann.
- ein
-
detail- wird auf den Wert gesetzt, der inmeasureOptionsübergeben wurde.
Ausnahmen
TypeError-
Dies kann in jedem Fall ausgelöst werden, in dem der Start, das Ende oder die Dauer möglicherweise mehrdeutig sind:
- Sowohl
endMarkals auchmeasureOptionssind angegeben. measureOptionsist mitdurationangegeben, ohnestartoderendanzugeben.measureOptionsist mit allenstart,endunddurationangegeben.
- Sowohl
SyntaxErrorDOMException-
Die benannte Marke existiert nicht.
- Eine Endmarke wird entweder mit
endMarkodermeasureOptions.endangegeben, aber es gibt keinePerformanceMarkim Leistungsbuffer mit dem übereinstimmenden Namen. - Eine Endmarke wird entweder mit
endMarkodermeasureOptions.endangegeben, aber sie kann nicht in eine Übereinstimmung mit einem schreibgeschützten Attribut in derPerformanceTiming-Schnittstelle umgewandelt werden. - Eine Startmarke wird entweder mit
startMarkodermeasureOptions.startangegeben, aber es gibt keinePerformanceMarkim Leistungsbuffer mit dem übereinstimmenden Namen. - Eine Startmarke wird entweder mit
startMarkodermeasureOptions.startangegeben, aber sie kann nicht in eine Übereinstimmung mit einem schreibgeschützten Attribut in derPerformanceTiming-Schnittstelle umgewandelt werden.
- Eine Endmarke wird entweder mit
DataCloneErrorDOMException-
Der
measureOptions.detail-Wert ist nicht-nullund kann nicht mit dem HTML-Algorithmus "StructuredSerialize" serialisiert werden. RangeError-
Der
measureOptions.detail-Wert ist nicht-nullund der Speicher kann während der Serialisierung mit dem HTML-Algorithmus "StructuredSerialize" nicht zugeteilt werden.
Beispiele
>Messen der Dauer zwischen benannten Markern
Angenommen, Sie haben zwei eigene Marker, "login-started" und "login-finished", können Sie eine Messung mit dem Namen "login-duration" erstellen, wie im folgenden Beispiel gezeigt. Das zurückgegebene PerformanceMeasure-Objekt stellt dann eine duration-Eigenschaft bereit, die Ihnen die vergangene Zeit zwischen den beiden Markern angibt.
const loginMeasure = performance.measure(
"login-duration",
"login-started",
"login-finished",
);
console.log(loginMeasure.duration);
Messen 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 eines click-Events 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 jeglicher Art bereitzustellen. Vielleicht möchten Sie 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 zur Anzeige in Leistungsprofilen verwendet 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
| Spezifikation |
|---|
| User Timing> # dom-performance-measure> |