Senior frontend engineers spend more time in DevTools than in their IDE. Yet most engineers use 5% of the available capability. The interview question “you have a slow page; how do you debug it?” reveals quickly who has actually used the tools beyond the Console tab.
Network panel
The most-used tab. Beyond “is this request slow”:
- Filter by initiator type (XHR, Fetch, Document, Stylesheet, Script, Img)
- Sort by Time to see slowest requests
- Look at the Waterfall to find blocking dependencies
- Throttle network speed (Fast 4G, Slow 4G) to test on lousy connections
- Disable cache while DevTools is open
- Right-click → “Block request URL” to test what happens without that resource
Performance panel
The most-powerful and most-underused tab. Workflow:
- Click record
- Perform the slow interaction
- Stop recording
- Analyze the timeline
What to look for:
- Long tasks (yellow): JavaScript blocking the main thread >50ms
- Forced reflow (purple): reading layout properties after DOM changes
- Paint and composite: visual updates cost
- Memory growth: heap usage over the recording
The Performance Insights subview surfaces specific issues automatically.
The flame chart
Tasks are stacked vertically by call depth, horizontally by time. Wide bars = expensive functions. Color codes:
- Yellow: scripting
- Purple: rendering
- Green: painting
- Gray: idle
Click any frame to see the call stack and self time.
Memory panel
Three tools:
- Heap snapshot: moment-in-time memory usage. Find what is allocating most.
- Allocation timeline: see allocations over time. Spot leaks.
- Allocation sampling: low-overhead profile for long sessions.
Detecting memory leaks
Standard technique:
- Take a heap snapshot
- Perform an action that should allocate then release (open and close a modal)
- Take another snapshot
- Compare — anything still in the heap that should have been freed is a candidate leak
Common leaks: event listeners not removed, closures holding references, stale React state.
Lighthouse
Built-in audit tool covering performance, accessibility, best practices, SEO, PWA. Run it on every PR.
Key metrics: LCP, CLS, INP, TBT (Total Blocking Time). All map to Core Web Vitals.
Coverage tab
Detects unused JavaScript and CSS. Helpful for finding dead code in bundles.
Application panel
Inspect storage:
- Local storage / session storage
- IndexedDB
- Cookies (with HttpOnly, Secure, SameSite flags)
- Service workers
- Cache storage
Console power features
console.table()for tabular dataconsole.group()/console.groupEnd()for hierarchical logsconsole.time()/console.timeEnd()for measurements$0through$4for last 5 selected DOM elements$_for the result of the last expressionmonitor(fn)to log every call
React DevTools
Browser extension, separate from main DevTools.
- Components panel: inspect props, state, hooks
- Profiler panel: see render times per component
- Highlight updates when components re-render
The Profiler is invaluable for finding “why does this render?” answers.
The “small reproduction” technique
For hard performance bugs:
- Try to reproduce in a small isolated case (single component, no app)
- Profile the small case
- Identify the cause
- Apply fix to the original
This pattern catches bugs faster than profiling the entire app.
Frequently Asked Questions
Performance panel or React Profiler?
React Profiler for React-specific render investigation. Performance panel for everything else (network, layout, paint, JS).
How do I debug performance on actual user devices?
RUM (Real User Monitoring) tools — Datadog RUM, Sentry Performance, web-vitals library reporting to your backend. DevTools only measures your laptop.
What is “Trust the profiler”?
Don’t guess what is slow. Profile first. Engineers consistently mispredict bottlenecks. The profiler tells the truth.