Quick reference · Print-friendly

Client execution field guide

Compare replay scope, serialized state, loading granularity, and coordination cost.

3 modelsHydration · islands · resume

Mechanism matrix

DimensionWhole-tree hydrationIslandsResumability
Startup reconstructionReplay rendered client treeReplay explicit interactive rootsRead serialized graph/listener metadata
Lazy boundaryDeveloper chunks/componentsIsland plus triggerFine-grained symbols generated by tooling
State handoffSerialized props/store, then replayPer-root serialized props/storeSerializable state and captured references
CoordinationShared tree/context is directExplicit cross-root channelSerialized reactive graph and async code
Main riskEager CPU/code grows with treeBoundary and shared-state complexitySerialization, chunks, tooling, cold actions
Strong fitDense app-like interactionContent page with sparse widgetsLarge interaction graph needing deferred startup

Selection algorithm

  1. Mark which regions need browser state, events, effects, or browser APIs.
  2. Estimate interaction density, urgency, and cross-region state sharing.
  3. Choose the smallest cohesive client roots and usable pre-hydration behavior.
  4. Choose load timing separately: immediate, idle, visible, media, or interaction.
  5. Audit transitive dependencies, duplicate runtimes, and serialized data.
  6. Measure startup CPU, evaluated code, first/repeat interaction latency, and no-JS behavior.
  7. Include server serialization, HTML metadata, cacheability, tooling, and team cost.

Interview corrections

Islands ≠ code splitting

They define independent client roots and leave other regions outside hydration.

Resume ≠ zero JS

A loader and demanded handlers still execute; eagerness and replay change.

Visible ≠ always late

Visibility can precede readiness. Match triggers to interaction urgency.

Fewer bytes ≠ faster action

Cold chunks and bad scheduling can regress the first interaction.