Long main-thread tasks
Large JavaScript tasks block the browser from starting or finishing an interaction promptly. They may come from first-party bundles, plugins or third parties.
Poor INP means the page takes too long to visually respond after a user interacts. On WordPress the cause is usually main-thread work: plugin JavaScript, page-builder widgets, third-party tags, expensive DOM updates or several small handlers stacked on the same click. I trace the interaction and reduce the work around it.
INP observes interaction latency across a visit. That makes it especially sensitive to JavaScript work that accumulates after load — marketing tags, sliders, builders, filters, validation and large DOM updates.
Large JavaScript tasks block the browser from starting or finishing an interaction promptly. They may come from first-party bundles, plugins or third parties.
A click handler that performs layout reads/writes, loops over a large DOM or synchronously initializes components can create processing delay.
Analytics, consent, chat, ads and experimentation scripts can occupy the same main thread just when the user tries to interact.
Mega menus, filters, popups and builder widgets can trigger costly style/layout/paint work when they add, remove or mutate many nodes.
Some plugins initialize complex widgets on first use. Deferring work is only useful if the first user click is not forced to pay the full initialization cost.
AJAX search, filters and checkout mix browser and network/server latency, so poor responsiveness may require front-end and backend profiling together.
I reproduce the slow menu, filter, form, search or checkout action in DevTools and field/RUM data where available. That prevents wasting effort on scripts unrelated to the interaction users actually experience.
Break the event into input delay, handler processing and presentation delay instead of treating the final INP value as one opaque number.
Identify scripts executing before and during the interaction and map them back to theme code, plugins or third parties.
Inspect listener stacks and component code for synchronous work, forced layout and repeated DOM operations.
Large or deeply nested structures make style/layout updates more expensive, especially for builders, mega menus and faceted filters.
Measure consent/analytics/chat execution and move non-critical work away from interaction-sensitive windows where possible.
For filters, search and checkout, separate browser handler time from request/server time and response rendering so the correct layer gets fixed.
The goal is not to delay every script indiscriminately. It is to keep critical interactions responsive while preserving analytics, consent and application functionality.
Use field clues and business-critical flows — menu, product filter, add to cart, checkout, search, form — rather than testing random clicks.
Unload scripts from pages where they are not needed and eliminate duplicate or legacy libraries/widget code when safe.
Refactor long synchronous work, reduce DOM churn and schedule non-urgent work so the browser can paint feedback sooner.
Simplify menus, filters, popups and builder widgets that trigger expensive layout or repeated initialization.
Load marketing, chat and experimentation code with deliberate priorities and consent behaviour, then confirm measurement still works.
Re-test after production minification/cache/CDN settings because script order and timing can differ from staging.
The handover maps poor INP back to concrete scripts/components so future changes can be reviewed against the same interaction paths.
The specific event and main-thread work responsible for the slow response.
Theme/plugin/third-party sources tied to long tasks around the interaction.
Targeted unloading, refactoring, scheduling or component changes.
Clear decision on what loads immediately, after consent, after idle or only on pages that need it.
Menus, filters, forms, add-to-cart and checkout behaviour validated after JavaScript changes.
How to reproduce the trace and what to monitor as field data accumulates.
For combined LCP, INP and CLS failures, use the full WordPress Core Web Vitals service.
For Core Web Vitals, a good Interaction to Next Paint is 200 milliseconds or less at the 75th percentile. Field data is the target; lab interaction traces identify why an action is slow.
Page caching can improve server response and initial loading, but most INP problems are main-thread interaction work after load. JavaScript, DOM/layout and third-party scripts need separate attention.
Slower mobile CPUs make long JavaScript tasks and DOM work more visible. An interaction that feels fine on a desktop workstation can cross the threshold on mid-range phones.
There is no reliable universal list. Builders, sliders, popups, chat, consent, analytics, filters and forms can all contribute depending on configuration. Trace the actual interaction and map the executing script to its source.
No. Moving expensive initialization to the first interaction can make INP worse. Delay strategies should keep non-critical work away from interaction-sensitive moments.
For interactions that wait on network requests — filters, search, checkout — user-perceived response includes browser and server work. The trace should separate those layers before optimization.