Image Load Lab

Guides Performance Lab Tested Oct 18, 2026 Chrome 155 · HTTP/1.1 and HTTP/2 · 224 loads

fetchpriority and preload for the LCP Image: When They Help

fetchpriority and preload raised the hero request to High priority in Chrome 155, yet LCP did not change across 224 throttled loads over HTTP/1.1 and HTTP/2. Here is why.

fetchpriority="high" on the main image and <link rel="preload"> in the document head are two of the most common recommendations for a faster Largest Contentful Paint. Can we measure their effect in a controlled lab, and under which conditions do they help? We ran 224 page loads across two protocols, two levels of competition and five variants. The result was not the one we expected, and the reason is as useful as the number.

The test

The page shows a 1600 × 900 hero photo (CC0, WebP, 145 KB) after a row of six other images that appear earlier in the HTML, so that they compete with the hero for bandwidth. Two levels of competition:

  • Light: six 480-pixel thumbnails (about 110 KB together).
  • Heavy: six 1024-pixel photos (about 390 KB together).

Five variants change only the hints: a baseline with none; fetchpriority="high" on the hero; a <link rel="preload" as="image" fetchpriority="high"> for the hero; the hero with loading="lazy"; and, for heavy competition, fetchpriority="low" on the six other images. Every variant was served over HTTP/1.1 and over HTTP/2 (with TLS) from a local server and loaded seven times per viewport in fresh Chrome 155 profiles on our slow mobile profile (150 ms latency, 1.6 Mbit/s, 4× CPU). We recorded LCP, the priority Chrome assigned to the hero request and when its download started and ended (methodology).

What went wrong first: our first version of the script read the timing of a 480-pixel thumbnail of the same photo instead of the hero, because both file names started with the same word. The LCP values were correct, but the request times were not. We fixed the script and re-ran every variant.

Results

Grouped bar chart: in all four conditions the baseline, fetchpriority and preload variants reach LCP within about 15 milliseconds of each other, about 1.7 seconds with light competition and 3.1 seconds with heavy
Median LCP of the hero image per condition. Chart generated from the linked CSV.
Median of 7 loads per row, Chrome 155, slow mobile profile; request times from the first run
Protocol Competition Viewport Variant Median LCP (ms) Fastest–slowest Hero priority Hero request start (ms) Hero download end (ms)
HTTP/1.1 light mobile Baseline 1720 1712–1728 Low 193 1690
HTTP/1.1 light mobile fetchpriority=high 1704 1692–1716 High 190 1698
HTTP/1.1 light mobile preload 1700 1700–1724 High 211 1696
HTTP/1.1 light mobile Lazy hero 1712 1692–1732 Low 243 1670
HTTP/1.1 light desktop Baseline 1700 1680–1720 Low 175 1657
HTTP/1.1 light desktop fetchpriority=high 1688 1680–1708 High 186 1668
HTTP/1.1 light desktop preload 1700 1676–1704 High 191 1678
HTTP/1.1 light desktop Lazy hero 1696 1684–1740 Low 251 1669
HTTP/1.1 heavy mobile Baseline 3128 3120–3148 Low 186 3099
HTTP/1.1 heavy mobile fetchpriority=high 3136 3120–3144 High 193 3099
HTTP/1.1 heavy mobile preload 3124 3120–3148 High 184 3103
HTTP/1.1 heavy mobile Others fetchpriority=low 3136 3124–3140 Low 192 3114
HTTP/1.1 heavy desktop Baseline 3120 3108–3136 Low 179 3093
HTTP/1.1 heavy desktop fetchpriority=high 3120 3100–3136 High 180 3098
HTTP/1.1 heavy desktop preload 3112 3104–3132 High 168 3089
HTTP/1.1 heavy desktop Others fetchpriority=low 3120 3104–3140 Low 183 3102
HTTP/2 light mobile Baseline 1692 1680–1720 Low 193 1677
HTTP/2 light mobile fetchpriority=high 1704 1684–1716 High 189 1690
HTTP/2 light mobile preload 1704 1696–1724 High 204 1695
HTTP/2 light mobile Lazy hero 1704 1692–1712 Low 259 1694
HTTP/2 light desktop Baseline 1692 1680–1712 Low 197 1692
HTTP/2 light desktop fetchpriority=high 1692 1676–1704 High 180 1676
HTTP/2 light desktop preload 1700 1676–1712 High 173 1670
HTTP/2 light desktop Lazy hero 1680 1668–1700 Low 258 1682
HTTP/2 heavy mobile Baseline 3132 3116–3136 Low 201 3121
HTTP/2 heavy mobile fetchpriority=high 3136 3124–3160 High 195 3114
HTTP/2 heavy mobile preload 3132 3108–3140 High 201 3124
HTTP/2 heavy mobile Others fetchpriority=low 3132 3120–3144 Low 196 3112
HTTP/2 heavy desktop Baseline 3120 3100–3144 Low 191 3106
HTTP/2 heavy desktop fetchpriority=high 3124 3112–3132 High 204 3112
HTTP/2 heavy desktop preload 3128 3104–3144 High 191 3115
HTTP/2 heavy desktop Others fetchpriority=low 3124 3104–3136 Low 195 3112

