Concurrent Transitions
양보하는 렌더 레인에서는 청크 사이마다 메인 스레드 제어권을 넘겨주고, 남은 작업이 다음 태스크로 예약되는 흐름을 점선 아크 위의 파티클로 보여줍니다. 입력은 그 틈에서 16ms에 처리됩니다.
🔒 동기 렌더 — 끝날 때까지 안 놓는다
250ms10,000개 리스트를 한 태스크에서 만든다. 그 300ms 동안 메인 스레드는 잠겨 있고, 사이에 들어온 키 입력은 큐에서 순서를 기다린다.
- ①10,000개 동기 렌더0ms – 300ms
리스트 전체를 하나의 태스크에서 생성한다. 브라우저는 이 함수가 반환되기 전에는 어떤 이벤트도 처리할 수 없다.
- ②입력300ms – 310ms
태스크가 끝나고서야 밀려 있던 키 입력이 처리된다.
- ③렌더310ms – 340ms
입력창에 글자가 뒤늦게 한꺼번에 나타난다.
- 키 입력 · 250ms 대기
⚡ startTransition — 틈마다 양보한다
16ms같은 총량을 60~70ms 청크로 쪼개고, 청크 사이마다 제어권을 브라우저에 돌려준다. 그 틈에서 키 입력이 16ms 만에 처리된다.
- ①청크 10ms – 60ms
리스트의 첫 조각만 만들고 프레임 예산이 차기 전에 멈춘다.
- ②입력60ms – 76ms
양보된 틈에서 키 입력이 곧바로 처리된다.
- ③렌더76ms – 90ms
입력한 글자가 같은 프레임에 화면에 나타난다.
- ④청크 290ms – 160ms
남은 작업을 다음 태스크로 이어서 진행한다.
- ⑤입력160ms – 176ms
두 번째 키 입력도 같은 방식으로 즉시 처리된다.
- ⑥렌더176ms – 190ms
타이핑이 끊기지 않고 이어진다.
- ⑦청크 3190ms – 260ms
급하지 않은 리스트 렌더는 낮은 우선순위로 계속된다.
- ⑧청크 4260ms – 330ms
총 작업량은 같지만 사용자는 멈춤을 느끼지 않는다.
- 키 입력 · 16ms 대기
- 키 입력 · 16ms 대기
같은 그룹의 다른 시각화
Streaming SSR with Suspense
React · Streaming SSR일괄 SSR과 스트리밍의 첫 화면 표시 시점을 비교합니다.
Selective Hydration
React · Selective Hydration일괄 수화와 선택적 수화에서 클릭이 처리되는 시점을 비교합니다.
Partial Prerendering (PPR)
Next.js · Rendering전체 동적 렌더링과 정적 셸·동적 영역의 스트리밍을 비교합니다.
Optimistic UI (Server Actions)
React · Optimistic UI서버 응답을 기다리는 UI와 먼저 반영하는 낙관적 UI를 비교합니다.
ISR Stale-While-Revalidate
Next.js · Caching재생성을 기다리는 응답과 기존 값을 먼저 반환하는 응답을 비교합니다.