"The top-line takeaway is chilling: sites that are explicitly designed as SPAs, and which have intentionally opted in to metrics measurement around soft-navigations are seeing one (1) soft-navigation for every full page load on average."

Amazing research and analysis as always from @slightlyoff https://infrequently.org/2025/11/performance-inequality-gap-2026/

The Performance Inequality Gap, 2026

Embedded in this year's network and device estimates is hopeful news about the trajectory of devices and networks. It has never been easier to deliver pages quickly, but we are not collectively hitting the mark. Indeed, the latest CrUX data shows not even half of origins have passing Core Web Vitals scores for mobile users. Browsers will need to provide stronger incentives. This will be unpopular, but it is clearly necessary.

Alex Russell

@slightlyoff Frankly I'm skeptical of _all_ claims of SPA superiority:

- Paying for slow initial load is amortized across subsequent soft navs
- Soft navs are faster than hard navs
- Any of this is worth breaking the back button

You can always point to one SPA where it works, but in aggregate it doesn't seem to be working.

@nolan @slightlyoff back in 2020 I briefly worked at a web publishing concern that decided that doing everything as an SPA was good for performance and every time they ran into a performance issue their fix was to put more and more stuff into the initial preload, inlined into the response payload, which eventually bloated it to the point that every initial web request was multiple megabytes of uncacheable, un-CDN-able garbage. *Everything* was inlined, including CSS, images, and the site nav.
@nolan @slightlyoff They hired me for my web performance expertise but refused to actually listen to any of my advice whatsoever, and they were *proud* of this mess. Which was also impossible to debug because the “microservices” were anything but, and even spinning up a “minimal” server to render a single page took 32GB of RAM and multiple disparate software stacks written in a mess of C#, Python 2, nodejs, and React
@nolan @slightlyoff and of course nothing worked on Firefox
@fluffy @slightlyoff When people do things "for performance" but don't have numbers I'm always skeptical

@nolan Yeah in this case they were doing it as "best practices" and couldn't actually justify it at all aside from vague handwaves about how much the page-to-page transitions were sped up slightly, but like, y'know what else would have sped page-to-page transitions up? not delivering 2.5MB per initial pageview.

They also got super mad at Twitter for no longer unfurling the URL cards and one of them called them on the phone to angrily yell at them and I'm like, hey, what the fuck man?

@nolan Anyway the place was a disaster and I left after just a few months. There were *so* many problems and the tech stack was only one of them.