Quick reference · Print-friendly

Rendering patterns field guide

Choose per route or region. Start from constraints; combine patterns deliberately.

4 axesProduction · reuse · delivery · activation

Comparison matrix

PatternHTML timingPrimary gainPrimary costGood signal
CSRBrowser runtimeApp-like client modelStartup JS and data waterfallAuthenticated tool; repeat use
SSREach requestFresh or personalized HTMLCompute, latency, operationsCookies or request data shape output
SSGBuild timeCheap, resilient CDN deliveryStaleness and build scaleSame content for many users
ISRBuild + regenerationStatic reads with bounded freshnessInvalidation and stale windowsMany pages; updates tolerate delay
Streaming SSRRequest, chunkedUseful shell before slow regionsFallback and infra complexityIndependent regions have uneven latency
IslandsUsually build/serverJavaScript only for widgetsCross-island coordinationMostly content, sparse interaction
Server ComponentsServer executionServer-only dependencies and data accessBoundary mental model and framework couplingLarge non-interactive component subtrees
ResumabilityServer + lazy continuationAvoid eager hydration replaySerialization constraints and ecosystemStartup JS is the bottleneck

Interview decision script

  1. Classify the content: public or private, shared or personalized, stable or fresh?
  2. Find the interaction boundary: what truly requires browser state, events, or browser APIs?
  3. Choose HTML timing: build, request, or browser—and at which route/component boundary?
  4. Choose reuse: CDN, application cache, per-user response, and explicit invalidation semantics.
  5. Choose delivery: complete response or streamed boundaries with meaningful fallbacks?
  6. Budget activation: no JS, progressive enhancement, islands, hydration, or resumability?
  7. Name failure modes: stale data, hydration mismatch, buffering, cache leakage, server overload, JS disabled.
  8. Name evidence: TTFB, LCP, INP, JS bytes, cache-hit rate, origin load, and conversion/task success.

Correct the premise

“RSC or SSR?”

RSC is an execution/payload boundary; SSR produces initial HTML. A framework can use both.

“Static or dynamic?”

Usually a spectrum by region and data source, not a whole-site binary.

“SSR fixes SEO?”

It can expose initial content, but correctness, crawlability, metadata, links, status codes, and speed still matter.

“Streaming makes it faster?”

It can improve progressive display; it does not reduce all work and may be neutralized by buffering.