How did React improve performance compared to Angular?
Smaller runtime (~45 KB gzipped vs Angular's larger framework), simpler change detection (re-render on state change vs zone.js patching async APIs), virtual DOM diffing instead of dirty-checking template bindings, hooks-based composition, tree-shakeable, and a leaner mental model that's faster to optimize. Caveat: well-built Angular apps can be very fast; framework choice rarely dominates real-world perf.
The honest answer: 'React is faster than Angular' is half-true and depends on what you measure.
What React did differently
Smaller runtime.
- React + ReactDOM: ~45 KB gzipped.
- Angular: framework + RxJS + Zone.js historically larger (Angular 16+ ivy is much leaner, but still bigger than React baseline).
Different change detection.
- Angular (pre-signals): Zone.js patches setTimeout / Promise / events; any async tick triggers a check across the component tree. OnPush opts a component into manual marks.
- React: re-renders only when state changes; the developer explicitly causes updates.
Virtual DOM diff vs template binding checks.
- Angular compiles templates to imperative DOM update functions. Each check walks bindings.
- React diffs an in-memory tree and patches only the differences.
Neither is obviously faster — but React's model is simpler to reason about, which makes optimization more direct.
Less framework runtime per component.
- Angular components carry decorators, DI metadata, change detection bookkeeping.
- React function components are plain functions called by the reconciler.
Tree-shaking.
- React: standard ES modules, leverages bundler tree-shaking aggressively.
- Angular: improved with Ivy, but historically more framework code shipped because of decorator metadata.
Where Angular pushes back
- Built-in everything: routing, forms, HTTP, animations, i18n. With React you're picking N libraries; if you choose badly, the bundle grows.
- AOT compilation: ahead-of-time template compilation makes runtime faster than dynamic JIT-style frameworks.
- Signals (Angular 16+): fine-grained reactivity that bypasses Zone.js — closing the gap on React's change detection model.
- Strict TypeScript first-class: integration is tighter out of the box than React + TS.
What actually drives real-world frontend perf
- Bundle size delivered to the browser — framework runtime is part of this, but app code usually dominates.
- First paint / hydration cost — SSR / streaming matters more than framework choice.
- Render frequency — too many state updates, missing memoization.
- DOM size — both frameworks suffer from huge component trees.
- Network — slow APIs make any framework look slow.
Framework choice is rarely the bottleneck once the app is non-trivial.
Honest framing
React's smaller runtime and simpler change detection model give it an edge by default. But a well-built Angular 17 app with signals and OnPush is comparable. The bigger differences are ecosystem and team productivity, not raw performance. For most apps the perf bottleneck is the developer's choices, not the framework.
A note on benchmarks
JS Framework Benchmark (krausest) shows React and Angular within 10–20% on most operations. Svelte and SolidJS lead. Differences this small rarely matter for product work.
Follow-up questions
- •How do Angular signals compare to React's hooks model?
- •Where is React's virtual DOM actually slower than direct binding?
- •What perf differences matter beyond framework choice?
Common mistakes
- •Claiming 'React is just faster' without qualification — modern Angular is competitive.
- •Comparing AngularJS (2010) to React — entirely different products.
- •Treating benchmark numbers as the bottom line — real-world perf is dominated by app code.
Performance considerations
- •Both frameworks need: route-level code splitting, image optimization, CDN delivery, careful memoization. The framework choice is one variable among many; bundling, network, and app architecture usually dominate.
Edge cases
- •Very large forms with lots of bindings can favor Angular's compiled templates.
- •Many parallel async streams: RxJS may outperform ad-hoc React + useEffect.
- •SSR-heavy apps: framework runtime cost shows up in hydration; either can be fast.
Real-world examples
- •Many enterprise Angular apps perform very well. Many React apps are bloated. The pattern is: investment in performance practices beats framework choice. Companies on both sides ship Lighthouse-100 apps when they care.