Accepting selected projects for Q2 2024 Check availability
SERVER 02SYSTEM ONLINELAST SYNC: 03:17:44RSS_FEED.XML — PARSE WARNING
HALF ASSEDTECHNICAL NOTES_
EST. 2009ISSUE 04.2BEST VIEWED AT 1024 × 768
TECHNICAL NOTES / PRACTICAL GUIDES / ARCHITECTURE / RECORD 696582
[ARCHITECTURE]GUIDE

Choosing server or client rendering by journey

POSTED: 14.04.2022AUTHOR: ADMIN11 MIN READCOMMENTS: 0

Server rendering, static generation and browser rendering solve different delivery problems. A service can combine them if ownership of data, caching, hydration and failure states remains explicit.

Classify the page requirement

Record whether content is public or personalised, how frequently it changes, whether it must be indexed, and what the user can do before JavaScript arrives. Use representative journeys rather than a site-wide label such as application or content site.

Budget the first useful response

Server rendering can deliver readable HTML early but may wait on backend data. Client rendering can reuse an API but adds script download, execution and a second request. Measure both on lower-powered devices and a cold connection.

Control hydration cost

If server HTML becomes interactive through hydration, quantify the JavaScript and main-thread work required to reproduce state already rendered. Use smaller interactive islands where the rest of the page remains stable content.

Design cache and personalisation boundaries

Cache public responses at the appropriate layer and keep user-specific fragments private. Avoid changing the same markup immediately after hydration because server and client interpreted locale, time or permissions differently.

Test degraded operation

Disable JavaScript, delay APIs, expire a session and serve stale content. Define which tasks remain available and how recovery works instead of allowing a spinner to become the only response to a backend fault.

ARCHITECTURE RECORD

Rendering is a per-journey decision with measurable trade-offs; the selected JavaScript framework is an implementation constraint, not the user requirement.