"매 priority-aware task scheduling for the main thread". Scheduler API (scheduler.postTask, scheduler.yield) 는 long task breakup + priority hint (user-blocking / user-visible / background) 로 INP/responsiveness 최적화. 2026 Chromium + Firefox stable.
매 핵심
매 Priorities
user-blocking: 매 immediate UI response (input handler post-work).
user-visible: 매 default — visible 하지만 non-blocking.
background: 매 lazy work (analytics, prefetch).
매 vs setTimeout(0) / requestIdleCallback
매 setTimeout(0): no priority, no abort.
매 rIC: idle only, deadline-based.
매 postTask: explicit priority + AbortSignal + delay.
constcontroller=newTaskController({priority:'user-visible'});scheduler.postTask(longJob,{signal:controller.signal});// 매 cancel
controller.abort();// 매 priority 동적 변경
controller.setPriority('background');
// React 19+ 의 useTransition + scheduler integration
startTransition(()=>{scheduler.postTask(()=>setState(heavy),{priority:'background'});});
매 결정 기준
상황
Approach
Heavy work after input
scheduler.yield() mid-loop
Lazy prefetch
postTask({priority:'background'})
Cancel-able task
TaskController
Idle-only callback
requestIdleCallback
매 simple deferral
queueMicrotask
기본값: 매 long loops 의 scheduler.yield() + 매 background work postTask({priority:'background'}).
🔗 Graph
부모: Browser_Event_Loop · Core_Web_Vitals
변형: requestIdleCallback · queueMicrotask
응용: INP_Optimization · Long_Task_Breakup
Adjacent: AbortController · React_useTransition
🤖 LLM 활용
언제: 매 INP regression 발견 + 매 long task (>50ms) breakup 필요 시. 매 prioritized background work.
언제 X: 매 worker offload 가 더 적합한 CPU-heavy work, 또는 매 framework scheduler (React) 가 이미 처리.
❌ 안티패턴
postTask 안 yield: 매 single long callback 은 여전히 long task. 매 internally yield 필요.
user-blocking 남용: 매 priority inversion 의. 매 진짜 input-critical 만.
Polyfill 없는 production deploy: 매 Safari 일부 버전 미지원.