02 · Core
Browser
Rendering, the event loop, storage, and the runtime your code lives in.
How the browser turns bytes into pixels — and why your app is slow. The "explain what happens when…" questions live here.
Architecture & engines
| Topic | Difficulty | Time | Tags | Best Resources |
|---|---|---|---|---|
| Browser high-level architecture (multi-process) | 🟡 | 1h | #internals |
Inside a modern browser (part 1) ⭐ |
| Process/thread model (renderer, GPU, network) | 🟡 | 45m | #internals |
Inside a modern browser (part 2) ⭐ |
| Blink rendering engine | 🟡 | 30m | #internals |
Chromium: Blink ⭐ |
| V8 & JIT compilation | 🔴 | 1.5h | #internals #v8 |
V8 blog ⭐ |
| SpiderMonkey / JavaScriptCore (other engines) | 🟡 | 30m | #internals |
MDN: JS engines ⭐ |
| Hidden classes & inline caches | 🔴 | 1h | #v8 #performance |
V8: hidden classes ⭐ |
The rendering pipeline
| Topic | Difficulty | Time | Tags | Best Resources |
|---|---|---|---|---|
| Critical rendering path (overview) | 🔴 | 1.5h | #rendering |
web.dev: CRP ⭐ |
| HTML parsing & the DOM tree | 🟡 | 45m | #parsing #dom |
MDN: how browsers work ⭐ |
| CSS parsing & the CSSOM | 🟡 | 45m | #parsing #css |
web.dev: CSSOM ⭐ |
| Render tree, Layout & Reflow | 🔴 | 1h | #rendering #performance |
Inside a modern browser (part 3) ⭐ |
| Paint & layers | 🟡 | 45m | #rendering |
web.dev: rendering perf ⭐ |
| Compositing & the compositor thread | 🔴 | 1h | #rendering #performance |
Inside a modern browser (part 3) ⭐ |
| Rasterization & the GPU | 🔴 | 45m | #rendering #gpu |
web.dev: animations guide ⭐ |
| Main thread vs compositor thread | 🔴 | 45m | #performance |
web.dev: long tasks ⭐ |
| Render-blocking resources | 🟡 | 45m | #rendering #performance |
web.dev ⭐ |
Event loop & scheduling
| Topic | Difficulty | Time | Tags | Best Resources |
|---|---|---|---|---|
| Event loop (browser) | 🟡 | 1h | #async #internals |
Jake Archibald: in the loop ⭐ |
| Microtasks vs macrotasks | 🟡 | 45m | #async |
MDN: microtasks ⭐ |
requestAnimationFrame |
🟡 | 30m | #rendering #async |
MDN: rAF ⭐ |
requestIdleCallback & scheduling |
🟡 | 30m | #async #performance |
MDN: rIC ⭐ |
scheduler.postTask / yielding |
🔴 | 45m | #async #modern |
web.dev: optimize long tasks ⭐ |
Memory & storage
| Topic | Difficulty | Time | Tags | Best Resources |
|---|---|---|---|---|
| Memory management | 🔴 | 1h | #memory |
MDN: memory management ⭐ |
| Garbage collection (mark & sweep) | 🔴 | 45m | #memory #v8 |
V8: trash talk ⭐ |
| Memory leaks & detection | 🔴 | 1h | #memory #performance |
Chrome DevTools: memory ⭐ |
| Storage internals (cache/quota) | 🟡 | 45m | #storage |
web.dev: storage ⭐ |
❓ Rapid-fire browser internals interview questions
Real "how does the browser work" interview questions. Answer out loud, then verify above.
- Walk through the rendering pipeline: parse → layout → paint → composite.
- What is the critical rendering path and what blocks it?
- Reflow vs repaint vs composite — which are expensive?
- Explain the event loop, the call stack, and the task queues.
- Microtasks vs macrotasks — what runs first?
- What is
requestAnimationFramevsrequestIdleCallback? - How does the browser build the DOM and CSSOM?
- What is the compositor thread and why does it matter?
- How does garbage collection (mark & sweep) work?
- What causes and how do you find memory leaks?
- What is V8 and how does JIT compilation work?
- Why are transform/opacity animations cheaper than
top/left? - What is a long task and how do you break it up?
- What is the difference between the main thread and web workers?
- How does the browser's multi-process architecture work?
Related: 01-fundamentals · 03-javascript · 09-performance
Missing something? Add a row.