Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · Desktop field outcomes
Metric LCP INP CLS FCP TTFB
1

At a glance the headline numbers for Frameworks performance

How JavaScript frameworks score across LCP, INP and CLS.

87.6%
Best: Gatsby
good TTFB
56.7%
Most used: jQuery
good TTFB
52.7%
Worst: React
good TTFB

Gatsby passes TTFB most often of any framework. 87.6% of its sites pass. React passes least at 52.7%. jQuery (the most-used framework) sits at 56.7%. The gap is 35 percentage points.

The State of Web Vitals · Q2 2026 · 189,915 sites · desktop field datacorewebvitals.io/state-of-cwv
2

The ranking sorted by TTFB at p75, fastest first

# Framework TTFB p75 Passing Sites
1 Gatsby 571ms 87.6%
197
2 Angular 645ms 81.7%
3,036
3 Svelte 828ms 74.3%
416
4 Next.js 881ms 70.4%
1,624
5 Nuxt 1.0s 65.1%
1,162
6 htmx 1.1s 63.5%
268
7 Alpine.js 1.1s 61.9%
2,412
8 Vue 1.1s 60.5%
10,740
9 jQuery 1.2s 56.7%
129,597
10 React 1.5s 52.7%
8,487
The State of Web Vitals · Q2 2026 · 189,915 sites · desktop field datacorewebvitals.io/state-of-cwv
3

Passing TTFB per framework which group passes the TTFB most often

FrameworkSitesPassing TTFBp75
Gatsby 0.1% 197 88% 571ms
Angular 1.6% 3,036 82% 645ms
Svelte 0.2% 416 74% 828ms
Next.js 0.9% 1,624 70% 881ms
Nuxt 0.6% 1,162 65% 1.0s
htmx 0.1% 268 64% 1.1s
Alpine.js 1.3% 2,412 62% 1.1s
Remix 0% 49 62% 994ms
Vue 5.6% 10,740 61% 1.1s
jQuery 68.2% 129,597 57% 1.2s
React 4.5% 8,487 53% 1.5s
Good Needs Improvement Poor Sorted best-passing first · median colored by its own rating · pass = good TTFB (800ms at p75) · one value per site

88% of Gatsby sites pass TTFB. React trails 35 points behind, leaving 47% of its sites failing. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · desktop field datacorewebvitals.io/state-of-cwv
4

All five vitals at once the whole category without toggling - cell is the pass rate, small number the p75

LCP
INP
CLS
FCP
TTFB
Vue 5.6%
832.1s
9976ms
710.12
801.6s
611.1s
Alpine.js 1.3%
921.7s
9966ms
800.08
881.4s
621.1s
Next.js 0.9%
862.0s
95109ms
660.15
861.4s
70881ms
Angular 1.6%
752.5s
97107ms
490.28
801.6s
82645ms
Svelte 0.2%
881.9s
9884ms
790.07
871.4s
74828ms
Remix 0%
862.0s
100100ms
710.11
891.3s
62994ms
React 4.5%
792.3s
9966ms
790.08
771.7s
531.5s
jQuery 68.2%
852.0s
9962ms
770.09
801.6s
571.2s
Nuxt 0.6%
782.4s
9799ms
650.16
781.7s
651.0s
Gatsby 0.1%
832.3s
85130ms
670.15
941.0s
88571ms
htmx 0.1%
951.7s
10065ms
800.06
931.3s
641.1s
60%95%+ passing Cell: pass rate, small number = p75 · faded rows: under 100 sites

One row per framework, one column per vital - the cell is the share of sites passing, the small number the p75. No toggling needed to see where the category actually differs.

Gatsby leads on TTFB: 88% of its sites pass. React trails at 53%. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · desktop field datacorewebvitals.io/state-of-cwv
5

Why this matters for the Core Web Vitals, and where to start fixing it

A JavaScript framework shapes how much code runs in the browser to put your page on the screen. Some render on the server and ship light; others send a large bundle and rebuild the page on the client, which lands on the main thread and shows up in INP. The framework is not destiny, but its defaults and how you use them decide how much JavaScript the visitor has to pay for.

Start by looking at what ships to the browser and when it runs. Render on the server where you can, split the bundle so each page only loads what it needs, and defer the work that is not required for the first interaction. Framework JavaScript runs on the main thread, so the less of it the browser has to execute, the better INP gets.

How does your framework affect Core Web Vitals?

Among the JavaScript frameworks, Gatsby reaches a good TTFB on 87.6% of sites; React on 52.7%.

Related signals CDN (7) → CMS (12) → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured