브라우저 공통 INP 관측

Cross-browser INP observation

주요 브라우저에서 입력 이벤트의 반응 시간을 같은 방식으로 수집합니다.

···
html
<div class="atlas"><div class="head"><b>INP · coverage across engines</b><span class="pulse"></span></div><div class="stage"><div class="xinp-row"><b>Engine A</b><div><i id="xinp-a"></i></div><span id="xinp-av">—</span></div><div class="xinp-row"><b>Engine B</b><div><i id="xinp-b"></i></div><span id="xinp-bv">—</span></div><div class="xinp-row"><b>Engine C</b><div><i id="xinp-c"></i></div><span id="xinp-cv">—</span></div><div class="xinp-foot mono" id="xinp-foot">RUM sees three engines</div></div></div>
css
.atlas{width:min(94vw,720px);height:min(88vh,320px);border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:clamp(10px,2.5vmin,18px);display:flex;flex-direction:column;gap:clamp(7px,2vmin,12px);font:500 clamp(12px,3.2vmin,16px)/1.25 var(--font-sans),sans-serif;color:var(--fg);box-shadow:0 8px 28px rgba(0,0,0,.06)}.head{display:flex;align-items:center;justify-content:space-between;color:var(--accent);letter-spacing:.03em}.pulse{width:8px;height:8px;border-radius:50%;background:var(--accent);animation:blink 1.3s infinite}@keyframes blink{50%{opacity:.2}}.stage{flex:1;min-height:0;position:relative;overflow:hidden}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.muted{color:var(--muted)}.accent{color:var(--accent)}.box{border:1px solid var(--line);border-radius:8px;background:var(--bg)}.xinp-row{display:flex;align-items:center;gap:7px;height:26%;font-size:12px}.xinp-row b{width:62px}.xinp-row div{flex:1;height:15px;border-radius:8px;background:var(--line);overflow:hidden}.xinp-row i{display:block;height:100%;width:0;background:var(--accent);transition:width .5s}.xinp-row:nth-child(2) i{background:var(--accent-2)}.xinp-row:nth-child(3) i{background:var(--accent-3)}.xinp-row span{width:42px;text-align:right}.xinp-foot{text-align:center;color:var(--accent);font-size:12px;margin-top:6px}
js
let phase=0;const ids=['a','b','c'],values=['112ms','178ms','134ms'];function tick(){ids.forEach((id,i)=>{const on=i<=phase;document.getElementById('xinp-'+id).style.width=on?[44,72,55][i]+'%':'0%';document.getElementById('xinp-'+id+'v').textContent=on?values[i]:'—'});document.getElementById('xinp-foot').textContent=phase===2?'compare by engine, not CrUX alone':'Event Timing sample arrives';phase=(phase+1)%3}tick();setInterval(tick,850)

INP 값 자체보다 관측 범위가 핵심입니다. 2025년 말 Safari 26.2가 Event Timing API를 지원하면서 최신 주요 브라우저 모두에서 상호작용 데이터를 수집할 수 있게 됐습니다. 기존 Chrome 중심 현장 데이터의 빈틈을 줄일 수 있습니다.

데모는 엔진별 관측 레인에 입력 시간이 들어오는 모습을 보여줍니다. CrUX는 여전히 적격 Chrome 사용자만 포함하므로 브라우저 간 비교에는 자체 RUM 데이터를 사용하고, 엔진별 표시 시점 차이도 감안합니다.

언제 쓰나

Chrome 외 방문자의 반응성도 함께 측정하거나 엔진별 차이를 찾을 때 씁니다.

페이지로 열기 ↗