profiling-performance
Profile a running web application's CPU performance using Cursor's built-in browser profiler. Captures call stacks, identifies slow functions, and suggests optimizations. Use when a page feels slow or janky.
Install
npx skills add https://github.com/spencerpauly/awesome-cursor-skills/tree/main/resources/profiling-performance
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install spencerpauly-awesome-cursor-skills@llmmart
git clone https://github.com/spencerpauly/awesome-cursor-skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole spencerpauly/awesome-cursor-skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Performance 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_startReproduce 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.
Files (awesome-cursor-skills)
-
SKILL.md 2.7 KB
--- name: profiling-performance description: Profile a running web application's CPU performance using Cursor's built-in browser profiler. Captures call stacks, identifies slow functions, and suggests optimizations. Use when a page feels slow or janky. --- # Performance 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 1. **Ensure the app is running** — start the dev server if it isn't already running. 2. **Navigate to the slow page**: ``` Tool: browser_navigate Arguments: { "url": "http://localhost:3000/slow-page" } ``` 3. **Start profiling**: ``` Tool: browser_profile_start ``` 4. **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_fill` to interact - Wait a few seconds for the interaction to complete 5. **Stop profiling**: ``` Tool: browser_profile_stop ``` This writes two files to `~/.cursor/browser-logs/`: - `cpu-profile-{timestamp}.json` — raw Chrome DevTools profile - `cpu-profile-{timestamp}-summary.md` — human-readable summary 6. **Analyze the results** — read both files. Key things to look for in the raw JSON: - `profile.nodes[].hitCount` — how many samples hit each function - `profile.nodes[].callFrame.functionName` — the function names - `profile.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 7. **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 `.json` profile 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.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.