It's easy to test a site on office fibre, get a perfect Lighthouse score, and assume the job is done. Then a client in a secondary city mentions their site feels slow, and the gap between "tested performance" and "real performance" becomes obvious.
A CDN helps, but it doesn't fix everything. If the connection between a user's phone and the nearest edge node is still a congested 3G or throttled 4G link, the bottleneck isn't where the CDN can reach — it's the last mile. What actually moves the needle there is reducing what has to travel down that last mile in the first place.
Image weight is usually the biggest offender. We serve modern formats (WebP/AVIF) with explicit width/height to avoid layout shift, and lazy-load anything below the fold so the initial page load isn't blocked fetching images a visitor may never scroll to. On one e-commerce rebuild, this alone cut the initial page weight dramatically without touching the design.
JavaScript is the second lever. Every third-party script — chat widgets, analytics, marketing pixels — adds parse and execution time on a low-end device, even after the network request finishes. We audit these on every project and cut anything that isn't earning its cost, deferring what's left until after the main content is interactive.
Fonts are a smaller but real cost too. Self-hosting fonts (rather than pulling from a third-party font CDN) removes an extra DNS lookup and connection, and using `font-display: swap` means text renders immediately in a fallback font instead of staying invisible while a custom font downloads.
None of this is exotic — it's mostly discipline about what gets added to a page and when it loads. But it's the difference between a site that scores well in a lab test and one that actually feels fast to someone on a 3G connection in a city outside the main metros, which is a real and large part of the audience for a lot of our clients' sites.