PerformanceEventTiming
Baseline
2025
æè¿å©ç¨å¯è½
December 2025以éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
PerformanceEventTiming ã¯ã¤ãã³ãã¿ã¤ãã³ã° API ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ãã¦ã¼ã¶ã¼æä½ã«ãã£ã¦çºçãããç¹å®ã®ã¤ãã³ãåã®å¾
ã¡æéã«é¢ããåæçµæãæä¾ãã¾ãã
解説
ãã® API ã«ãããç¹å®ã®ã¤ãã³ãåï¼ä¸è¨åç §ï¼ã®ã¤ãã³ãã®ã¿ã¤ã ã¹ã¿ã³ãã¨å¦çæéãæä¾ãããã®ã§ãé ãã¤ãã³ããå¯è¦åãããã¨ãã§ããããã«ãªãã¾ããä¾ãã°ãã¦ã¼ã¶ã¼æä½ãããã®ã¤ãã³ããã³ãã©ã¼ãå§ã¾ãã¾ã§ã®æéããã¤ãã³ããã³ãã©ã¼ãå®è¡ããã¾ã§ã«ãããæéãç£è¦ãããã¨ãã§ãã¾ãã
ãã® API ã¯ãInteraction to Next Paint (INP) ï¼ã¦ã¼ã¶ã¼ãã¢ããªãæä½ããæç¹ããããã©ã¦ã¶ã¼ãå¿çã§ããããã«ãªãã¾ã§ã®æé·æéã§ãå¤ãå¤ãé¤ãï¼ã測å®ããã®ã«ç¹ã«æçã§ãã
é常ã PerformanceEventTiming ãªãã¸ã§ã¯ããæ±ãã«ã¯ã PerformanceObserver ã¤ã³ã¹ã¿ã³ã¹ã使ãã observe() ã¡ã½ãããå¼ã³åºãã¦ã type ãªãã·ã§ã³ã« "event" ã¾ã㯠"first-input" ãæ¸¡ãã¾ãã PerformanceObserver ãªãã¸ã§ã¯ãã®ã³ã¼ã«ããã¯ã¯ã PerformanceEventTiming ãªãã¸ã§ã¯ãã®ãªã¹ãã¨ã¨ãã«å¼ã³åºããã¾ããä¾ãã°ä¸è¨ã®ä¾ãã覧ãã ããã
æ¢å®ã§ã¯ãPerformanceEventTiming é
ç®ã¯ duration ã 104ms 以ä¸ã®å ´åã«å
¬éããã¾ãã調æ»ã«ããã¨ã 100ms 以å
ã«å¦çãããªãã¦ã¼ã¶ã¼å
¥åã¯é
ãã¨èãããã¦ããã 104ms 㯠100ms ãã大ããæåã® 8 ã®åæ°ã§ãï¼ã»ãã¥ãªãã£ä¸ã®çç±ããããã® API ã¯æãè¿ã 8 ã®åæ°ã«ä¸¸ãããã¾ãï¼ã
ããããobserve() ã¡ã½ããã® durationThreshold ãªãã·ã§ã³ã使ç¨ãã¦ãPerformanceObserver ãå¥ã®é¾å¤ã«è¨å®ãããã¨ãã§ãã¾ãã
ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ã親ã§ãã PerformanceEntry ã®ã¡ã½ããã¨ããããã£ãç¶æ¿ãã¦ãã¾ãã
å ¬éãããã¤ãã³ã
ã¤ãã³ãã¿ã¤ãã³ã° API ã§å ¬éãããã¤ãã³ãåã¯ä»¥ä¸ã®éãã§ãã
| ã¯ãªãã¯ã¤ãã³ã |
auxclick,
click,
contextmenu,
dblclick
|
|---|---|
| 夿ã¤ãã³ã |
compositionend,
compositionstart,
compositionupdate
|
| ãã©ãã° & ããããã¤ãã³ã |
dragend,
dragenter,
dragleave,
dragover,
dragstart,
drop
|
| å ¥åã¤ãã³ã |
beforeinput,
input
|
| ãã¼ãã¼ãã¤ãã³ã |
keydown,
keypress,
keyup
|
| ãã¦ã¹ã¤ãã³ã |
mousedown,
mouseenter,
mouseleave,
mouseout,
mouseover,
mouseup
|
| ãã¤ã³ã¿ã¼ã¤ãã³ã |
pointerover,
pointerenter,
pointerdown,
pointerup,
pointercancel,
pointerout,
pointerleave,
gotpointercapture,
lostpointercapture
|
| ã¿ããã¤ãã³ã |
touchstart,
touchend,
touchcancel
|
ãªããé£ç¶ã¤ãã³ãã§ããããã®æç¹ã§ã¯æå³ã®ããã¤ãã³ãã«ã¦ã³ããããã©ã¼ãã³ã¹ææ¨ãå¾ããã¨ãã§ããªãããããªã¹ãã«å«ã¾ãã¦ããªãã¤ãã³ããããã¾ãã mousemove, pointermoveãpointerrawupdateãtouchmoveãwheelãdrag ã§ãã
å
¬éããããã¹ã¦ã®ã¤ãã³ãã®ãªã¹ããåå¾ããã«ã¯ã performance.eventCounts ãããã®ãã¼ãè¦ã¦ãããã¨ãã§ãã¾ãã
const exposedEventsList = [...performance.eventCounts.keys()];
ã³ã³ã¹ãã©ã¯ã¿ã¼
ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯èªåèªèº«ã§ã³ã³ã¹ãã©ã¯ã¿ã¼æã£ã¦ãã¾ããã PerformanceEventTiming ã¤ã³ã¿ã¼ãã§ã¤ã¹ãä¿æãã¦ããæ
å ±ãåå¾ããä¸è¬çãªæ¹æ³ã«ã¤ãã¦ã¯ãä¸è¨ã®ä¾ãåç
§ãã¦ãã ããã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ãã¤ãã³ãã¿ã¤ãã³ã°ããã©ã¼ãã³ã¹é
ç®åã®ä»¥ä¸ã® PerformanceEntry ããããã£ããæ¬¡ã®ããã«ä¿®é£¾åãã¦æ¡å¼µãã¾ãã
PerformanceEntry.durationèªåå°ç¨-
DOMHighResTimeStampã§ãstartTimeããæ¬¡ã®æç»ã¾ã§ã®æéï¼8ms ã«ä¸¸ãããã®ï¼ãè¿ãã¾ãã PerformanceEntry.entryTypeèªåå°ç¨-
"event"ï¼é·ãã¤ãã³ãï¼ã¾ãã¯"first-input"ï¼æåã®ã¦ã¼ã¶ã¼æä½ï¼ãè¿ãã¾ãã PerformanceEntry.nameèªåå°ç¨-
é¢é£ããã¤ãã³ãã®åãè¿ãã¾ãã
PerformanceEntry.startTimeèªåå°ç¨-
DOMHighResTimeStampã§ãé¢é£ä»ããããã¤ãã³ãã®timestampããããã£ã表ãå¤ãè¿ãã¾ããããã¯ã¤ãã³ãã使ãããæå»ã§ãããã¦ã¼ã¶ã¼ã®æä½ãçºçããæå»ã®ãããã·ã¼ã¨èãããã¨ãã§ãã¾ãã
ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ä»¥ä¸ã®ããããã£ã«ã対å¿ãã¦ãã¾ãã
PerformanceEventTiming.cancelableèªåå°ç¨-
é¢é£ããã¤ãã³ãã®
cancelableããããã£ãè¿ãã¾ãã PerformanceEventTiming.interactionIdèªåå°ç¨-
é¢é£ããã¤ãã³ããçºçãããã¦ã¼ã¶ã¼æä½ã䏿ã«èå¥ãã ID ãè¿ãã¾ãã
PerformanceEventTiming.processingStartèªåå°ç¨-
ã¤ãã³ãé ä¿¡ãéå§ãããæå»ã表ã
DOMHighResTimeStampãè¿ãã¾ããã¦ã¼ã¶ã¼æä½ããã¤ãã³ããã³ãã©ã¼ãå®è¡ãå§ããã¾ã§ã®æéãè¨æ¸¬ããã«ã¯ãprocessingStart-startTimeãè¨ç®ãã¾ãã PerformanceEventTiming.processingEndèªåå°ç¨-
ã¤ãã³ãé ä¿¡ãçµãã£ãæå»ã表ã
DOMHighResTimeStampãè¿ãã¾ããã¤ãã³ããã³ãã©ã¼ãå®è¡ããã®ã«ããã£ãæéãè¨æ¸¬ããã«ã¯ãprocessingEnd-processingStartãè¨ç®ãã¾ãã PerformanceEventTiming.targetèªåå°ç¨-
é¢é£ä»ããããã¤ãã³ãã®æå¾ã®å¯¾è±¡ãé¤å»ããã¦ããªãå ´åããããè¿ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
PerformanceEventTiming.toJSON()-
ãã®
PerformanceEventTimingãªãã¸ã§ã¯ãã® JSON 表ç¾ãè¿ãã¾ãã
ä¾
>ã¤ãã³ãã¿ã¤ãã³ã°æ å ±ã®åå¾
ã¤ãã³ãã®ã¿ã¤ãã³ã°æ
å ±ãåå¾ããã«ã¯ã PerformanceObserver ã®ã¤ã³ã¹ã¿ã³ã¹ã使ãã observe() ã¡ã½ãããå¼ã³åºãã¦ã type ãªãã·ã§ã³ã®å¤ã¨ã㦠"event" ã¾ã㯠"first-input" ãæ¸¡ãã¦ãã ãããã¾ããã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ããææ¸ã®æ§ç¯ä¸ã«ãããã¡ãªã³ã°ããã¤ãã³ãã«ã¢ã¯ã»ã¹ããã«ã¯ã buffered ã true ã«è¨å®ããå¿
è¦ãããã¾ãã PerformanceObserver ãªãã¸ã§ã¯ãã®ã³ã¼ã«ããã¯ã¯ã PerformanceEventTiming ãªãã¸ã§ã¯ãã®ãªã¹ãã¨ã¨ãã«å¼ã³åºããã¾ãã
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
// æéå
¨ä½
const duration = entry.duration;
// å
¥åé
å»¶ï¼ã¤ãã³ãå¦çåï¼
const delay = entry.processingStart - entry.startTime;
// åæã¤ãã³ãå¦çæé
// ï¼é
ä¿¡ã®éå§ã¨çµäºï¼
const eventHandlerTime = entry.processingEnd - entry.processingStart;
console.log(`Total duration: ${duration}`);
console.log(`Event delay: ${delay}`);
console.log(`Event handler duration: ${eventHandlerTime}`);
});
});
// ã¤ãã³ãã®ãªãã¶ã¼ãã¼ãç»é²
observer.observe({ type: "event", buffered: true });
ç°ãªã durationThreshold ãè¨å®ãããã¨ãã§ãã¾ããæ¢å®ã§ã¯ 104ms ã§ãæå°å¯è½ãªé¾å¤ã¯ 16ms ã§ãã
observer.observe({ type: "event", durationThreshold: 16, buffered: true });
仿§æ¸
| 仿§æ¸ |
|---|
| Event Timing API > # sec-performance-event-timing > |