Why are images loading slowly?
Last checked 31 Aug 2026
Short answer
Images usually load slowly because they're uploaded at full camera/design resolution, in an uncompressed format, and without lazy-loading or a CDN — the fix is compression, correct sizing, and modern formats.
The usual culprits
- Full-resolution originals: a photo taken at 4000x3000px displayed at 400x300px still forces visitors to download the full file.
- Uncompressed formats: PNG for photographs, or JPEG at maximum quality, when a compressed WebP/AVIF would look near-identical at a fraction of the size.
- No lazy-loading: every image on a long page loading immediately, competing for bandwidth with content actually visible on screen.
- No CDN/caching headers: images re-downloaded on every visit instead of cached.
- Loading images from an unoptimised source (e.g. a large asset pasted directly into the project rather than through an image pipeline).
How to check
Open DevTools → Network tab, filter by images, and sort by size. Anything over a few hundred KB for a normal content image is worth investigating.
Fixing it
Check the images on [page]. Compress and resize any that are larger than needed for their display size, convert them to WebP where practical, and lazy-load anything below the fold.
What usually goes wrong
- Compressing images once at launch and then adding new, uncompressed ones later without the same care.
- Using a stock photo or logo at its original multi-MB size "because it looked fine" — Lighthouse and real users will disagree.
- Confusing lazy-loading with compression — lazy-loading delays when an image loads, it doesn't reduce file size. Both matter, but for different problems.
See /questions/how-do-i-optimise-images for a step-by-step approach and /questions/how-do-i-lazy-load-images for the loading-order fix.
Sources
Was this answer helpful?
Related questions
- AnswerWhy is my database making so many requests?Usually a component is re-fetching data on every render, a page is running the same query multiple times, or you're fetching entire tables instead of what's actually needed — ask Lovable to audit data-fetching patterns.
- AnswerHow do I improve Core Web Vitals?Focus on the three metrics Google measures — LCP (loading), INP (interactivity), and CLS (visual stability) — and fix the specific one flagged as poor, usually starting with images for LCP.
- AnswerHow do I lazy-load images?Ask Lovable to add native lazy-loading to images below the fold while keeping the hero/first-visible image loading eagerly, so visitors aren't downloading offscreen images before they're needed.
- AnswerHow do I remove unused code?Ask Lovable to search for unused components, imports and dependencies, or run a tool like ts-prune/depcheck via the terminal, then remove what's confirmed unused and re-test.