About profiling-performance
profiling-performance is a skill for investigating sluggish web applications with Cursor's built-in browser CPU profiling tools. It saves Chrome DevTools-format profile data and a readable summary for examining call stacks and timing.
Key features
- 01Reproduce slow behavior through browser interactions
- 02Capture CPU profile data
- 03Write raw JSON and readable summaries
- 04Inspect call stacks and function samples
- 05Suggest optimizations based on profile results
Use cases
- 01Investigate a slow or unresponsive page
- 02Find functions with high CPU usage
- 03Compare performance before and after optimization
MCP support
The skill uses the browser_profile_start and browser_profile_stop tools provided by the cursor-ide-browser MCP to capture CPU profiles. It also uses browser tools to navigate and reproduce page interactions.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ revitalb-port/ skills-registry-demo --skill profiling-performanceAfter installing, type/profiling-performancein Claude Code to confirm it loaded.
Details
From the project READMEPerformance Profile
Use this skill when a web application feels slow, janky, or unresponsive. Cursor's built-in browser has CPU profiling tools that capture real call stacks and timing data.
How It Works
The cursor-ide-browser MCP provides browser_profile_start and browser_profile_stop tools that capture Chrome DevTools-format CPU profiles. Profile data is written to ~/.cursor/browser-logs/ as both raw JSON and a human-readable summary.
Steps
-
Ensure the app is running — start the dev server if it isn't already running.
-
Navigate to the slow page:
Tool: browser_navigate Arguments: { "url": "http://localhost:3000/slow-page" } -
Start profiling:
Tool: browser_profile_start -
Reproduce the slow interaction — use browser tools to trigger the slow behavior:
- Click buttons, scroll, type in inputs, navigate between pages
- Use
browser_click,browser_scroll,browser_fillto interact - Wait a few seconds for the interaction to complete
-
Stop profiling:
Tool: browser_profile_stopThis writes two files to
~/.cursor/browser-logs/:cpu-profile-{timestamp}.json— raw Chrome DevTools profilecpu-profile-{timestamp}-summary.md— human-readable summary
-
Analyze the results — read both files. Key things to look for in the raw JSON:
profile.nodes[].hitCount— how many samples hit each functionprofile.nodes[].callFrame.functionName— the function namesprofile.samples.length— total number of samples collected
Cross-reference with the summary to identify:
- Functions consuming the most CPU time
- Unexpected re-renders or layout thrashing
- Expensive third-party library calls
- Synchronous operations blocking the main thread
-
Suggest fixes — based on the profile data, recommend specific optimizations:
- Memoize expensive computations
- Debounce rapid event handlers
- Move heavy work to a Web Worker
- Lazy-load components or routes
- Virtualize long lists
Notes
- Always read the raw
.jsonprofile to verify the summary — the summary can miss nuances. - Profile in development mode first, but be aware that React dev mode adds overhead. For accurate measurements, profile a production build.
- Short profiles (2-5 seconds of interaction) are usually more useful than long ones.
- Compare before/after profiles to verify your optimization actually helped.