Image Load Lab

Guides Browser Behaviour Tested Oct 18, 2026 Chrome 155 · slow 4G · 5 slides

Carousel Slides: fetchpriority=low Did Not Help, loading=lazy Did

Hidden slides with fetchpriority=low still downloaded and LCP stayed at 5.0 s. With loading=lazy they were never requested, and LCP fell to 1.3 s.

Image carousels usually put every slide in the HTML and hide all but the first with CSS. Chrome downloads images hidden with display: none, as our hidden images test showed, so the hidden slides compete with the first one for bandwidth. Two attributes are often suggested to fix this: fetchpriority="low" on the hidden slides, and loading="lazy". Which one actually brings the first slide in sooner? We measured a five-slide carousel on a throttled phone profile.

The test

The carousel had five slides, each a 1600-pixel CC0 JPEG of 182 KB. The first slide was visible and carried fetchpriority="high"; slides 2 to 5 had display: none. We tested three versions of the hidden slides: no extra attribute, fetchpriority="low", and loading="lazy". Each version was loaded five times in Chrome 155.0.8059.82 with a phone viewport, 150 ms latency, 1.6 Mbit/s and the CPU slowed four times. We recorded the Largest Contentful Paint (the first slide), the images requested and the bytes transferred. The test server used HTTP/1.1. See our methodology.

Results

Bar chart: the first slide reached LCP at 5,032 ms with default priority on the hidden slides and at 5,024 ms with fetchpriority=low, but at 1,316 ms when the hidden slides had loading=lazy
Median LCP of a carousel’s first slide depending on how the four hidden slides were marked up. Chart generated from the linked CSV.
Chrome 155.0.8059.82; five 1600 px JPEG slides; first slide has fetchpriority=high
Hidden slides marked with Median LCP Images requested Image bytes First slide downloaded
slides 2–5 default priority 5,032 ms 5 911 KB 5,011 ms
slides 2–5 fetchpriority=low 5,024 ms 5 911 KB 5,000 ms
slides 2–5 loading=lazy 1,316 ms 1 182 KB 1,297 ms

fetchpriority="low" made no difference. With or without it, Chrome requested all five slides at once (911 KB). The first slide finished at 5.0 seconds, and LCP was 5,024 ms with the hint against 5,032 ms without it.

loading="lazy" cut LCP to 1,316 ms, almost four times faster. Chrome did not request the hidden lazy slides at all during the page load, because a lazy image with display: none has no position on the page and so never comes near the viewport. Only the first slide was downloaded: 182 KB instead of 911 KB.

Why the priority hint did not help

A priority hint changes the order in which the browser sends competing requests, and, on HTTP/2 and HTTP/3, how the server is asked to share the connection. On our HTTP/1.1 server, with five images and up to six connections per host, Chrome sent all five requests at once, so there was no queue to reorder.

To check whether this was only about HTTP/1.1, we ran a related test: a 182 KB hero and four 36 KB thumbnails in the first screen, with fetchpriority="high" on different images, over both HTTP/1.1 and a local HTTP/2 server.

Chrome 155, phone, throttled 4G, 7 loads each; a 182 KB hero and four 36 KB thumbnails in the first screen
Server fetchpriority=high on Median LCP (hero) Hero downloaded Last thumbnail downloaded
HTTP/1.1 nothing 2,060 ms 2,041 ms 1,300 ms
HTTP/1.1 the hero only 2,060 ms 2,041 ms 1,299 ms
HTTP/1.1 the hero and 4 thumbnails 2,052 ms 2,032 ms 1,291 ms
HTTP/1.1 the 4 thumbnails, not the hero 2,060 ms 2,041 ms 1,290 ms
HTTP/2 nothing 2,072 ms 2,053 ms 1,300 ms
HTTP/2 the hero only 2,072 ms 2,053 ms 1,298 ms
HTTP/2 the hero and 4 thumbnails 2,076 ms 2,057 ms 1,304 ms
HTTP/2 the 4 thumbnails, not the hero 2,076 ms 2,058 ms 1,303 ms

Priorities changed nothing in either protocol. Every combination gave the same LCP within 24 ms, and the thumbnails always finished before the hero, simply because they were smaller. A likely factor is that Chrome’s network throttling, which we use to emulate a slow phone connection, shares the emulated bandwidth between active downloads without regard to priority. Lab tests like ours therefore cannot show what a priority-aware server or CDN might gain. loading="lazy" works whatever the network does, because it removes the competing requests altogether.

What to do

  • Add loading="lazy" to every slide except the first. Hidden slides are not requested until the carousel shows them, which is exactly when they are needed.
  • Keep fetchpriority="high" on the first slide only, and never lazy-load it.
  • Expect a short delay when a lazy slide appears. When a slide becomes visible, its download only starts then. Carousels that move automatically can make the next slide eager just before showing it, for example by setting its loading attribute to eager one step ahead.
  • For carousels that scroll sideways instead of hiding slides, lazy loading works differently. Our horizontal carousel test measured how far ahead Chrome loads in that case.

Example markup

<div class="carousel">
  <img src="slide-1.jpg" fetchpriority="high" width="1600" height="1067" alt="…">
  <img src="slide-2.jpg" loading="lazy" width="1600" height="1067" alt="…" hidden>
  <img src="slide-3.jpg" loading="lazy" width="1600" height="1067" alt="…" hidden>
</div>

The hidden attribute here works like display: none. Remove it, or change the class, when the slide becomes active, and Chrome starts the download.

Practical conclusion

On a throttled phone profile, the first slide of a five-slide carousel reached LCP at about 5.0 seconds whether the hidden slides had fetchpriority="low" or not, because all 911 KB were downloaded together. With loading="lazy" on the hidden slides, only the first slide was downloaded and LCP fell to 1,316 ms. Lazy-load hidden slides; do not rely on a low priority hint.

Limitations

Local servers, one carousel layout, Chrome only, five to seven loads per version, and Chrome’s own network throttling. On real HTTP/2 or HTTP/3 servers that respect priorities, fetchpriority="low" may help partly. We did not measure the delay when a lazy slide is shown later.

Data and files

Download carousel-priority.csv (3 rows, 0.2 KB) · Download multiple-fetchpriority-high.csv (4 rows, 0.3 KB) · Download multiple-fetchpriority-high-h2.csv (4 rows, 0.4 KB) · Method: testing methodology. Photo: image credits.

Client Hints on Image Requests: What Chrome Sends

Chrome 155 sent DPR, width and network hints with image requests only after Accept-CH, and to another origin only with Permissions-Policy delegation. Width was in device pixels.

Browser Behaviour 4 min read

Video Poster Images and LCP: Same as an img?

A video poster was discovered as early as an img, got the same priority and counted as the LCP element with the same timing, 1,316 ms against 1,320 ms. It cannot use srcset.

Browser Behaviour 3 min read