React 19 almost made the internet slower

React 19 Suspense Change & Revert

  • Core issue: a React 19 change altered how Suspense handles async work, degrading performance for parallel data-loading patterns used in SPAs.
  • React team rationale (per linked PR): optimize for “best practices” like hoisting data fetching into server components or route loaders, accepting worse behavior for “bad” patterns.
  • Community feedback: they underestimated how often Suspense is used for parallel loading; this pattern is common, especially in libraries.
  • Change was reverted after pushback; some see this as a normal “try, observe, revert” process, others as evidence React is out of touch with real-world usage.

Vercel, Meta, and Influence

  • Some argue decisions are biased toward Vercel’s SSR/RSC-centric ecosystem and large PaaS interests, at the expense of traditional SPAs.
  • Others counter that the change came from performance considerations at Meta scale, not a plot to “pump Vercel bills,” and note it was quickly walked back.

SPAs, Scaling, and Tooling Pain

  • Several developers report large SPAs (tens of MB bundles, many devs, frequent deploys) as hard to scale: slow builds, heavy tooling, tricky caching, high resource usage.
  • Others say their large React apps build quickly with modern tooling (e.g., Vite) and claim “you overcomplicated your stack” rather than “SPAs don’t scale.”
  • Disagreement on “local-first” vs server-centric: some want more logic and even synced databases on the client; others emphasize team complexity and prefer a strong server–client boundary.

SSR, RSC, Route Loaders

  • Route loaders and “render-as-you-fetch” are promoted as better patterns: start data loading at the router/top-level rather than inside deep components.
  • Some see React Server Components and server actions as solving mostly “Facebook/Vercel problems,” adding complexity for typical SPA use cases.
  • Concern that React’s focus is shifting from simple SPAs to RSC-heavy architectures, potentially alienating developers.

JS Ecosystem Complexity & Churn

  • Frequent complaints about “insane” JS ecosystem churn, heavy bundlers, TypeScript slowness, and fragile dependency stacks.
  • Others push back that “JS ecosystem is insanity” is a lazy cliché, and that modern tools are much simpler than earlier Webpack-era setups.

Alternatives and Framework Tradeoffs

  • Mentioned alternatives: Vue/Nuxt (saner defaults, good perf), Svelte/SvelteKit (lightweight, high DX but visible churn), SolidJS (fine-grained, very fast, small ecosystem), Preact (React-like without current complexity), Inertia.js, HTMX, and even small custom vanilla-JS “frameworks.”
  • Debate over prioritizing ecosystem size, performance, or developer experience; many see React as still the safest bet for complex, interactive UIs due to its ecosystem.

Architecture & Philosophy Debates

  • Renewed arguments about React’s original role as “just the view” vs components now handling model, view, and controller concerns.
  • Some advocate classic MVC-style data loading in controllers/routes or server frameworks (LiveView, Inertia) with React/Vue as thin views.
  • Others view MVC in practice as messy and prefer modern component-centric architectures despite their own pitfalls.