Skip to content

Commit 9149229

Browse files
committed
docs: add measured RSC results
1 parent 1d31945 commit 9149229

File tree

2 files changed

+60
-6
lines changed

2 files changed

+60
-6
lines changed

rsc-migration-report.md

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# RSC Migration Report
22

3-
Status: pre-ship bundle + code audit complete. Current production Lighthouse baseline captured. Post-deploy production compare still pending.
3+
Status: bundle + code audit complete. Production Lighthouse baseline and post-deploy compare captured.
44

55
## Scope
66

@@ -160,13 +160,11 @@ Notes:
160160

161161
## Post-Deploy Compare
162162

163-
Fill this in after deploy to `main` and re-run Lighthouse on the same production URLs.
164-
165163
| Page | Before Score | After Score | Before LCP | After LCP | Before TBT | After TBT | Before Bytes | After Bytes | Notes |
166164
| ------------------------------- | -----------: | ----------: | ---------: | --------: | ---------: | --------: | -----------: | ----------: | ----- |
167-
| `/query/latest` | 80 | | 3.4s | | 300ms | | 765 KiB | | |
168-
| `/blog/react-server-components` | 52 | | 3.7s | | 1,200ms | | 1,101 KiB | | |
169-
| `/router/latest/docs/overview` | 78 | | 3.6s | | 280ms | | 917 KiB | | |
165+
| `/query/latest` | 80 | 77 | 3.4s | 3.8s | 300ms | 250ms | 765 KiB | 784 KiB | Roughly flat. Slightly worse score/LCP on this run, slightly better TBT. |
166+
| `/blog/react-server-components` | 52 | 74 | 3.7s | 3.6s | 1,200ms | 260ms | 1,101 KiB | 785 KiB | Clear win. Huge TBT and transfer-size drop, major score improvement. |
167+
| `/router/latest/docs/overview` | 78 | 81 | 3.6s | 3.6s | 280ms | 200ms | 917 KiB | 777 KiB | Modest win. Better score, lower TBT, lower transfer size. |
170168

171169
## Conclusions So Far
172170

@@ -175,3 +173,25 @@ Fill this in after deploy to `main` and re-run Lighthouse on the same production
175173
- Clear removal of markdown parsing and syntax highlighting from the client bundle
176174
- Not a universal bundle win across all landing pages yet
177175
- Best pages to watch post-deploy: blog and docs
176+
177+
## Post-Deploy Read
178+
179+
- Blog got the clearest real-world benefit.
180+
- Lighthouse score improved from `52` to `74`
181+
- TBT dropped from `1,200ms` to `260ms`
182+
- transfer size dropped from `1,101 KiB` to `785 KiB`
183+
- Docs improved, but less dramatically.
184+
- Lighthouse score improved from `78` to `81`
185+
- TBT dropped from `280ms` to `200ms`
186+
- transfer size dropped from `917 KiB` to `777 KiB`
187+
- Query landing did not show a Lighthouse win on this run.
188+
- Score went from `80` to `77`
189+
- LCP worsened slightly from `3.4s` to `3.8s`
190+
- TBT improved slightly from `300ms` to `250ms`
191+
192+
Interpretation:
193+
194+
- The bundle-side story predicted this fairly well.
195+
- The strongest wins landed on markdown-heavy pages where we removed the client markdown/highlighting pipeline.
196+
- The landing-page story remains mixed because those pages were not dominated by markdown and some of the server-rendered example-shell work traded complexity reduction for slightly more initial shell work.
197+
- If we want broader Lighthouse wins on library landings, the next work is probably not more RSC conversion. It is targeted landing-page performance work.

src/blog/react-server-components.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,40 @@ You choose patterns **per-route, per-component, per-use-case**. The architecture
449449

450450
---
451451

452+
## What We Saw On TanStack.com
453+
454+
We did not want to make the case with vibes, so we migrated the content-heavy parts of tanstack.com and measured it.
455+
456+
The result was exactly what we hoped for, and also more limited than the hype would suggest.
457+
458+
The best pages got meaningfully smaller:
459+
460+
- **Blog post pages** dropped about **153 KB gzipped** from the client JS graph.
461+
- **Docs pages** dropped about **153 KB gzipped**.
462+
- **Docs example pages** dropped about **40 KB gzipped**.
463+
464+
And the real-world numbers moved with them:
465+
466+
- **`/blog/react-server-components`** went from **52 -> 74** in Lighthouse.
467+
- Total Blocking Time dropped from **1,200ms -> 260ms**.
468+
- Transfer size dropped from **1,101 KiB -> 785 KiB**.
469+
- **`/router/latest/docs/overview`** went from **78 -> 81**.
470+
- Total Blocking Time dropped from **280ms -> 200ms**.
471+
- Transfer size dropped from **917 KiB -> 777 KiB**.
472+
473+
That is the point. **Heavy client work stopped shipping to the client.** Markdown parsing went away. Syntax highlighting went away. The browser got less JavaScript and did less work. As a side effect, we also got to delete the old client markdown and highlighting path instead of carrying two versions of the same rendering logic around.
474+
475+
But RSCs are not a universal coupon code for performance. Some landing pages were basically flat, and a few were slightly worse. Pages that are already dominated by interactive UI shell do not automatically get faster just because you used a server component somewhere in the tree.
476+
477+
That is the tradeoff:
478+
479+
- **RSCs are great when the page is content-heavy, dependency-heavy, or both.** Docs, blogs, markdown pipelines, syntax highlighting, slow-changing content, SEO-heavy pages. That is the sweet spot.
480+
- **RSCs are less obviously useful when the page is already mostly client state and interaction.** Dashboards, builders, long-lived app sessions, and some landing pages can be flat or mixed unless you are removing real client-side work.
481+
482+
That is why we think they matter. Not because every route should become a server component. Because when you use them where they fit, the payoff is measurable and not subtle.
483+
484+
---
485+
452486
## Current Status: Experimental
453487

454488
RSC support is experimental in TanStack Start RC and will remain experimental into early v1.

0 commit comments

Comments
 (0)