SPA Performance Paradox
Teams choose Single Page Applications (React, Angular, Vue) for 'better user experience.' The SPA loads a large JavaScript bundle upfront, then handles navigation client-side without full page reloads. The transitions feel smooth — after the initial load. But that initial load is the problem. Users on slow connections or older devices stare at a blank screen for 3-5 seconds while megabytes of JavaScript download, parse, and execute. The SPA optimized for the developer's MacBook Pro, not the user's $200 Android phone on 3G.
What people believe
“Single Page Applications provide better user experience than server-rendered pages.”
| Metric | Before | After | Delta |
|---|---|---|---|
| First Contentful Paint | 0.5-1.5s (SSR) | 2-5s (SPA) | +200% |
| JavaScript bundle size | <50KB | 200KB-2MB | +500-4000% |
| Bounce rate (mobile, slow connection) | Baseline | +30-50% | +40% |
| Development complexity | Server handles routing/state | Client reimplements everything | +100% |
Don't If
- •Your application is primarily content-focused (blog, docs, marketing, e-commerce)
- •Your users are on mobile devices with variable connection quality
- •SEO is important for your business
If You Must
- 1.Use SSR or SSG for initial page loads — hydrate to SPA after
- 2.Set strict bundle size budgets and enforce them in CI
- 3.Code-split aggressively — load only what's needed for the current route
- 4.Test on real devices with throttled connections, not just your dev machine
Alternatives
- Server-rendered with islands — Astro, Fresh — static HTML with interactive islands where needed. Best of both worlds.
- Progressive enhancement — HTML-first, enhance with JS — works without JS, better with it
- HTMX / server-driven UI — Server renders HTML fragments, client swaps them in — SPA-like UX without the JS bundle
This analysis is wrong if:
- SPAs consistently achieve faster First Contentful Paint than server-rendered alternatives on median devices
- SPA bundle sizes remain stable or decrease as features are added over 18 months
- Users on low-end devices and slow connections show equal or better engagement with SPAs vs server-rendered pages
- 1.Web Almanac: JavaScript Usage Report
Median page ships 500KB+ of JavaScript, with SPAs significantly above average
- 2.Google: Web Vitals and Business Impact
Every 100ms improvement in LCP increases conversion rate by up to 1%
- 3.Alex Russell: The Market for Lemons
Analysis of how SPA frameworks impose performance costs that disproportionately affect users on low-end devices
- 4.Remix: The Web's Next Transition
Framework creators explaining why the SPA model is being replaced by server-first approaches
This is a mirror — it shows what's already true.
Want to surface the hidden consequences of your engineering decisions?