ภาพรวม
ต้องการข้อมูลเชิงลึกที่ละเอียดยิ่งขึ้นเกี่ยวกับประสิทธิภาพของแอปพลิเคชันนอกเหนือจากเมตริกในตัวของเบราว์เซอร์ใช่ไหม ตอนนี้แผงประสิทธิภาพ ช่วยให้คุณนำข้อมูลประสิทธิภาพของคุณเองมาไว้ในไทม์ไลน์ได้โดยตรง ไม่ว่าคุณจะเป็นผู้เขียนเฟรมเวิร์กที่ต้องการแสดงภาพกระบวนการภายใน นักพัฒนาไลบรารีที่ติดตามผลกระทบของโค้ด หรือสร้างแอปพลิเคชันที่ซับซ้อนด้วยการติดตั้งใช้งานที่กำหนดเอง API การขยายประสิทธิภาพจะมอบเครื่องมือที่ช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้นเบื้องหลังได้อย่างครอบคลุม
การแทรกการวัดและเหตุการณ์ที่กำหนดเองจะช่วยให้คุณสร้างการแสดงภาพที่ปรับแต่งได้ภายในแผงประสิทธิภาพ ที่คุ้นเคย ลองนึกภาพการเห็นเหตุการณ์ในวงจรคอมโพเนนต์ของเฟรมเวิร์กควบคู่ไปกับเมตริกประสิทธิภาพของเบราว์เซอร์มาตรฐาน หรือการติดตามโฟลว์การดำเนินการของเอ็นจินการแสดงผลที่กำหนดเองซึ่งซิงโครไนซ์กับไปป์ไลน์การแสดงผลของเบราว์เซอร์ได้อย่างสมบูรณ์
API นี้มี 2 แนวทางในการดำเนินการดังกล่าว ดังนี้
1. API console.timeStamp (ขยายสำหรับ DevTools)
API นี้มีวิธีที่มีประสิทธิภาพสูงในการติดตั้งใช้งานแอปพลิเคชันและแสดงข้อมูลการจับเวลาในแผงประสิทธิภาพ ใน DevTools เท่านั้น API นี้ออกแบบมาให้มีค่าใช้จ่ายรันไทม์น้อยที่สุด จึงเหมาะสำหรับการติดตั้งใช้งานเส้นทางที่ใช้บ่อยและบิลด์การใช้งานจริง API นี้ ไม่ เพิ่มรายการลงในไทม์ไลน์ประสิทธิภาพภายในของเบราว์เซอร์
2. User Timings API (ใช้ performance.mark และ performance.measure)
API นี้ใช้ประโยชน์จาก ระยะเวลาของผู้ใช้ API ที่มีอยู่ นอกจากนี้ยังเพิ่มรายการลงใน ไทม์ไลน์ประสิทธิภาพภายในของเบราว์เซอร์ ซึ่งช่วยให้วิเคราะห์เพิ่มเติมและผสานรวมกับเครื่องมือประสิทธิภาพอื่นๆ ได้

