DIGNALEGI

The reading room · Digna Legi

How modern browsers work

A personal relevance score

80–100: high value. 70–79: worth the time. Below 70: below the usual publication threshold.

Evidence-reviewed score based on available publisher text. Evidence is sampled with gaps, so depth, accuracy across the full article, diagrams, and absence of repetitive filler cannot be fully judged.

Scores reflect one reader’s profile, not an objective quality rating. Best is a separate personal selection.

How scoring works →

This brief · about 3 min with detail

Original article ↗

Why read this

Browser performance becomes legible as dependent pipelines, where scripts, CSS, layout, compositing, and process isolation shape what users see.

AI brief · Checked against source text

The main idea

Modern browsers turn a URL into pixels through coordinated stages: networking, parsing, style calculation, layout, painting, rasterization, compositing, JavaScript execution, and process isolation. The article’s durable claim is that developer-facing advice only makes sense when tied to these mechanisms: scripts can block parsing, CSS can block first render, layout changes can cascade, and compositor-only animation avoids main-thread work.

Some background helpful. Basic familiarity with HTML, CSS, JavaScript, HTTP, and browser DevTools.

Go a little deeper

Loading is speculative before it is visible

The browser does not wait passively for HTML to finish before doing useful work. It may preconnect, cache, tokenize ahead with a preload scanner, process Early Hints, and prioritize render-blocking resources. The important distinction is between resources discoverable from markup and resources injected later by JavaScript; the latter often miss early parallel loading and arrive in a slower chain.

Parsing and rendering are coupled by blocking rules

HTML parsing can stream and recover from malformed markup, but classic scripts interrupt it because they may change the document while it is still being built. CSS adds another dependency: browsers usually wait for head styles before first render, and blocking scripts may also wait for CSS because scripts can query style. The mechanism explains why async, defer, and module scripts alter real page timing.

Performance costs cascade downstream

The browser builds DOM, CSS rules, computed styles, then a layout tree with geometry. A change high in that chain can force later stages to repeat: class changes may recalculate style, size changes may redo layout, and visible changes may repaint. This is why layout thrashing is not merely inefficient JavaScript; it forces synchronous browser bookkeeping across dependent representations.

Smooth motion depends on where work runs

The article’s strongest practical distinction is between work handled by the main thread and work handled by the compositor. Transform and opacity changes can often move an existing layer without recalculating layout or repainting, while height or other layout-bound animation can require repeated main-thread work. The advice is mechanical: animate properties the compositor can update cheaply.

A case from the article

Cross-site iframes become separate processes

Chrome’s site isolation example shows a parent page and a cross-origin iframe no longer sharing one renderer process. The iframe is placed out of process, so even low-level attacks such as Spectre-style memory snooping have a harder path across site boundaries. The example illustrates how security architecture changes invisible implementation details while preserving the normal web API surface for developers.

How the case is made

The case is made as a technical overview, using Chromium as the main path and comparing Gecko and WebKit where their internals diverge.

Where the idea has limits

The article is explicitly an overview focused on Chromium, with selective comparisons to other engines; it should not be read as a complete engine specification.

A question to take away · from Digna Legi

Which frontend habit would you change if you had to name the exact browser stage it stresses?

What the original adds

The source adds many implementation details beyond the brief, including V8’s Ignition, Sparkplug, Maglev and TurboFan tiers, import maps, site isolation, and engine-specific differences such as Firefox’s Stylo and WebRender.

About this brief

AI-written, then separately checked for source support, useful detail and clarity. The author’s claims and our editorial question are kept separate. The original remains the author’s work. How we select and summarise →

Digna legi. Worth reading.