A client-rendered page arrives empty. The browser parses a document whose body is one div, discovers a script, downloads it, parses it, runs it, and only then does React 7,897 produce elements — nothing is on screen until that chain finishes, and it is as slow as the reader's connection and phone. A server-rendered page arrives with its markup in the response, so the browser paints on the first parse and the bundle catches up afterwards.

Be precise about what that buys. The page paints sooner, which is what a reader on a slow phone notices and what Largest Contentful Paint measures. It becomes interactive slightly later, because hydration is work a client-only page never does. Content sits in the HTML, so crawlers, link unfurlers and text-only clients see it without running scripts. And data can be fetched inside your data center instead of over the reader's connection.
The costs are equally concrete. You run a Node process that must stay up, and rendering is CPU work that scales with traffic: a component blocking for 300 ms blocks that request. Your components must survive an environment with no window, no document and no localStorage, so code touching them moves into an Effect or behind a guard. Session-specific rendering fights with caching. And you ship components twice, as HTML and as the bundle that hydrates them.