PerformanceResourceTiming
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.
* Some parts of this feature may have varying levels of support.
Note: This feature is available in Web Workers.
Giao diện PerformanceResourceTiming cho phép truy xuất và phân tích dữ liệu timing mạng chi tiết liên quan đến việc tải các tài nguyên của một ứng dụng. Ứng dụng có thể dùng các chỉ số timing để xác định, ví dụ, khoảng thời gian cần để tìm nạp một tài nguyên cụ thể, chẳng hạn như một XMLHttpRequest, <SVG>, hình ảnh hoặc script.
Mô tả
Các thuộc tính của giao diện này tạo ra một timeline tải tài nguyên với các dấu thời gian độ phân giải cao cho các sự kiện mạng như thời điểm bắt đầu và kết thúc chuyển hướng, fetch start, thời điểm bắt đầu và kết thúc tra cứu DNS, thời điểm bắt đầu và kết thúc phản hồi, v.v. Ngoài ra, giao diện còn mở rộng PerformanceEntry với các thuộc tính khác cung cấp dữ liệu về kích thước của tài nguyên đã tìm nạp cũng như loại tài nguyên đã khởi tạo việc tìm nạp.
Các chỉ số resource timing điển hình
Các thuộc tính của giao diện này cho phép bạn tính một số chỉ số resource timing. Các trường hợp sử dụng phổ biến gồm:
- Đo thời gian bắt tay TCP (
connectEnd-connectStart) - Đo thời gian tra cứu DNS (
domainLookupEnd-domainLookupStart) - Đo thời gian chuyển hướng (
redirectEnd-redirectStart) - Đo thời gian yêu cầu tạm thời (
firstInterimResponseStart-finalResponseHeadersStart) - Đo thời gian yêu cầu (
responseStart-requestStart) - Đo thời gian yêu cầu tài liệu (
finalResponseHeadersStart-requestStart) - Đo thời gian thương lượng TLS (
requestStart-secureConnectionStart) - Đo thời gian tìm nạp (không có chuyển hướng) (
responseEnd-fetchStart) - Đo thời gian xử lý của ServiceWorker (
fetchStart-workerStart) - Kiểm tra xem nội dung có được nén hay không (
decodedBodySizekhông nên khácencodedBodySize) - Kiểm tra xem có trúng bộ đệm cục bộ hay không (
transferSizenên bằng0) - Kiểm tra xem có dùng giao thức hiện đại và nhanh hay không (
nextHopProtocolnên là HTTP/2 hoặc HTTP/3) - Kiểm tra xem tài nguyên có đúng là render-blocking hay không (
renderBlockingStatus)
Quản lý kích thước bộ đệm resource
Mặc định chỉ có 250 resource timing entry được đưa vào bộ đệm. Để biết thêm thông tin, xem kích thước bộ đệm resource của hướng dẫn Resource Timing.
Thông tin timing liên miền
Nhiều thuộc tính resource timing bị giới hạn chỉ trả về 0 hoặc một chuỗi rỗng khi tài nguyên là một yêu cầu cross-origin. Để hiển thị thông tin timing cross-origin, cần đặt tiêu đề phản hồi HTTP Timing-Allow-Origin.
Các thuộc tính mặc định trả về 0 khi tải tài nguyên từ một origin khác với origin của chính trang web: redirectStart, redirectEnd, domainLookupStart, domainLookupEnd, connectStart, connectEnd, secureConnectionStart, requestStart, và responseStart.
Ví dụ, để cho phép https://mdn.go-mizu.dev xem thông tin timing tài nguyên, tài nguyên cross-origin nên gửi:
Timing-Allow-Origin: https://mdn.go-mizu.dev
Thuộc tính thể hiện
>Kế thừa từ PerformanceEntry
Giao diện này mở rộng các thuộc tính PerformanceEntry sau cho các loại resource performance entry bằng cách ràng buộc và giới hạn chúng như sau:
PerformanceEntry.durationRead only-
Trả về một
timestamplà hiệu số giữa các thuộc tínhresponseEndvàstartTime. PerformanceEntry.entryTypeRead only-
Trả về
"resource". PerformanceEntry.nameRead only-
Trả về URL của tài nguyên.
PerformanceEntry.startTimeRead only-
Trả về dấu thời gian
timestamptại thời điểm tài nguyên bắt đầu được tìm nạp. Giá trị này tương đương vớiPerformanceResourceTiming.fetchStart.
Các dấu thời gian
Giao diện hỗ trợ các thuộc tính dấu thời gian sau mà bạn có thể thấy trong sơ đồ và được liệt kê theo thứ tự chúng được ghi lại cho việc tìm nạp một tài nguyên. Danh sách theo bảng chữ cái được hiển thị trong thanh điều hướng bên trái.
PerformanceResourceTiming.redirectStartRead only-
Một
DOMHighResTimeStampbiểu thị thời điểm bắt đầu của lần tìm nạp khởi tạo chuyển hướng. PerformanceResourceTiming.redirectEndRead only-
Một
DOMHighResTimeStampngay sau khi nhận byte cuối cùng của phản hồi của lần chuyển hướng cuối cùng. PerformanceResourceTiming.workerStartRead only-
Trả về một
DOMHighResTimeStampngay trước khi phátFetchEventnếu luồng Service Worker đang chạy, hoặc ngay trước khi khởi động luồng Service Worker nếu nó chưa chạy. Nếu tài nguyên không bị Service Worker chặn, thuộc tính này luôn trả về 0. PerformanceResourceTiming.fetchStartRead only-
Một
DOMHighResTimeStampngay trước khi trình duyệt bắt đầu tìm nạp tài nguyên. PerformanceResourceTiming.domainLookupStartRead only-
Một
DOMHighResTimeStampngay trước khi trình duyệt bắt đầu tra cứu tên miền cho tài nguyên. PerformanceResourceTiming.domainLookupEndRead only-
Một
DOMHighResTimeStampbiểu thị thời điểm ngay sau khi trình duyệt hoàn tất tra cứu tên miền cho tài nguyên. PerformanceResourceTiming.connectStartRead only-
Một
DOMHighResTimeStampngay trước khi trình duyệt bắt đầu thiết lập kết nối tới máy chủ để lấy tài nguyên. PerformanceResourceTiming.secureConnectionStartRead only-
Một
DOMHighResTimeStampngay trước khi trình duyệt bắt đầu quá trình bắt tay để bảo mật kết nối hiện tại. PerformanceResourceTiming.connectEndRead only-
Một
DOMHighResTimeStampngay sau khi trình duyệt hoàn tất thiết lập kết nối tới máy chủ để lấy tài nguyên. PerformanceResourceTiming.requestStartRead only-
Một
DOMHighResTimeStampngay trước khi trình duyệt bắt đầu yêu cầu tài nguyên từ máy chủ. PerformanceResourceTiming.firstInterimResponseStartRead only-
Một
DOMHighResTimeStampbiểu thị thời gian phản hồi tạm thời (ví dụ 100 Continue hoặc 103 Early Hints). PerformanceResourceTiming.responseStartRead only-
Một
DOMHighResTimeStampngay sau khi trình duyệt nhận byte đầu tiên của phản hồi từ máy chủ (có thể là phản hồi tạm thời). PerformanceResourceTiming.finalResponseHeadersStartRead only-
Một
DOMHighResTimeStampbiểu thị thời điểm phản hồi đầu cuối có header bắt đầu (ví dụ 200 Success), sau mọi phản hồi tạm thời. PerformanceResourceTiming.responseEndRead only-
Một
DOMHighResTimeStampngay sau khi trình duyệt nhận byte cuối cùng của tài nguyên hoặc ngay trước khi kết nối vận chuyển bị đóng, tùy điều kiện nào đến trước.
Thông tin tài nguyên bổ sung
Ngoài ra, giao diện này còn hiển thị các thuộc tính sau chứa thêm thông tin về tài nguyên:
PerformanceResourceTiming.contentTypeRead only Experimental-
Một chuỗi biểu thị phiên bản rút gọn và chuẩn hóa của MIME type của tài nguyên đã tìm nạp.
PerformanceResourceTiming.decodedBodySizeRead only-
Một số là kích thước (tính bằng octet) nhận được từ lần tìm nạp (HTTP hoặc cache) của phần thân thông điệp, sau khi loại bỏ mọi content encoding đã áp dụng.
PerformanceResourceTiming.deliveryTypeRead only-
Cho biết tài nguyên được phân phối như thế nào - ví dụ từ cache hoặc từ navigational prefetch.
PerformanceResourceTiming.encodedBodySizeRead only-
Một số biểu thị kích thước (tính bằng octet) nhận được từ lần tìm nạp (HTTP hoặc cache) của phần thân payload, trước khi loại bỏ mọi content encoding đã áp dụng.
PerformanceResourceTiming.initiatorTypeRead only-
Một chuỗi biểu thị tính năng nền tảng web đã khởi tạo performance entry.
PerformanceResourceTiming.nextHopProtocolRead only-
Một chuỗi biểu thị giao thức mạng được dùng để tìm nạp tài nguyên, được xác định bởi ALPN Protocol ID (RFC7301).
PerformanceResourceTiming.renderBlockingStatusRead only-
Một chuỗi biểu thị trạng thái chặn kết xuất. Có thể là
"blocking"hoặc"non-blocking". PerformanceResourceTiming.responseStatusRead only-
Một số biểu thị mã trạng thái phản hồi HTTP được trả về khi tìm nạp tài nguyên.
PerformanceResourceTiming.transferSizeRead only-
Một số biểu thị kích thước (tính bằng octet) của tài nguyên đã tìm nạp. Kích thước này bao gồm các trường header phản hồi cộng với phần thân payload phản hồi.
PerformanceResourceTiming.serverTimingRead only-
Một mảng các entry
PerformanceServerTimingchứa các chỉ số server timing.
Phương thức thể hiện
PerformanceResourceTiming.toJSON()-
Trả về biểu diễn JSON của đối tượng
PerformanceResourceTiming.
Ví dụ
>Ghi nhật ký thông tin resource timing
Ví dụ dùng PerformanceObserver, thông báo các performance entry resource mới khi chúng được ghi trong performance timeline của trình duyệt. Dùng tùy chọn buffered để truy cập các entry từ trước khi observer được tạo.
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry);
});
});
observer.observe({ type: "resource", buffered: true });
Ví dụ dùng Performance.getEntriesByType(), chỉ hiển thị các performance entry resource đang có trong performance timeline tại thời điểm bạn gọi phương thức này:
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
console.log(entry);
});
Thông số kỹ thuật
| Specification |
|---|
| Resource Timing> # resources-included-in-the-performanceresourcetiming-interface> |