ประโยชน์สำคัญ
API ทั้ง 2 รายการมีฟีเจอร์ต่อไปนี้
- แทร็กที่กำหนดเอง: เพิ่มแทร็กเฉพาะและกลุ่มแทร็กเพื่อแสดงลักษณะประสิทธิภาพที่ไม่ซ้ำกันของโค้ด
- รายการ: ป้อนข้อมูลลงในแทร็กเหล่านี้ด้วยรายการที่ทำเครื่องหมายเหตุการณ์สำคัญหรือระยะเวลาของการดำเนินการที่เฉพาะเจาะจงอย่างชัดเจน
- การปรับแต่งสี: ใช้การใส่โค้ดสีเพื่อแยกความแตกต่างของเหตุการณ์หรือการวัดประเภทต่างๆ ได้อย่างรวดเร็ว
การเลือก API ที่เหมาะสมกับความต้องการของคุณ:
API
console.timeStamp:- ผลกระทบต่อประสิทธิภาพของการติดตั้งใช้งานเป็นข้อกังวลหลัก โดยเฉพาะอย่างยิ่งในบิลด์การใช้งานจริง
- คุณต้องมีวิธีที่รวดเร็วและมีประสิทธิภาพในการทำเครื่องหมายระยะเวลาหรือเหตุการณ์โดยไม่จำเป็นต้องใช้ข้อมูลเมตาเพิ่มเติม
- คุณต้องการให้แสดงข้อมูลภายในแผงประสิทธิภาพเท่านั้น
User Timings API (
performance.mark,performance.measure):- ใช้เมื่อคุณต้องการจัดเก็บข้อมูลเพิ่มเติมกับแต่ละรายการ และเมื่อคุณใช้ User Timings API อยู่แล้ว
- คุณต้องเชื่อมโยงข้อมูลแบบสมบูรณ์ (เคล็ดลับเครื่องมือ, พร็อพเพอร์ตี้โดยละเอียด) กับรายการประสิทธิภาพ
- คุณต้องการเพิ่มเครื่องหมายภาพเพื่อไฮไลต์ช่วงเวลาที่เฉพาะเจาะจง
- คุณต้องการให้ข้อมูลพร้อมใช้งานไม่เพียงแต่ใน DevTools แต่ยังอยู่ในไทม์ไลน์ประสิทธิภาพภายในของเบราว์เซอร์สำหรับการวิเคราะห์ที่กว้างขึ้นหรือเครื่องมืออื่นๆ
- คุณคุ้นเคยหรือใช้ User Timings API อยู่แล้ว
แทรกข้อมูลด้วย console.timeStamp
API console.timeStamp ได้รับการขยายเพื่อให้สร้างรายการการจับเวลาที่กำหนดเองในแผงประสิทธิภาพ ได้โดยมีค่าใช้จ่ายน้อยที่สุด โดยเฉพาะอย่างยิ่งเมื่อ DevTools ไม่ได้บันทึกการติดตาม
console.timeStamp(label: string, start?: string|number, end?: string|number, trackName?: string, trackGroup?: string, color?: DevToolsColor);
label:ป้ายกำกับสำหรับรายการการจับเวลา
start(ไม่บังคับ):หากกำหนดเป็นสตริง: ชื่อของการประทับเวลาที่บันทึกไว้ก่อนหน้านี้ (ใช้
console.timeStamp(timeStampName))หากกำหนดเป็นตัวเลข: การประทับเวลาเป็นมิลลิวินาทีที่สัมพันธ์กับ Performance.timeOrigin (เช่น ใช้
performance.now()) ซึ่งแสดงถึงเวลาเริ่มต้นของรายการการจับเวลาหากไม่ได้กำหนดไว้ ระบบจะใช้เวลาปัจจุบันเป็นเวลาเริ่มต้น
end:หากกำหนดเป็นสตริง: ชื่อของการประทับเวลาที่บันทึกไว้ก่อนหน้านี้
หากกำหนดเป็นตัวเลข: การประทับเวลาเป็นมิลลิวินาทีที่สัมพันธ์กับ Performance.timeOrigin (เช่น ใช้
performance.now()) ซึ่งแสดงถึงเวลาสิ้นสุดของรายการการจับเวลาหากไม่ได้กำหนดไว้ ระบบจะใช้เวลาปัจจุบันเป็นเวลาสิ้นสุด
trackName:ชื่อของแทร็กที่กำหนดเอง
trackGroup:ชื่อของกลุ่มแทร็ก
color:สีของรายการ
แทรกข้อมูลด้วย User Timings API
หากต้องการแทรกข้อมูลที่กำหนดเอง ให้ใส่ออบเจ็กต์ devtools ภายในพร็อพเพอร์ตี้ detail ของเมธอด performance.mark และ performance.measure โครงสร้างของออบเจ็กต์ devtools นี้จะเป็นตัวกำหนดวิธีแสดงข้อมูลในแผงประสิทธิภาพ
ใช้
performance.markเพื่อบันทึกเหตุการณ์หรือการประทับเวลาทันทีในไทม์ไลน์ คุณสามารถทำเครื่องหมายจุดเริ่มต้นหรือจุดสิ้นสุดของการดำเนินการที่เฉพาะเจาะจง หรือจุดที่น่าสนใจซึ่งไม่มีระยะเวลา เมื่อคุณใส่ออบเจ็กต์devtoolsภายในพร็อพเพอร์ตี้detailแผงประสิทธิภาพ จะแสดงเครื่องหมายที่กำหนดเองในแทร็กการจับเวลาใช้
performance.measureเพื่อวัดระยะเวลาของงานหรือกระบวนการ เมื่อคุณใส่ออบเจ็กต์devtoolsภายในพร็อพเพอร์ตี้detailแผงประสิทธิภาพ จะแสดงรายการการวัดที่กำหนดเองในไทม์ไลน์ในแทร็กที่กำหนดเอง หากคุณใช้performance.markเป็นจุดอ้างอิงเพื่อสร้างperformance.measureคุณไม่จำเป็นต้องใส่ออบเจ็กต์devtoolsในการเรียกperformance.mark
ออบเจ็กต์ devtools
ประเภทเหล่านี้กำหนดโครงสร้างของออบเจ็กต์ devtools สำหรับฟีเจอร์ส่วนขยายต่างๆ
type DevToolsColor =
"primary" | "primary-light" | "primary-dark" |
"secondary" | "secondary-light" | "secondary-dark" |
"tertiary" | "tertiary-light" | "tertiary-dark" |
"error";
interface ExtensionTrackEntryPayload {
dataType?: "track-entry"; // Defaults to "track-entry"
color?: DevToolsColor; // Defaults to "primary"
track: string; // Required: Name of the custom track
trackGroup?: string; // Optional: Group for organizing tracks
properties?: [string, string][]; // Key-value pairs for detailed view
tooltipText?: string; // Short description for tooltip
}
interface ExtensionMarkerPayload {
dataType: "marker"; // Required: Identifies as a marker
color?: DevToolsColor; // Defaults to "primary"
properties?: [string, string][]; // Key-value pairs for detailed view
tooltipText?: string; // Short description for tooltip
}
ดูข้อมูลในไทม์ไลน์
หากต้องการดูข้อมูลที่กำหนดเองในไทม์ไลน์ ให้ตรวจสอบว่าได้เปิดการตั้งค่าต่อไปนี้ในแผงประสิทธิภาพ แล้ว: Capture settings > Show custom tracks

