Reference: the 8 most common INP killers — ranked by observed frequency

Ranked by observed frequency:

  1. Long-running JavaScript on the main thread — particularly framework hydration (React, Vue, Angular) and Evaluate Script tasks > 50ms.
  2. Tag managers with too many tags — GTM container with 18 tags ≈ 20× TBT (Chrome Aurora) — see Chrome Aurora team: Google Tag Manager with 18 tags increases Total Blocking Time ~20×. Largest single category of avoidable INP cost.
  3. Chat widgets (Intercom, Drift, Tawk, HubSpot) — render UI and attach event handlers before user interacts.
  4. A/B testing scripts (Optimizely, VWO) — fire synchronously during page load and on interactions; anti-flicker holds cost both LCP and INP.
  5. Heatmap and session-recording tools (Hotjar, FullStory, Microsoft Clarity).
  6. Heavy framework hydration with no code-splitting — bundles >300 KB compressed are typical INP catastrophes on mid-range Android.
  7. Inefficient event handlers — React re-renders, unmemoised selectors. Addy Osmani case study: yielding to main thread + memoising selectors delivered 69% INP improvement (850ms → 260ms).
  8. Single-page app route transitions that re-hydrate synchronously.

Remediation pattern: Defer/delay 3rd-party scripts until interaction → scheduler.yield() to break long tasks → React.memo/useCallback/useMemo → move tracking to a web worker (Partytown). See RULE: Defer or delay every third-party script until user interaction, except those required for first paint.