The hints changed the priority, not the outcome. Without hints, Chrome first gave the hero request Low priority, as it does for images before layout. With fetchpriority="high" or the preload, the hero was requested at High priority, as documented. But in every one of the eight conditions, the median LCP of all variants fell within about 20 milliseconds of each other, well inside the spread between repeated runs. With light competition LCP was about 1.7 seconds and with heavy competition about 3.1 seconds, whatever the hints.

Horizontal bars: whether Chrome marked the hero Low or High priority, its download ended at about 3.1 seconds in every variant
End of the hero download in the first run of each variant. Chart generated from the linked CSV.

The download timings show why. In every variant, the hero request started at about the same moment (170–260 ms after navigation), and it finished at almost the same time regardless of its priority, because it shared the connection equally with the other images until all of them were done. Even lazy-loading the hero, which delayed its request by 50 to 65 ms, made no difference to LCP here, unlike in our lazy-loading test where twelve images competed.

Why a lab like ours cannot show the benefit

Priority hints work by changing the order in which the server sends data when the network is the bottleneck. In our test, the bottleneck was artificial: Chrome’s built-in network throttling sits inside the browser and shares the simulated bandwidth between requests, while the local server hands over every byte almost instantly. So the server never had a queue to reorder, and the browser’s throttle did not favour high-priority requests. HTTP/2 did not change that.

That has two consequences. First, a negative result from DevTools-style throttling does not prove the hints are useless on real networks, where a server or CDN that honours priorities can send the hero first. Second, a positive result from the same kind of lab would be just as suspicious. To measure these hints you need a real constrained connection (a real phone network, or traffic shaping between a remote server and the device) or, better, field data from real visitors.

Practical conclusion

  • Adding fetchpriority="high" to the one image that is your LCP element is cheap and correctly raised its priority in Chrome 155. Do not add it to several images: priority is relative.
  • Do not expect a lab with simulated throttling to show the gain. We could not measure one in 224 loads over HTTP/1.1 or HTTP/2.
  • The changes that did move LCP in our lab were structural: not lazy-loading the hero when many images compete, keeping its URL in the HTML rather than in an external stylesheet (CSS background test) and sending fewer bytes (srcset test). Fix those first.
  • Judge priority hints with field data, such as the LCP your real visitors experience, before and after the change.

Repeat this test on your own images

If you want to evaluate priority hints on your own site, use measurements from real visitors rather than a throttled lab. Chrome’s User Experience Report (visible in PageSpeed Insights for sites with enough traffic), or your own analytics with the web-vitals library, will show whether the LCP of real visitors changes after you add fetchpriority="high". In the lab, you can still confirm that the hint is applied: open the Network panel, add the Priority column, and check that the hero request is listed as High from the start. Our script run_loading.mjs (the priorityall step) contains the HTTP/1.1 and HTTP/2 servers and the five variants used here, if you want to reproduce the negative result.

Limitations

A local server, simulated throttling and one browser version. We did not test a real mobile network, a CDN with priority scheduling, or HTTP/3. Those are exactly the conditions where the hints are expected to matter, and where we would like to test them next.

Data and files

Download loading-priorityall.csv (32 rows, 6.7 KB) · Method: testing methodology. Photos: image credits.