ลองใช้ในหน้าสาธิตนี้ เริ่มบันทึกประสิทธิภาพ คลิกเพิ่ม Corgi ใหม่ ในหน้าสาธิต แล้วหยุดบันทึก คุณจะเห็นแทร็กที่กำหนดเองในการติดตามที่มีเหตุการณ์พร้อมคำแนะนำเครื่องมือที่กำหนดเอง รายละเอียดในแท็บข้อมูลสรุป และข้อมูลสรุปกลุ่มแทร็กที่กำหนดเองในข้อมูลสรุปการติดตาม
ตัวอย่างโค้ด
ต่อไปนี้คือตัวอย่างบางส่วนเกี่ยวกับวิธีใช้ API เพื่อเพิ่มข้อมูลของคุณเองลงในแผงประสิทธิภาพ โดยใช้กลไกที่มีอยู่แต่ละกลไก
ตัวอย่าง API console.timeStamp
// Take a start timestamp
const start = performance.now();
// Measure duration from start to now
console.timeStamp("measure 1", start, undefined, "My Track", "My Group", "primary-light");
// Take an end timestamp
const end = performance.now();
// Measure duration from start to end
console.timeStamp("measure 2", start, end, "My Track", "My Group", "secondary-dark");
ซึ่งจะส่งผลให้เกิดรายการแทร็กที่กำหนดเองต่อไปนี้ในไทม์ไลน์ประสิทธิภาพ

ตัวอย่าง User Timings API
ในส่วนถัดไป ให้ดูตัวอย่างโค้ดที่แสดงวิธีเพิ่มรายการต่อไปนี้ลงในไทม์ไลน์ประสิทธิภาพ
แทร็กและรายการที่กำหนดเอง
สร้างแทร็กที่กำหนดเองและป้อนข้อมูลลงในแทร็กเพื่อแสดงข้อมูลประสิทธิภาพในแทร็กที่กำหนดเอง ตัวอย่างเช่น
// Mark used to represent the start of the image processing task
// The start time is defaulted to now
const imageProcessinTimeStart = performance.now();
// ... later in your code
// Track entry representing the completion of image processing
// with additional details and a tooltip
// The start time is a marker from earlier
// The end time is defaulted to now
performance.measure("Image Processing Complete", {
start: imageProcessinTimeStart,
detail: {
devtools: {
dataType: "track-entry",
track: "Image Processing Tasks",
trackGroup: "My Tracks", // Group related tracks together
color: "tertiary-dark",
properties: [
["Filter Type", "Gaussian Blur"],
["Resize Dimensions", "500x300"]
],
tooltipText: "Image processed successfully"
}
}
});
ซึ่งจะส่งผลให้เกิดรายการแทร็กที่กำหนดเองต่อไปนี้ในไทม์ไลน์ประสิทธิภาพ พร้อมด้วยข้อความคำแนะนำเครื่องมือและพร็อพเพอร์ตี้

เครื่องหมาย
ไฮไลต์จุดที่น่าสนใจที่เฉพาะเจาะจงในไทม์ไลน์ด้วยเครื่องหมายที่กำหนดเองซึ่งครอบคลุมแทร็กทั้งหมด ตัวอย่างเช่น
// Marker indicating when the processed image was uploaded
performance.mark("Image Upload", {
detail: {
devtools: {
dataType: "marker",
color: "secondary",
properties: [
["Image Size", "2.5MB"],
["Upload Destination", "Cloud Storage"]
],
tooltipText: "Processed image uploaded"
}
}
});
ซึ่งจะส่งผลให้เกิดตัวทำเครื่องหมายต่อไปนี้ในแทร็กช่วงเวลา พร้อมด้วยข้อความเคล็ดลับเครื่องมือและพร็อพเพอร์ตี้
