Main-thread task scheduling APIs on React sites

100.0% of audited sites (9,563) schedule tasks via setTimeout (99% good INP), 92.6% use requestAnimationFrame (99% good INP), 85.4% use requestIdleCallback (99% good INP), and 62.9% adopt modern scheduler.yield() (100% good INP, 39ms median).

Field data PhoneDesktopAll Scope All sites October 2026 edition · Desktop field outcomes · React sites only
React Scoped to 9,570 sites out of 210,902 analyzed (frameworks) Compare with all sites →

62.9% of React sites use scheduler.yield() main-thread scheduling API usage, and 100% of those sites have a good INP, against 99% of all React sites.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop field data · 9,563 sites with main-thread scheduling API usageBy Arjen Karel · corewebvitals.io/state-of-cwv
1

INP pass rate

Sites with scheduler.yield() main-thread scheduling API usage have a good INP most often: 100%, against 99% of all React sites. Sites with setTimeout() task scheduling have it least often, at 99%.

SitesGood, needs improvement, poor INPMedian
All React sites1,97999%48ms
scheduler.yield() 62.9%836100%39ms
requestAnimationFrame() 92.6%1,73399%48ms
setInterval() 63.3%1,54399%51ms
requestIdleCallback() 85.4%1,55499%47ms
setTimeout() 100.0%1,97899%48ms
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop field data · 9,563 sites with main-thread scheduling API usageBy Arjen Karel · corewebvitals.io/state-of-cwv
2

Main-thread scheduling API usage usage

SetTimeout() is the most used: 100.0% of React sites. Scheduler.yield() is 62.9% of React sites.

Sites using each option (sites can use more than one) 9,563 sites
setTimeout() 100.0% requestAnimationFrame() 92.6% requestIdleCallback() 85.4% setInterval() 63.3% scheduler.yield() 62.9%
setTimeout() 100.0% requestAnimationFrame() 92.6% requestIdleCallback() 85.4% setInterval() 63.3% scheduler.yield() 62.9%
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop field data · 9,563 sites with main-thread scheduling API usageBy Arjen Karel · corewebvitals.io/state-of-cwv
3

Main-thread scheduling API usage per platform

Wix sets the main-thread scheduling API usage to scheduler.yield() on 100% of its sites, and 100% of Wix sites have a good INP, against 99% of all sites. WordPress sets the main-thread scheduling API usage to setTimeout() on 100% of its sites, and 100% of WordPress sites have a good INP.

PlatformMain-thread scheduling API usage on its sitesGood INP
React sites with main-thread scheduling API usage 9,563 sitessetTimeout() 100%requestAnimationFrame() 93%requestIdleCallback() 85%setInterval() 63%scheduler.yield() 63%99%
Wix 5,824 sitessetTimeout() 100%scheduler.yield() 100%requestAnimationFrame() 100%requestIdleCallback() 100%setInterval() 53%100%
WordPress 2,336 sitessetTimeout() 100%requestAnimationFrame() 81%setInterval() 79%requestIdleCallback() 67%100%
setTimeout() requestAnimationFrame() requestIdleCallback() setInterval() scheduler.yield()
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop field data · 9,563 sites with main-thread scheduling API usageBy Arjen Karel · corewebvitals.io/state-of-cwv
4

Scheduling APIs or the platform

Does the platform explain the main-thread scheduling API usage difference?

Almost every site with scheduler.yield() main-thread scheduling API usage is a Wix site, and almost every Wix site has scheduler.yield() main-thread scheduling API usage, so the data can't tell scheduler.yield() main-thread scheduling API usage and Wix apart. On WordPress, 100% of sites with scheduler.yield() main-thread scheduling API usage have a good INP, against 100% of WordPress sites with setTimeout(). Within WordPress, sites with scheduler.yield() and setTimeout() have a good INP about equally often.

How timer churn (setInterval) and yielding APIs affect input responsiveness

Nearly every site uses setTimeout() (100.0%, 99% good INP), while 63.3% run recurring setInterval() timers (99% good INP, 51ms median) and 92.6% use requestAnimationFrame() (99% good INP). For background work, 85.4% call requestIdleCallback() (99% good INP, 47ms median), while the 62.9% (6,014 sites) adopting scheduler.yield() achieve a 39ms median INP (100% good INP) by yielding to pending user input with priority continuation.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop field data · 9,563 sites with main-thread scheduling API usageBy Arjen Karel · corewebvitals.io/state-of-cwv
5

Understanding main-thread task scheduling APIs

Use scheduler.yield() (with a setTimeout(0) fallback) to break up long main-thread tasks so the browser can paint pending user interactions before resuming work, and eliminate high-frequency setInterval() polling. Across all audited sites, 62.9% use scheduler.yield() (39ms median INP) while 85.4% use requestIdleCallback() (47ms median INP).

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop field data · 9,563 sites with main-thread scheduling API usageBy Arjen Karel · corewebvitals.io/state-of-cwv
Related signals Interaction invoker types → CSS hints → Yielding strategy → INP phase breakdown → By Arjen Karel · 9,570 crawled React sites (1,979 with desktop Chrome field data, 9,563 sites with main-thread scheduling API usage, October 2026) · How we measured