Frontend Mastery
Lesson 13 of 30 43% of course

Component Re-rendering: How to profile and fix slow UIs

16 · 8 min · 5/23/2026

Sign in to track progress and bookmarks.

React Performance Profiling

In React, a "Re-render" isn't necessarily bad. But **Wasted Re-renders** (when a component renders but the DOM doesn't change) can turn a fast app into a laggy mess. As a frontend architect, you must know how to use the React DevTools Profiler to find these killers.

1. The Profiler "Flame Chart"

The Profiler shows you a bar for every component.

  • Gray Bars: The component did NOT re-render. (Perfect).
  • Colored Bars: The component re-rendered. The wider the bar, the longer it took.
Click on a colored bar, and React will tell you exactly which prop or state change caused that specific component to wake up.

2. Fixing the "Drilling" Re-render

If a parent state changes, all children re-render by default. You can stop this using React.memo(). It performs a "Shallow Comparison" of the props. If the props are and identical, React skips the component entirely.

4. Interview Mastery

Q: "Why would you NOT want to wrap every component in React.memo?"

Architect Answer: "Because `React.memo` is not free. It involves storing a copy of the old props in memory and performing a comparison on every render. If your component is small and simple (like an icon or a basic button), the 'Shallow Comparison' can actually take MORE time than just letting React re-render. Memoization should be reserved for expensive components or components that re-render hundreds of times per second."

Test your knowledge

Quizzes linked to this course—pass to earn certificates.

Browse all quizzes
Frontend Mastery

On this page

1. The Profiler "Flame Chart" 2. Fixing the "Drilling" Re-render 4. Interview Mastery
1. Core Foundation & Modern JS
ES6+ for Architects: Closures, Generators, and Symbols Asynchronous JS: Event Loop, Microtasks, and Promises TypeScript Mastery: Advanced Types, Generics, and Utility Types
2. React Internals & Core Hooks
Virtual DOM vs Reconciliation: The Fiber Architecture Effective useState & useEffect: Avoiding infinite loops useMemo vs useCallback: When optimization becomes a bottleneck useContext + useReducer: Building a built-in state manager Custom Hooks: Extracting business logic for reusability
3. Professional State Management
Redux Toolkit (RTK): Slices, Selectors, and Thunks RTK Query: Automating API caching and synchronization Zustand: The lightweight alternative to Redux Signal-based State: The future of fine-grained reactivity
4. Performance & Rendering
Component Re-rendering: How to profile and fix slow UIs Lazy Loading & Code Splitting: Shrinking your bundle size Virtualization: Rendering million-row lists efficiently Web Workers: Offloading heavy calculations to background threads
5. Design Systems & CSS
Modern CSS: Grid, Flexbox, and Container Queries CSS-in-JS vs TailWindCSS: Choosing the right styling strategy Storybook: Building a shared component library Accessibility (a11y): Building inclusive web interfaces
6. Next.js & Modern Frameworks
Next.js App Router: SSR vs SSG vs ISR React Server Components (RSC): The end of the Waterfall Data Fetching Patterns: Streaming and Suspense SEO for Frontend: Meta Tags, JSON-LD, and Core Web Vitals
7. Testing & Security
Unit Testing: Vitest and React Testing Library E2E Testing: Playwright for mission-critical flows Frontend Security: XSS, CSRF, and Content Security Policy State Synchronization: Optimistic UI & WebSockets
8. Final Polish & Interview
Micro-Frontends: Scalable architecture for enterprise teams Frontend Architect Interview: System Design & Performance