skills/nucliweb/webperf-snippets/webperf-interaction

webperf-interaction

SKILL.md

WebPerf: Interaction & Animation

JavaScript snippets for measuring web performance in Chrome DevTools. Execute with mcp__chrome-devtools__evaluate_script, capture output with mcp__chrome-devtools__get_console_message.

Scripts

  • scripts/Input-Latency-Breakdown.js — Input Latency Breakdown
  • scripts/Interactions.js — Interactions
  • scripts/Layout-Shift-Loading-and-Interaction.js — Layout Shift Tracking
  • scripts/Long-Animation-Frames-Helpers.js — LoAF Helpers
  • scripts/Long-Animation-Frames-Script-Attribution.js — Long Animation Frames Script Attribution
  • scripts/Long-Animation-Frames.js — Long Animation Frames (LoAF)
  • scripts/LongTask.js — Long Tasks
  • scripts/Scroll-Performance.js — Scroll Performance Analysis

Descriptions and thresholds: references/snippets.md

Common Workflows

Complete Interaction Performance Audit

When the user asks for interaction analysis or "audit responsiveness":

  1. Interactions.js - List all user interactions with timing
  2. Input-Latency-Breakdown.js - Break down interaction phases
  3. Long-Animation-Frames.js - Detect blocking animation frames
  4. LongTask.js - Identify long tasks blocking the main thread
  5. Scroll-Performance.js - Measure scroll smoothness

INP Deep Dive

When INP is slow (>200ms) or the user asks "debug INP" or "slow interactions":

  1. Interactions.js - Identify which interactions are slow
  2. Input-Latency-Breakdown.js - Break down into input delay, processing time, presentation delay
  3. Long-Animation-Frames.js - Find animation frames >50ms that block interactions
  4. Long-Animation-Frames-Script-Attribution.js - Identify scripts causing the blocking
  5. Long-Animation-Frames-Helpers.js - Get detailed timing and attribution helpers

Scroll Jank Investigation

When the user reports "scroll jank", "choppy scrolling", or "scroll performance issues":

  1. Scroll-Performance.js - Measure scroll smoothness and frame drops
  2. Long-Animation-Frames.js - Detect frames causing jank (>50ms)
  3. Layout-Shift-Loading-and-Interaction.js - Check for layout shifts during scroll
  4. Long-Animation-Frames-Script-Attribution.js - Find scripts running during scroll

Main Thread Blocking Analysis

When the page feels unresponsive or the user asks "why is the page frozen":

  1. LongTask.js - List all tasks >50ms blocking the main thread
  2. Long-Animation-Frames.js - Correlate with animation frame timing
  3. Long-Animation-Frames-Script-Attribution.js - Attribute blocking to specific scripts
  4. Cross-reference with webperf-loading skill:
    • JS-Execution-Time-Breakdown.js (script parsing/execution time)
    • First-And-Third-Party-Script-Info.js (identify third-party blockers)

Layout Shift During Interaction

When the user reports "things move when I click" or CLS issues during interaction:

  1. Layout-Shift-Loading-and-Interaction.js - Separate loading vs interaction shifts
  2. Interactions.js - Correlate shifts with specific interactions
  3. CLS.js (from Core Web Vitals skill) - Measure total CLS
  4. Cross-reference with webperf-media skill:
    • Image-Element-Audit.js (images without dimensions causing shifts)

Animation Performance Analysis

When animations feel sluggish or the user asks "debug animation performance":

  1. Long-Animation-Frames.js - Identify frames taking too long to render
  2. Long-Animation-Frames-Helpers.js - Detailed frame timing analysis
  3. Long-Animation-Frames-Script-Attribution.js - Find scripts delaying frames
  4. Scroll-Performance.js - If scroll animations are involved

Third-Party Script Impact on Interactions

