WordPress main-thread yielding and the Core Web Vitals

No yielding API, requestIdleCallback(), scheduler.yield(), isInputPending(), or scheduler.postTask(): how JavaScript-heavy sites break up long tasks and keep Interaction to Next Paint (INP) fast.

Field data PhoneDesktopAll Scope All sites October 2026 edition · Phone field outcomes · WordPress sites only
WordPress Scoped to 63,295 sites out of 203,892 analyzed (cms) Compare with all sites →

On WordPress, 65.4% of sites call no main-thread yielding API. 32.1% use requestIdleCallback() and 2.6% use scheduler.yield(). Across all WordPress sites, 97% without a yielding API have a good INP, compared with 95% for scheduler.yield() and 96% for requestIdleCallback(). Sites without a yielding API load a median of 36 scripts, while scheduler.yield() sites load 35 scripts. Even with that workload, scheduler.yield() holds median Total Blocking Time to 7 ms, against 121 ms for requestIdleCallback().

The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
1

INP pass rate

Sites with no yielding API have a good INP most often at 97%, followed by requestIdleCallback() at 96% and scheduler.yield() at 95%. Both isInputPending() and scheduler.postTask() appear on fewer than 50 sites across the dataset. Pages with little JavaScript do not need a yielding helper, so the raw pass rates mostly reflect how much script each page loads.

SitesGood, needs improvement, poor INPMedian
All WordPress sites36,52497%96ms
navigator.scheduling.isInputPending() <0.1%1100%128ms
No yielding API (none) 65.4%24,00297%95ms
requestIdleCallback() 32.1%11,52796%102ms
scheduler.yield() 2.6%98795%97ms
scheduler.postTask() <0.1%560%174ms
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
2

Main-thread yielding usage

34.6% of WordPress sites call a main-thread yielding API, while 65.4% run scripts without one. Among the sites that yield, 32% (20,295 sites) use requestIdleCallback() and 3% (1,622 sites) use scheduler.yield().

No yielding API (none) 65.4% requestIdleCallback() 32.1%
No yielding API (none) 65.4% requestIdleCallback() 32.1% scheduler.yield() 2.6% scheduler.postTask() <0.1% navigator.scheduling.isInputPending() <0.1%
The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
3

JavaScript workload by yielding strategy

Yielding APIs appear on pages with heavy JavaScript bundles. Sites with no yielding API load a median of 36 scripts and spend 550 ms in CPU scripting (41 ms Total Blocking Time). Sites using requestIdleCallback() load 51 scripts and spend 1194 ms in scripting, which pushes median Total Blocking Time to 121 ms. Sites using scheduler.yield() load a median of 35 scripts (421 ms scripting). Breaking up those tasks keeps median Total Blocking Time at 7 ms, and 95% have a good INP.

Strategy Median scripts on page Median CPU scripting time Median Total Blocking Time Pass rate
scheduler.yield() 1,622 35 scripts 421 ms 7 ms 95%
requestIdleCallback() 20,295 51 scripts 1,194 ms 121 ms 96%
No yielding API (none) 41,365 36 scripts 550 ms 41 ms 97%
The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
4

INP pass rate by total script count

Six in ten scheduler.yield() sites load 66 or more scripts. On those heavy pages, 92% of scheduler.yield() sites have a good INP with a 131 ms median Total Blocking Time. Sites on requestIdleCallback() drop to 94% (308 ms TBT), and sites without yielding sit at 96% (261 ms TBT).

Scripts on page scheduler.yield() requestIdleCallback() No yielding API
1 to 15 scripts
98% 0 ms TBT 244 sites
99% 25 ms TBT 552 sites
97% 0 ms TBT 3,885 sites
16 to 35 scripts
99% 0 ms TBT 584 sites
97% 36 ms TBT 4,719 sites
98% 5 ms TBT 16,044 sites
36 to 65 scripts
93% 24 ms TBT 444 sites
97% 109 ms TBT 8,651 sites
97% 83 ms TBT 15,508 sites
66 or more scripts
92% 131 ms TBT 350 sites
94% 308 ms TBT 6,372 sites
96% 261 ms TBT 5,916 sites
The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
5

Main-thread yielding per framework

On jQuery, 65% of sites use no yielding API and 33% use requestIdleCallback().

FrameworkMain-thread yielding on its sitesGood INP
WordPress sites with main-thread yielding 63,291 sitesNo yielding API (none) 65%requestIdleCallback() 32%97%
jQuery 60,310 sitesNo yielding API (none) 65%requestIdleCallback() 33%97%
React 2,233 sitesrequestIdleCallback() 62%No yielding API (none) 32%96%
Vue 4,844 sitesNo yielding API (none) 74%requestIdleCallback() 24%95%
Alpine 380 sitesNo yielding API (none) 48%requestIdleCallback() 47%88%
No yielding API (none) requestIdleCallback() scheduler.yield() scheduler.postTask() navigator.scheduling.isInputPending()
The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
6

Main-thread yielding or the framework

Does the framework explain the yielding pass rate?

On jQuery, 97% of sites without a yielding API have a good INP, compared with 95% for scheduler.yield() and 96% for requestIdleCallback(). On Vue, 96% of sites without a yielding API have a good INP, against 93% for requestIdleCallback().

Why scheduler.yield() resumes faster than setTimeout or requestIdleCallback()

When a script yields with setTimeout(fn, 0) or requestIdleCallback(), the remaining work goes to the back of the task queue. Any queued timer, third-party tracker, or network callback runs before your function continues. scheduler.yield() pauses the current task so the browser can handle input and paint the next frame, then resumes your code ahead of regular tasks. On script-heavy sites (35 median scripts), that holds median Total Blocking Time to 7 ms, against 121 ms on sites using requestIdleCallback().

The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
7

Understanding main-thread yielding

Break up long JavaScript tasks (over 50 ms) with await scheduler.yield(), and fall back to setTimeout(resolve, 0) in browsers that do not support it yet. Keep requestIdleCallback() for background work like analytics batching, never inside an interaction handler. Across this dataset, sites with no yielding API score 97% good INP because they only load a median of 36 scripts (41 ms Total Blocking Time). Sites using scheduler.yield() load a median of 35 scripts. On pages with 66 or more scripts, scheduler.yield() reaches 92% good INP and 131 ms TBT, ahead of requestIdleCallback() at 94% good INP (308 ms TBT) and 261 ms TBT without yielding.

The State of Web Vitals · October 2026 · WordPress: 63,295 crawled sites · 36,524 with phone field data · 63,291 sites with main-thread yieldingBy Arjen Karel · corewebvitals.io/state-of-cwv
Related signals Scheduling API use → CSS hints → Interaction invoker types → Blocking frame breakdown → By Arjen Karel · 63,295 crawled WordPress sites (36,524 with phone Chrome field data, 63,291 sites with main-thread yielding, October 2026) · How we measured