← Back to Blog

Preload, prefetch, preconnect: you are probably using the wrong one

Preload, prefetch, preconnect: you are probably using the wrong one

Resource hints are one of those features that seem simple until you actually look at what your site is doing with them. The browser gives you three main levers: preconnect to warm up a connection, preload to fetch a critical resource immediately, and prefetch to grab something you will need on the next navigation. Each one has a specific purpose, a specific priority level, and a specific cost when used incorrectly.

The most common mistake is treating them as interchangeable. They are not. A preload hint tells the browser to fetch a resource at high priority right now, during the current page load. A prefetch hint tells the browser to fetch something at low priority for a future page. If you preload a font that only appears below the fold on a page the user might visit next, you are burning bandwidth and competing with resources that actually matter for the current render.

The priority queue problem

Browsers assign fetch priority to every resource based on type, position in the document, and hints. A stylesheet in the <head> gets highest priority. An image below the fold gets low priority. Resource hints modify this queue, and incorrect hints can push critical resources down the priority stack.

Chrome's network inspector shows this as the "Priority" column, but most developers never check it. When you add rel="preload" to six fonts, three scripts, and a hero image, they all compete for bandwidth at high priority. The browser cannot download everything simultaneously. It has a per-origin connection limit (typically six). The result is that everything takes slightly longer instead of the one critical thing loading fast.

The rule is simple: preload only what blocks the initial render. That usually means one font file and one critical CSS file. Everything else is either a preconnect (you know you will need a connection to that origin) or a prefetch (you are betting the user will navigate to a page that needs this resource).

Preconnect is cheaper than you think

A preconnect hint does three things: DNS resolution, TCP handshake, and TLS negotiation. On a typical connection, that saves 100 to 300 milliseconds per origin. The cost is one socket and the CPU time for the TLS exchange. Compared to loading an actual resource, preconnect is nearly free.

But preconnect has a shelf life. If the browser establishes a connection and you do not use it within 10 seconds, the connection is dropped. Preconnecting to an origin you only use on scroll-triggered lazy loads is usually wasted work. The Preconnect Hints Hygiene Audit catches this pattern: preconnects in the <head> to origins that are not referenced until deep in the page.

What the audit checks

The Resource Hint Priority Audit scans your page's <head> and <body> for every preload, prefetch, preconnect, and dns-prefetch hint. For each one, it checks whether the hint matches the actual usage pattern on the page.

It flags preloaded resources that are never used (the browser will log a console warning for these after 3 seconds, but most developers do not monitor the console in production). It identifies prefetched resources that are actually needed on the current page and should be preloaded instead. It catches duplicate hints, which waste a connection slot and can confuse the browser's priority logic.

The tool also checks as attribute correctness on preload hints. A <link rel="preload" href="font.woff2"> without as="font" will be fetched at default priority instead of font priority, and the browser will download it twice: once for the preload and once when the CSS @font-face rule triggers. The crossorigin attribute is another common miss. Fonts require crossorigin="anonymous" on the preload hint to match the CORS mode that @font-face uses. Without it, the browser fetches the font twice.

Getting it right

Start by listing every origin your page contacts. Use DevTools Network tab, filter by domain. For each third-party origin used above the fold, add a preconnect. For the single most critical render-blocking resource (usually your primary font or critical CSS), add a preload with the correct as and crossorigin attributes. For resources needed on the next likely navigation, add a prefetch.

Then stop. Most pages need fewer than five resource hints total. If you have more than that, you are probably guessing instead of measuring. The audit tool gives you the measurement.

If you are building sites for clients and want to show concrete performance wins, resource hint hygiene is one of the fastest improvements you can demonstrate. I cover this kind of quick-win approach to client deliverables in The $20 Dollar Agency.

Related tools

Fact-check notes and sources

  • Chrome per-origin connection limit of 6: Chromium source, kDefaultMaxSocketsPerGroup = 6. Documented in Chrome DevTools performance audit guidelines.
  • Preconnect idle timeout of 10 seconds: Chromium network stack documentation. The socket is released after 10s of inactivity.
  • Console warning for unused preloads: Chrome issues "The resource was preloaded using link preload but not used within a few seconds" warning after ~3 seconds. Source: Chromium issue tracker, feature implemented in Chrome 71.
  • crossorigin mismatch causing double-fetch: documented in MDN Web Docs, "Preloading content with rel='preload'," under "CORS-enabled fetches."
  • Fetch priority levels by resource type: web.dev, "Optimizing resource loading with the Fetch Priority API," updated 2023.

This post is informational, not performance-consulting advice. Browser implementations may vary across engines and versions.

← Back to Blog

Accessibility Options

Text Size
High Contrast
Reduce Motion
Reading Guide
Link Highlighting
Accessibility Statement

J.A. Watte is committed to ensuring digital accessibility for people with disabilities. This site conforms to WCAG 2.1 and 2.2 Level AA guidelines.

Measures Taken

  • Semantic HTML with proper heading hierarchy
  • ARIA labels and roles for interactive components
  • Color contrast ratios meeting WCAG AA (4.5:1)
  • Full keyboard navigation support
  • Skip navigation link
  • Visible focus indicators (3:1 contrast)
  • 44px minimum touch/click targets
  • Dark/light theme with system preference detection
  • Responsive design for all devices
  • Reduced motion support (CSS + toggle)
  • Text size customization (14px–20px)
  • Print stylesheet

Feedback

Contact: jwatte.com/contact

Full Accessibility StatementPrivacy Policy

Last updated: April 2026