Performance: measure() method
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.
Note: This feature is available in Web Workers.
Phương thức measure() tạo một đối tượng PerformanceMeasure có tên, đại diện cho một phép đo thời gian giữa hai mark trong performance timeline của trình duyệt.
Khi đo giữa hai mark, lần lượt sẽ có một start mark và một end mark. Dấu thời gian có tên này được gọi là một measure.
Cú pháp
measure(measureName)
measure(measureName, startMark)
measure(measureName, startMark, endMark)
measure(measureName, measureOptions)
measure(measureName, measureOptions, endMark)
Nếu chỉ chỉ định measureName, dấu thời gian bắt đầu được đặt thành 0, và dấu thời gian kết thúc (dùng để tính duration) là giá trị mà Performance.now() sẽ trả về.
Bạn có thể dùng chuỗi để xác định các đối tượng PerformanceMark làm start và end mark.
Để chỉ cung cấp endMark, bạn cần cung cấp một đối tượng measureOptions rỗng:
performance.measure("myMeasure", {}, "myEndMarker").
Tham số
measureName-
Một chuỗi biểu thị tên của measure.
measureOptionsOptional-
Một đối tượng có thể chứa các tùy chọn của measure.
detailOptional-
Metadata tùy ý sẽ được đưa vào measure. Mặc định là
null. Phải là structured-cloneable.devtools-
Một số trình duyệt dùng đối tượng
devtoolscó cấu trúc trong đối tượngdetailnhư một phần của API Extensibility, để hiển thị chúng trong các custom track của performance trace. Xem tài liệu Chrome Extensibility API để biết thêm thông tin.dataTypeThử nghiệm-
Chuỗi có giá trị
track-entry(để định nghĩa một track mới) hoặcmarker(để định nghĩa một entry trong track). colorOptional Thử nghiệm-
Mặc định là
"primary". Phải là một trong"primary","primary-light","primary-dark","secondary","secondary-light","secondary-dark","tertiary","tertiary-light","tertiary-dark","error". trackOptional Thử nghiệm-
Chuỗi là tên của custom track (bắt buộc cho
track-entry) trackGroupOptional Thử nghiệm-
Chuỗi là tên của nhóm trong custom track (bắt buộc cho
track-entry) propertiesOptional Thử nghiệm-
Mảng các cặp khóa-giá trị. Giá trị có thể là bất kỳ kiểu nào tương thích với JSON.
tooltipTextOptional Thử nghiệm-
Mô tả ngắn cho tooltip.
startOptional-
Dấu thời gian (
DOMHighResTimeStamp) dùng làm thời gian bắt đầu, hoặc chuỗi đặt tên mộtPerformanceMarkđể dùng làm thời gian bắt đầu.Nếu đây là một chuỗi đặt tên một
PerformanceMark, thì nó được định nghĩa theo cùng cách vớistartMark. durationOptional-
Thời lượng (tính bằng mili giây) giữa thời gian của start mark và end mark. Nếu bỏ qua, mặc định là
performance.now(); tức khoảng thời gian đã trôi qua kể từ khi ngữ cảnh được tạo. Nếu cung cấp giá trị này, bạn cũng phải chỉ địnhstarthoặcend, nhưng không được cả hai. endOptional-
Dấu thời gian (
DOMHighResTimeStamp) dùng làm thời gian kết thúc, hoặc chuỗi đặt tên mộtPerformanceMarkđể dùng làm thời gian kết thúc.Nếu đây là một chuỗi đặt tên một
PerformanceMark, thì nó được định nghĩa theo cùng cách vớiendMark.
startMarkOptional-
Một chuỗi đặt tên một
PerformanceMarktrong performance timeline. Thuộc tínhPerformanceEntry.startTimecủa mark này sẽ được dùng để tính measure. endMarkOptional-
Một chuỗi đặt tên một
PerformanceMarktrong performance timeline. Thuộc tínhPerformanceEntry.startTimecủa mark này sẽ được dùng để tính measure. Nếu muốn truyền đối số này, bạn cũng phải truyềnstartMarkhoặc một đối tượngmeasureOptionsrỗng.
Giá trị trả về
Entry PerformanceMeasure đã được tạo.
Giá trị measure được trả về sẽ có các giá trị thuộc tính sau:
-
entryType- đặt thành"measure". -
name- đặt thành đối sốname. -
startTime- đặt thành:- một
timestamp, nếu được chỉ định trongmeasureOptions.start. timestampcủa start mark, nếu được chỉ định trongmeasureOptions.starthoặcstartMark- một dấu thời gian được tính từ
measureOptions.endvàmeasureOptions.duration(nếumeasureOptions.startkhông được chỉ định) - 0, nếu không được chỉ định và không thể xác định từ các giá trị khác.
- một
-
duration- đặt thành mộtDOMHighResTimeStamplà thời lượng của measure, được tính bằng cách lấystartTimetrừ khỏi dấu thời gian kết thúc.Dấu thời gian kết thúc là một trong các giá trị sau:
- một
timestamp, nếu được chỉ định trongmeasureOptions.end. timestampcủa end mark, nếu được chỉ định trongmeasureOptions.endhoặcendMark- một dấu thời gian được tính từ
measureOptions.startvàmeasureOptions.duration(nếumeasureOptions.endkhông được chỉ định) - giá trị do
Performance.now()trả về, nếu không có end mark được chỉ định hoặc không thể xác định từ các giá trị khác.
- một
-
detail- đặt thành giá trị được truyền trongmeasureOptions.
Ngoại lệ
TypeError-
Có thể được ném ra trong bất kỳ trường hợp nào mà start, end hoặc duration có thể gây mơ hồ:
- Cả
endMarkvàmeasureOptionsđều được chỉ định. measureOptionsđược chỉ định vớidurationnhưng không chỉ địnhstarthoặcend.measureOptionsđược chỉ định với đồng thờistart,endvàduration.
- Cả
SyntaxErrorDOMException-
Mark được đặt tên không tồn tại.
- End mark được chỉ định bằng
endMarkhoặcmeasureOptions.end, nhưng không cóPerformanceMarknào trong performance buffer khớp tên đó. - End mark được chỉ định bằng
endMarkhoặcmeasureOptions.end, nhưng nó không thể chuyển đổi để khớp với một thuộc tính chỉ đọc trong giao diệnPerformanceTiming. - Start mark được chỉ định bằng
startMarkhoặcmeasureOptions.start, nhưng không cóPerformanceMarknào trong performance buffer khớp tên đó. - Start mark được chỉ định bằng
startMarkhoặcmeasureOptions.start, nhưng nó không thể chuyển đổi để khớp với một thuộc tính chỉ đọc trong giao diệnPerformanceTiming.
- End mark được chỉ định bằng
DataCloneErrorDOMException-
Giá trị
measureOptions.detailkhácnullvà không thể tuần tự hóa bằng thuật toán HTML "StructuredSerialize". RangeError-
Giá trị
measureOptions.detailkhácnullvà không thể cấp phát bộ nhớ trong quá trình tuần tự hóa bằng thuật toán HTML "StructuredSerialize".
Ví dụ
>Đo thời lượng giữa các marker có tên
Giả sử bạn có hai marker riêng "login-started" và "login-finished", bạn có thể tạo một phép đo có tên "login-duration" như trong ví dụ sau. Đối tượng PerformanceMeasure được trả về khi đó sẽ cung cấp thuộc tính duration để cho biết thời gian đã trôi qua giữa hai marker.
const loginMeasure = performance.measure(
"login-duration",
"login-started",
"login-finished",
);
console.log(loginMeasure.duration);
Đo thời lượng với thời điểm bắt đầu và kết thúc tùy chỉnh
Để đo nâng cao hơn, bạn có thể truyền tham số measureOptions. Ví dụ, bạn có thể dùng thuộc tính event.timeStamp từ một click event làm thời gian bắt đầu.
performance.measure("login-click", {
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
Cung cấp chi tiết đo bổ sung
Bạn có thể dùng thuộc tính details để cung cấp thêm thông tin dưới bất kỳ kiểu nào. Ví dụ, có thể bạn muốn ghi lại phần tử HTML nào đã được nhấp.
performance.measure("login-click", {
detail: { htmlElement: myElement.id },
start: myClickEvent.timeStamp,
end: myMarker.startTime,
});
DevTools Extensibility API
Với các trình duyệt hỗ trợ Extensibility API, bạn có thể dùng tham số detail để cung cấp thêm thông tin trong một đối tượng devtools sẽ được dùng để hiển thị trong performance profile:
const imageProcessingTimeStart = performance.now();
// ... sau đó trong mã của bạn
performance.measure("Image Processing Complete", {
start: imageProcessingTimeStart,
end: performance.now(),
detail: {
// Dữ liệu này xuất hiện trong "Summary"
extraInfo: {
imageId: "xyz-123",
source: "cache",
checkUrl: "https://example.com/check/xyz-123",
},
// Đối tượng devtools điều khiển cách hiển thị track
devtools: {
dataType: "track-entry",
track: "Image Processing Tasks",
trackGroup: "My Tracks",
color: "tertiary-dark",
properties: [
["Filter Type", "Gaussian Blur"],
// Giá trị có thể là object, mảng, hoặc kiểu khác
["Resize Dimensions", { w: 500, h: 300 }],
// Các giá trị chuỗi là URL sẽ được tự động tạo liên kết
["Image URL", "https://example.com/img.png"],
],
tooltipText: "Processed image successfully",
},
},
});
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| User Timing> # dom-performance-measure> |