Images were eighty percent of the page weight
A property portal where the product is photography, and the photography was what made it unusable on mobile.
- Page weight
- 7.9MB1.3MB-84%
- Mobile LCP
- 6.2s1.8s-71%
- Enquiry rate
- 1.0x1.41x+41%
CrUX field data over 90 days post launch. Source: CrUX and CRM enquiry log, August 2025
Context
A property portal with 2,400 active listings, each carrying between twelve and forty photographs, on a market where most browsing happens on a phone.
The constraint
The thing that ruled out the obvious answer.
Image quality was the product. Any compression visible to a buyer comparing two listings side by side would have been rejected by the business, correctly.
Diagnosis
Originals were being served at full resolution to every device. A listing gallery loaded all forty images before the first one appeared, and the same 4000px file went to a phone and a desktop. Nothing was lazy, nothing was sized, nothing was modern format.
What we rejected, and what we chose instead
Any firm can describe what it built. The useful record is the option that was on the table and did not survive.
Rejected
A more expensive image CDN
It would have made the same wrong files arrive faster. The transfer was not the bottleneck, the decision about what to transfer was.
Chosen
Derivative pipeline on upload, AVIF with sized variants
Generate the variants once at upload rather than on every request. Serve the smallest file that fits the viewport, at quality indistinguishable at that size.
What was actually implemented
- 01Derivative generation on upload into R2, seven sizes per image in AVIF and WebP
- 02Responsive srcset with correct sizes attributes so the browser picks, not the server
- 03Gallery loads the first image eagerly and the rest on intersection
- 04Intrinsic dimensions on every image element, eliminating layout shift
- 05Quality tuned per size band, validated by side by side review with the business
Measured, not estimated
Median page weight fell from 7.9MB to 1.3MB and mobile LCP from 6.2s to 1.8s. Enquiries per session rose 41% with no change to listing content or pricing.
CrUX field data over 90 days post launch. Source: CrUX and CRM enquiry log, August 2025
Every image became an explicit business decision.
More from website engineering
Website engineering
A slow site is a revenue problem with a technical cause. We find the cause, fix it, and leave you with the measurement so it does not come back.