Skip to main content
← πŸ“„ HTML & the platformΒ·Module A7 Β· Lesson 5
TaskBuild an image with src='/photo.jpg', alt='Below fold photo', width=800, height=600, loading='lazy', decoding='async'. And an iframe src='https://youtube.com/embed/abc' with loading='lazy'.

loading='lazy' on images and iframes

75 XP5 min
Theory

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.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.