References — Execution Model, Scheduling & Rendering
Primary sources first. Where a secondary source is listed it is because it is unusually good, not because it is convenient.
Specifications (normative)
- WHATWG HTML Standard — §8.1.7 Event loops — task queues, "perform a microtask checkpoint", "update the rendering". The authoritative source; the update-the-rendering steps are shorter than expected and worth reading once in full.
- WHATWG HTML — Processing model — how a task queue is chosen. This is where "there is no global FIFO" is normative.
- WHATWG HTML — Queuing tasks — task sources.
- W3C Long Animation Frames API — LoAF,
blockingDuration, script attribution. - W3C Event Timing API —
PerformanceEventTiming,interactionId, the 16 msdurationThresholdfloor. - WICG Scheduling APIs —
scheduler.postTask,scheduler.yield, priority semantics. - CSSOM View —
offsetWidthetc. — why geometric reads force layout.
Explanatory (high quality)
- Jake Archibald, In The Loop (JSConf.Asia 2018) — still the best single explanation of tasks vs microtasks, and the origin of the listener-checkpoint example used in Step 1.
- Jake Archibald, Tasks, microtasks, queues and schedules.
- web.dev — Optimize INP
- web.dev — Optimize long tasks — the source of the "yield every ~5 ms" guidance.
- web.dev — Long animation frames API
- Chrome for Developers — Scheduler API
- Chrome for Developers — Avoid large, complex layouts and layout thrashing
- Paul Irish, What forces layout / reflow — the definitive list of layout-forcing properties.
Implementation / source
- Chromium:
docs/on the renderer main-thread scheduler;blink::scheduler::MainThreadSchedulerImpl— task queue priorities and policy transitions. Guided path inbrowser-framework-internals.md§16. - React:
packages/scheduler/src/forks/Scheduler.js—schedulePerformWorkUntilDeadline; whyMessageChannelover microtasks andsetTimeout. web-vitalslibrary —src/onINP.tsis the reference implementation of interaction grouping. Read it if you intend to compute INP yourself; the grouping subtlety indocs/analysis.mdis handled there.
Security-adjacent (why measurement is constrained)
- MDN —
SharedArrayBufferand cross-origin isolation - web.dev — Why you need cross-origin isolation — COOP/COEP, Spectre, timer coarsening.
Deliberately excluded
Generic "JavaScript Event Loop Explained" posts. They are overwhelmingly derived from one another
and a substantial fraction still assert the pre-2019 three-tick await behaviour, which
Checkpoint 3 in docs/verification.md disproves in about four seconds.