NEW! How fast is the web, Lighthouse score hacking & making claude.ai 3x faster
I'm writing this with one eye on the calendar, because performance.now() is just a few weeks away! (More on that below.) In the meantime, this month's roundup has a little bit of everything – big data, big wins, and a few cautionary tales:
- A brand-new open dataset with billions of real-user measurements
- A candid panel on the future of user-focused observability
- How "speed" plugins hack Lighthouse scores (without making anything faster)
- How claude.ai got 3x faster in two weeks
- How Poptin cut INP by 57% across thousands of Shopify stores
- Everything you need to know about lazy loading
- Why your RUM data needs more context
- And something just for fun at the end :)
Until next month,
Tammy
@tammyeverts
How fast is the web? Explore billions of real-user measurements with BEACON
The early findings are fascinating: iOS isn't always faster, soft navigations are 2-3x faster than hard ones, and – surprise! – downloading the LCP resource is usually NOT the bottleneck. Discovering it sooner and unblocking its render are the bigger opportunities.
Video: The future of user-focused observability
- Lessons from six-plus years of Core Web Vitals
- The widening performance inequality gap
- Why P75 is a floor, not a ceiling
- What web folks can learn from mobile culture
- What AI agents mean for measuring user experience
Front-End Checklist
The mirage of fast websites: How Lighthouse scores get hacked
How we made claude.ai 3x faster in two weeks
I've read a LOT of performance case studies, and this one is unlike any of them. Raymond Wang, Sam Attard and Isaac G. describe a two-week sprint where Anthropic ran its performance work out of one Slack channel, with Claude finding bottlenecks, building benchmarks, and shipping fixes while humans approved every change. At P75, time to a typeable page on claude.ai dropped from 3.1 seconds to 0.55 seconds. Wow.
My favourite bits are pure performance fundamentals:
- Measuring something makes it tractable
- CLS can say "good" while users see jank
- Guardrails matter (as do em dashes, apparently)
Join us at performance.now() in Amsterdam!
Pat Meenan, Harry Roberts, Tim Vereecke, Aleth Gueguen, Cliff Crocker, Scott Jehl, Jeremy Keith, Martin Michálek, Tim Kadlec, Max Inden, Risko Ruus, Stéphanie Walter and I – plus a mystery speaker (!!) – will be covering everything from web compression, HTTP/3, going beyond P75, Core Mobile Vitals, performance as a design problem, and selling performance inside your org, with Robin Marx and Jason Pamental as MCs.
It's a single-track conference, so everyone sees every talk and then talks about them together over coffee. Get your tickets here, or catch the live stream.
Arriving early? Come to performance.sync()!
If you're coming to performance.now() and getting into Amsterdam a day early, come along to performance.sync. It's the official pre-conference meetup on the evening of November 18, sponsored by Mozilla and hosted by Dave Hunt. Expect short talks from performance folks (to be announced), then drinks, snacks, and lots of time to hang out. More than 80 people have already registered, so don't wait too long!
Case study: How Poptin improved storefront responsiveness for thousands of Shopify merchants
Shopify's Web Performance team traced a ~900ms long task to synchronous XMLHttpRequests in the Poptin popup app's script – running on every page load, whether or not a popup was even configured.
After Poptin switched to async requests and deferred initialization, P75 INP across thousands of stores dropped 57% (from 280ms to 120ms). Reminder: An app doesn't have to be visible to hurt your users!
Lazy loading images and media: How far ahead browsers fetch
Lazy loading is just one HTML attribute, and yet we keep finding new ways to get it wrong. This guide from Ben Schwarz covers what you can lazy load (now including video and audio in Chrome), how differently each browser decides how far ahead to fetch, and where to use lazy, eager, and fetchpriority. One stat that made me wince: 17% of pages lazy-load their LCP image, which delayed the hero image by 262ms in Ben's test on fast 4G.
I guess I'm using WebP now?
This honest post from Gavin Anderegg made me LOL for real. After 20+ years of JPEGs, PNGs and SVGs, Gavin has come around to WebP – not because Lighthouse nagged him, but because his new image editor makes it easy (and the files really are smaller). It's a great reminder that best practices only get adopted when the tooling makes them painless. Here's hoping AVIF and JPEG XL get there faster than WebP's 15 years!
RUM needs more than a percentile
SpeedCurve RUM users, take note... Harry Roberts introduces LUX Sidecar, a small, independent plugin that runs alongside SpeedCurve's lux.js agent to capture extra context like round-trip time, cache state, protocol, service worker involvement and bfcache use.
As Harry points out, your P75 can tell you that something moved, but not why – and context is what helps you get there. I also like his advice to start with a question your current dashboard can't answer, rather than switching on everything just because you can.
Just for fun: Page Rage
Ever been so frustrated by a slow, janky, pop-up-riddled web page that you wanted to blow it up? Now you can! Page Rage, created by Alex Reardon, is a free game that lets you destroy any web page with a jetpack-wearing pixel-art soldier – via a browser extension or on pre-made pages like "Pain Mail" and "The Daily Dread." I won't tell you which sites I tested it on first. ;)