Shopify main-thread task scheduling APIs and the Core Web Vitals

100.0% of audited sites (8,246) schedule tasks via setTimeout (96% good INP), 99.8% use requestAnimationFrame (96% good INP), 99.7% use requestIdleCallback (96% good INP), and 4.2% adopt modern scheduler.yield() (92% good INP, 112ms median).

Field data PhoneDesktopAll Scope All sites October 2026 edition · All devices field outcomes · Shopify sites only
Shopify Scoped to 8,248 sites out of 203,892 analyzed (cms) Compare with all sites →

99.7% of Shopify sites use requestIdleCallback() main-thread scheduling API usage, and 96% of those sites have a good INP, against 96% of all Shopify sites.

The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 8,062 with all devices field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
1

INP pass rate

Sites with requestIdleCallback() main-thread scheduling API usage have a good INP most often: 96%, against 96% of all Shopify sites. Sites with scheduler.yield() task scheduling have it least often, at 92%.

SitesGood, needs improvement, poor INPMedian
All Shopify sites8,06296%97ms
requestIdleCallback() 99.7%8,03896%97ms
setTimeout() 100.0%8,06296%97ms
requestAnimationFrame() 99.8%8,04796%97ms
setInterval() 89.5%7,23096%100ms
scheduler.yield() 4.2%33892%112ms
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 8,062 with all devices field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
2

Main-thread scheduling API usage usage

SetTimeout() is the most used: 100.0% of Shopify sites. RequestIdleCallback() is 99.7% of Shopify sites.

Sites using each option (sites can use more than one) 8,246 sites
setTimeout() 100.0% requestAnimationFrame() 99.8% requestIdleCallback() 99.7% setInterval() 89.5%
setTimeout() 100.0% requestAnimationFrame() 99.8% requestIdleCallback() 99.7% setInterval() 89.5% scheduler.yield() 4.2%
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 8,062 with all devices field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
3

Main-thread scheduling API usage per framework

Vue sets the main-thread scheduling API usage to requestIdleCallback() on 100% of its sites, and 94% of Vue sites have a good INP, against 96% of all sites. jQuery sets the main-thread scheduling API usage to setTimeout() on 100% of its sites, and 95% of jQuery sites have a good INP.

FrameworkMain-thread scheduling API usage on its sitesGood INP
All Shopify sites 8,246 sitessetTimeout() 100%requestAnimationFrame() 100%requestIdleCallback() 100%setInterval() 89%96%
jQuery 3,153 sitessetTimeout() 100%requestAnimationFrame() 100%requestIdleCallback() 99%setInterval() 95%95%
Vue 933 sitesrequestIdleCallback() 100%setTimeout() 100%requestAnimationFrame() 100%setInterval() 99%94%
setTimeout() requestAnimationFrame() requestIdleCallback() setInterval() scheduler.yield()
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 8,062 with all devices field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
4

Scheduling APIs or the framework

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

On jQuery, 95% of sites with requestIdleCallback() main-thread scheduling API usage have a good INP, against 95% of jQuery sites with setTimeout(). Within jQuery, sites with requestIdleCallback() and setTimeout() have a good INP about equally often. On Vue, 94% of sites with requestIdleCallback() main-thread scheduling API usage have a good INP, against 94% of Vue sites with setTimeout(). Within Vue, sites with requestIdleCallback() 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%, 96% good INP), while 89.5% run recurring setInterval() timers (96% good INP, 100ms median) and 99.8% use requestAnimationFrame() (96% good INP). For background work, 99.7% call requestIdleCallback() (96% good INP, 97ms median), while the 4.2% (343 sites) adopting scheduler.yield() achieve a 112ms median INP (92% good INP) by yielding to pending user input with priority continuation.

The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 8,062 with all devices field dataBy 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, 4.2% use scheduler.yield() (112ms median INP) while 99.7% use requestIdleCallback() (97ms median INP).

The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 8,062 with all devices field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
Related signals Interaction invoker types → CSS hints → Yielding strategy → INP phase breakdown → By Arjen Karel · 8,246 crawled Shopify sites (8,062 with all devices Chrome field data, October 2026) · How we measured