PageSpeed Matters
    Speed Audit
    Let's Talk
    PageSpeed Matters
    Book a Call
    Data Study · Frameworks

    React, Vue and Angular Each Pass Core Web Vitals on Only About a Third of Mobile Sites

    Matt SuffolettoWritten by Matt Suffoletto
    Published July 15, 2026 8 min read
    Share

    We matched Chrome field data to the JavaScript framework running on 3.5 million-plus sites. React, Vue and Angular each pass Core Web Vitals on about a third of mobile sites, below the web-wide average, while lighter frameworks like Svelte and Alpine.js pass far more often, and the gap shows up on responsiveness.

    Key Findings

    1. 1.React sites pass Core Web Vitals on just 37.1% of mobile origins, Vue on 33.7%, Angular on 33.6%. All three sit below the roughly 42% web-wide mobile pass rate measured on the same basis.
    2. 2.Alpine.js (56.3%) and Svelte (43.5%) pass far more often than the heavyweight frameworks. Alpine passes at 1.5 times React's rate and more than twice Nuxt's.
    3. 3.The framework gap is widest on responsiveness (INP), not loading. Good-INP runs 71% to 76% on React, Vue and Angular mobile sites versus 82.5% web-wide.
    4. 4.React Router (single-page-app) sites are the worst in the set: 23.9% mobile pass and only 63.4% good INP. Client-side routing without server rendering is the harshest pattern for phones.
    5. 5.On desktop every framework looks healthy, passing 46% to 65% with 93% to 99% good INP. The framework penalty is almost entirely a mobile-hardware story.
    6. 6.Widen the lens to whole architectures and the same ladder appears: across 9.6 million origins, sites with no JavaScript framework pass 44.0% of the time, client-side SPAs 39.7%, and server-rendering meta-frameworks like Next.js just 30.3%. Astro is the exception at about 48%, proof that how much JavaScript a site ships, not the framework label, decides the score.

    Summary

    The JavaScript framework a team picks is one of the biggest architectural decisions it will make, and it is almost always defended on performance. The field data complicates that defence. React, Vue and Angular, the three most popular UI frameworks on the web, each pass Google's Core Web Vitals on only about a third of the mobile sites that run them, below the average for the web as a whole.

    That gap is not academic. Speed decides whether visitors stay, whether they convert, and how a page ranks in Google. Core Web Vitals measure the experience directly: how fast the main content loads, how quickly the page responds to a tap, and how stable the layout stays. A framework that drags those numbers down is costing its owners users and search visibility on every visit.

    We measured this in Google's real-user field data, the Chrome UX Report collected from actual visitors on their own phones, not a benchmark on a developer's laptop, where every framework looks fine.

    What the data covers

    We used HTTP Archive's technology detection to identify the JavaScript framework on each site, then joined it to the Chrome UX Report, Google's field record of Core Web Vitals from real Chrome users. That gave more than 3.5 million mobile origins with a field reading, grouped into framework buckets of at least 30,000 sites each so every comparison rests on a large sample. A site passes Core Web Vitals when it is good on all three metrics at once at the 75th percentile of its visitors: Largest Contentful Paint under 2.5 seconds, Interaction to Next Paint under 200 milliseconds, and Cumulative Layout Shift under 0.1. Measured on mobile, that is a demanding bar, and it is the bar Google itself uses to decide whether a page is fast.

    The frameworks lose on responsiveness, not loading

    The revealing part is where the frameworks fall short. It is not primarily loading. It is responsiveness: Interaction to Next Paint, the metric that captures how quickly a page reacts after you tap. Across the whole web, Interaction to Next Paint is good on about 82.5% of mobile sites. On React it drops to 76.3%, on Vue to 71.5%, on Angular to 76.1%.

    The reason is structural. A framework's core job is to run JavaScript on the main thread, and Interaction to Next Paint is a direct tax on main-thread work. The browser cannot paint the response to a tap until it finishes the JavaScript queued ahead of it. A framework that hydrates a large component tree and re-renders on state changes gives the main thread more to do, and on a mid-range phone that queue is exactly what a user feels as lag. Frameworks are the one major technology category where Interaction to Next Paint, not loading, is the standout weakness.

    Good responsiveness (INP) by framework vs web-wide average (mobile)
    Alpine.js
    92.7%
    Web-wide average
    82.5%
    Svelte
    79.6%
    React
    76.3%
    Vue.js
    71.5%
    Next.js
    66.3%
    React Router (SPA)
    63.4%

    Source: PageSpeed Matters analysis, mobile 75th-percentile field data, May 2026.

    The heaviest frameworks dip well below the web-wide INP line, the distinctive framework weakness.

    The single-page-app pattern is the harshest

    The worst performer in the set is React Router, the routing library behind client-rendered single-page apps, at 23.9% mobile pass, 63.4% good responsiveness, and just 41.8% good loading. It is the purest expression of the pattern: the browser downloads a JavaScript bundle, executes it, and only then renders the page and wires up interactions, so both loading and responsiveness suffer on a constrained device.

    Server-rendered and lightly-hydrated approaches do the opposite. Alpine and Astro ship mostly finished HTML and add interactivity selectively, and they score near the top. The table below sorts the field by mobile pass rate, and the gradient from light to heavy runtime is clean the whole way down. The lesson is less 'React is bad' than 'shipping the whole app to the client and rendering it there is expensive on phones.'

    Framework Mobile origins CWV pass Good LCP Good INP Good CLS
    Alpine.js 101,305 56.3% 77.3% 92.7% 91.2%
    Astro 35,500 48.0% 76.7% 88.9% 94.5%
    Svelte 82,906 43.5% 70.5% 79.6% 87.0%
    Backbone.js 99,736 37.3% 54.9% 84.5% 82.1%
    React 1,276,307 37.1% 61.1% 76.3% 81.7%
    AngularJS (legacy) 73,871 36.7% 63.0% 79.8% 72.0%
    Vue.js 572,503 33.7% 58.8% 71.5% 76.7%
    Angular 215,405 33.6% 55.6% 76.1% 72.0%
    React Router (SPA) 193,700 23.9% 41.8% 63.4% 72.7%

    Next.js and Nuxt.js are meta-frameworks and are covered separately, alongside Astro, in our meta-framework study, which reports their pass rates in full. Astro is retained above as a reference point for the lightly-hydrated end of the runtime-weight ladder. Buckets are non-exclusive.

    The baseline: sites with no framework pass most often

    Widen the lens from individual libraries to whole architectures and the same pattern holds. A separate analysis of 9.6 million origins sorted sites by how they render into three buckets: no JavaScript framework at all, a client-side single-page app, and a server-rendering meta-framework like Next.js or Nuxt. Sites carrying no framework pass Core Web Vitals most often, at 44.0%. Client-side SPAs pass 39.7%. Meta-frameworks, the bucket that markets itself hardest on speed, pass just 30.3%, the lowest of the three. Every step up in framework machinery is a step down in field pass rate.

    That baseline is what makes the one-in-three result for React, Vue and Angular so telling. These libraries sit in the middle band, above the meta-frameworks but below the no-framework long tail of blogs, brochure sites and simple CMS pages. Astro is the clean exception: it lives in the meta-framework bucket yet passes about 48%, close to the no-framework rate and roughly double Next.js, because its islands architecture ships far less JavaScript to the browser by default. The point lines up with the framework ranking above. It is not the category label that decides the outcome, it is how much JavaScript reaches the phone.

    Core Web Vitals pass rate by architecture (mobile)
    No JS framework (MPA)
    44%
    Client SPA (React/Vue/Angular)
    39.7%
    Meta-framework (Next/Nuxt/Gatsby)
    30.3%

    Source: PageSpeed Matters analysis of 9.6 million origins with CrUX field data, June 2026. Astro passes about 48% on its own inside the meta-framework row.

    More framework machinery, lower pass rate. The architecture that markets itself hardest on speed posts the worst field scores.

    The penalty is a mobile one, and it tracks runtime weight

    Two things follow from the data. First, judge framework performance on a mid-range Android, not a laptop, because on desktop every framework here passes 46% to 65% with 93% to 99% good INP, so the penalty that pulls React to 37.1%, Vue to 33.7% and Angular to 33.6% is almost entirely a mobile-hardware story, and mobile is where most users are. Second, if you are on a heavyweight framework and failing, look at Interaction to Next Paint before loading, because that is where the gap opens: good INP runs 71% to 76% on React, Vue and Angular against 82.5% web-wide, and React Router's client-side pattern bottoms the set at 63.4%. Reduce hydration and break up the long tasks that keep the main thread busy after a tap. For the meta-framework picture in depth, see our meta-framework head-to-head.

    The deeper pattern is that runtime weight behaves like a performance budget, and the ranking sorts almost perfectly by it. Alpine.js, which layers small amounts of interactivity onto server-rendered HTML, tops the table at 56.3%, more than twice Nuxt.js at 24.9%, while Astro passes about 48% from inside the meta-framework bucket that otherwise averages 30.3%. Widen the lens to 9.6 million origins and the same ladder holds, from no framework at 44.0% to client SPAs at 39.7% to meta-frameworks at 30.3%. The category label is not what decides the score. How much JavaScript reaches the phone is.

    Related studies