When interactions are slow and third-party scripts are suspected:

  1. Long-Animation-Frames-Script-Attribution.js - Identify third-party scripts in long frames
  2. LongTask.js - Measure long task frequency
  3. Cross-reference with webperf-loading skill:
    • First-And-Third-Party-Script-Info.js (list all third-party scripts)
    • First-And-Third-Party-Script-Timings.js (measure script loading impact)
    • Script-Loading.js (check for blocking scripts)

Decision Tree

Use this decision tree to automatically run follow-up snippets based on results:

After Interactions.js

  • If any interaction > 200ms → Run Input-Latency-Breakdown.js on slow interactions
  • If many interactions > 200ms → Main thread congestion, run:
    1. Long-Animation-Frames.js (blocking frames)
    2. LongTask.js (long tasks)
    3. Long-Animation-Frames-Script-Attribution.js (culprit scripts)
  • If specific interaction types are slow (e.g., click vs keyboard) → Focus on that interaction type
  • If interactions occur during page load → Cross-check with webperf-loading:JS-Execution-Time-Breakdown.js

After Input-Latency-Breakdown.js

  • If Input Delay > 50ms → Main thread was busy, run:
    1. Long-Animation-Frames.js (what was blocking)
    2. LongTask.js (long task before interaction)
  • If Processing Time > 100ms → Heavy event handlers, run:
    1. Long-Animation-Frames-Script-Attribution.js (which scripts)
    2. webperf-loading:First-And-Third-Party-Script-Info.js (third-party involvement)
  • If Presentation Delay > 50ms → Rendering bottleneck, run:
    1. Long-Animation-Frames.js (frame rendering time)
    2. Layout-Shift-Loading-and-Interaction.js (check for layout work)

After Long-Animation-Frames.js

  • If many frames > 50ms → Run Long-Animation-Frames-Script-Attribution.js to identify causes
  • If frames > 100ms → Critical blocking, run:
    1. Long-Animation-Frames-Script-Attribution.js (detailed attribution)
    2. LongTask.js (related long tasks)
    3. webperf-loading:JS-Execution-Time-Breakdown.js (script execution cost)
  • If frames occur during scroll → Run Scroll-Performance.js to measure impact
  • If frames occur during page load → Cross-check with webperf-loading:Event-Processing-Time.js

After Long-Animation-Frames-Script-Attribution.js

  • If third-party scripts are causing long frames → Run:
    1. webperf-loading:First-And-Third-Party-Script-Info.js (list all third-party scripts)
    2. webperf-loading:Script-Loading.js (check loading strategy)
    3. Recommend deferring or removing problematic scripts
  • If first-party scripts are causing long frames → Recommend:
    • Code splitting
    • Debouncing/throttling event handlers
    • Web Workers for heavy computation
  • If forced reflow/layout detected → Analyze DOM manipulation patterns

After LongTask.js

  • If many long tasks (>5) → Main thread is congested, run:
    1. Long-Animation-Frames-Script-Attribution.js (detailed attribution)
    2. webperf-loading:JS-Execution-Time-Breakdown.js (script execution analysis)
    3. webperf-loading:First-And-Third-Party-Script-Info.js (identify heavy scripts)
  • If long tasks > 500ms → Critical blocking, investigate:
    • Synchronous third-party scripts
    • Heavy computation without Web Workers
    • Excessive DOM manipulation
  • If long tasks correlate with interactions → Run Interactions.js to see impact

After Scroll-Performance.js

  • If scroll FPS < 30 → Severe jank, run:
    1. Long-Animation-Frames.js (blocking frames during scroll)
    2. Long-Animation-Frames-Script-Attribution.js (scripts running on scroll)
    3. Layout-Shift-Loading-and-Interaction.js (layout work during scroll)
  • If scroll FPS 30-50 → Noticeable jank, investigate:
    • Scroll event handlers
    • Passive event listeners
    • CSS will-change properties
  • If scroll FPS > 50 → Good, but check for layout shifts during scroll

After Layout-Shift-Loading-and-Interaction.js

  • If shifts occur during page load → Cross-reference with webperf-core-web-vitals:CLS.js
  • If shifts occur during interaction → This impacts INP and UX, investigate:
    1. Dynamic content insertion
    2. Images/ads loading without dimensions
    3. Font swaps (run webperf-loading:Fonts-Preloaded-Loaded-and-used-above-the-fold.js)
  • If shifts occur during scroll → Run Scroll-Performance.js to measure impact

After Long-Animation-Frames-Helpers.js

This is a utility snippet, use results to:

  • Understand frame timing in detail
  • Identify precise script attribution
  • Measure style/layout/paint phases
  • No automatic follow-up, use data to inform next steps

Cross-Skill Triggers

These triggers recommend using snippets from other skills:

From Interaction to Core Web Vitals Skill

  • If INP > 200ms detected → Use webperf-core-web-vitals skill:

    • INP.js (official INP measurement)
    • LCP-Sub-Parts.js (if render delay is causing INP)
  • If layout shifts during interaction → Use webperf-core-web-vitals skill:

    • CLS.js (measure cumulative impact)
    • LCP-Trail.js (check if shifts affect LCP candidate)

From Interaction to Loading Skill

  • If long frames caused by script execution → Use webperf-loading skill:

    • JS-Execution-Time-Breakdown.js (parsing vs execution time)
    • First-And-Third-Party-Script-Info.js (identify heavy scripts)
    • Script-Loading.js (check for blocking patterns)
  • If interactions slow during page load → Use webperf-loading skill:

    • Event-Processing-Time.js (page load phases)
    • Find-render-blocking-resources.js (competing resources)

From Interaction to Media Skill

  • If layout shifts involve images → Use webperf-media skill:
    • Image-Element-Audit.js (check for missing dimensions)

Performance Budget Thresholds

Use these thresholds to automatically trigger follow-up analysis:

INP Thresholds:

  • Good: ≤ 200ms → Monitor, no action needed
  • Needs Improvement: 200-500ms → Run Input-Latency-Breakdown.js
  • Poor: > 500ms → Run full INP debugging workflow (5 snippets)

Long Animation Frames:

  • Warning: > 50ms → Run Long-Animation-Frames-Script-Attribution.js
  • Critical: > 100ms → Run full main thread blocking workflow

Long Tasks:

  • Warning: > 50ms → Monitor frequency
  • Critical: > 200ms or >5 tasks per second → Run attribution and script analysis

Scroll Performance:

  • Good: ≥ 50 FPS → Monitor
  • Needs Improvement: 30-50 FPS → Run Long-Animation-Frames.js
  • Poor: < 30 FPS → Run full scroll jank workflow

Interaction Frequency:

  • If >10 interactions/second → User is actively interacting, prioritize INP optimization
  • If <1 interaction/5 seconds → Interactions are rare, focus on first interaction responsiveness

Multi-Metric Correlation

When multiple interaction metrics are poor:

  • If Long Tasks AND Long Animation Frames both detected → Shared root cause:

    1. Run Long-Animation-Frames-Script-Attribution.js
    2. Likely heavy JavaScript execution
    3. Consider code splitting or Web Workers
  • If INP slow AND CLS high → Interaction-triggered layout shifts:

    1. Run Layout-Shift-Loading-and-Interaction.js
    2. Correlate shift timing with interaction timing
    3. Check for dynamic content insertion
  • If Scroll jank AND Long Animation Frames → Scroll handlers blocking main thread:

    1. Run Long-Animation-Frames-Script-Attribution.js during scroll
    2. Check for non-passive scroll listeners
    3. Audit scroll-triggered animations

References

  • references/snippets.md — Descriptions and thresholds for each script
  • references/schema.md — Return value schema for interpreting script output

Execute via mcp__chrome-devtools__evaluate_script → read with mcp__chrome-devtools__get_console_message.

Weekly Installs
27
GitHub Stars
1.4K
First Seen
12 days ago
Installed on
opencode26
gemini-cli26
amp26
cline26
github-copilot26
codex26