Optimize Frontend Performance
Purpose
Improve frontend performance without premature optimization by using a measurement-driven approach.
When to use
Use this skill when you are:
- Seeing slow rendering or sluggish interactions
- Experiencing large bundle sizes or slow initial load
- Implementing large lists or complex pages
- Introducing code splitting and lazy loading
- Reducing network chatter and redundant fetches
Inputs
- The performance symptom (slow load, slow interaction, jank)
- Reproduction steps and target devices/browsers
- Existing profiling tools available (browser profiler, build analyzer)
Outputs
- A prioritized list of performance fixes with acceptance criteria
- A code splitting plan (what to lazy load)
- Render optimization plan (memoization, derived state)
- List optimization plan (virtualization) when applicable
Rules
- Optimization MUST be guided by evidence (profiling/metrics).
- Avoid adding memoization that reduces readability without measurable benefit.
- Large lists SHOULD use virtualization.
- Expensive computations SHOULD be memoized or moved off the critical render path.
Steps
- Measure:
- profile render time
- inspect network waterfall
- inspect bundle analyzer (if available)
- Identify the biggest contributor.
- Apply targeted fixes:
- code splitting for large routes/features
- caching for server state
- memoization for expensive derived values
- virtualization for long lists
- Re-measure and confirm improvement.
- Add a regression guard (test or metric) where practical.
Verification
- Performance issue is measured before and after optimization
- Optimization reduces the identified bottleneck (render time, bundle size, etc.)
- No functionality regression introduced
- Code splitting loads correct chunks for routes
- Virtualized lists render smoothly with large datasets
- Memoization does not reduce code readability without measurable benefit
Boundaries
- MUST NOT optimize without profiling evidence
- MUST NOT add memoization that reduces readability without measurable gain
- MUST NOT skip re-measurement after applying fixes
- SHOULD NOT over-split bundles (too many small chunks can hurt performance)
- SHOULD NOT virtualize small lists (adds complexity without benefit)
- SHOULD NOT cache data indefinitely without invalidation strategy
Included assets
- Templates:
./templates/includes a performance investigation checklist. - Examples:
./examples/includes common optimization scenarios.