loading='lazy' on images and iframes
Defer offscreen content
<img src="/below-fold.jpg" alt="β¦" width="800" height="400" loading="lazy" /> <iframe src="https://youtube.com/embed/β¦" loading="lazy"></iframe>
loading="lazy" tells the browser: "don't download this image until it's near the viewport." Browser picks a reasonable threshold (~600px below fold). Big savings on long pages with many images.
When NOT to lazy-load
- Above the fold (LCP candidate). Lazy-loading the hero image delays LCP. Use
fetchpriority="high"instead. - Images that load via JS (`<img src>` set after page load). The browser doesn't apply lazy semantics to JS-injected images automatically.
decoding="async"
Pair with decoding="async" to let the browser decode the image off the main thread:
<img src="/photo.jpg" alt="β¦" width="800" height="600" loading="lazy" decoding="async" />
Decoding a 4MB JPEG can block the main thread for 100ms+. decoding="async" keeps the page interactive while the image renders.
iframes too
<iframe loading="lazy"> works the same way. Huge win for pages embedding YouTube/Vimeo/Twitter widgets β they often load 2-3MB of third-party JS per embed.
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.