React is fast by default for many apps. Performance work starts with measuring—React DevTools Profiler, browser Performance tab, Core Web Vitals—not sprinkling memo everywhere on day one.
Common real issues
- Unnecessary re-renders from new object/array literals in props
- Huge lists without virtualization
- Effects that refetch or resubscribe too often
- Blocking main-thread work in event handlers
Fix order
- Fix algorithmic waste (fetch all rows vs paginate)
- Stabilize props and split context
- Memoize expensive subtrees with evidence
- Code-split routes with
React.lazy+ Suspense in bundler apps
Server vs client
Frameworks like Next.js move data fetching to the server so less JavaScript ships to the browser. The mindset—“what work must run on the client?”—applies even in SPA-only projects.
Self-check
- What would you profile first for a slow table?
- When is virtualization worth it?