Hints “A hint is a bet on what you'll need next. Bet right → faster. Bet wrong → wasted bandwidth. So only bet on sure things.”
Priority “fetchpriority is a ranking, not a megaphone. If everything's high, nothing is. One high for the LCP, low for its competitors.”
Modules “preload gets you the bytes; modulepreload gets you the parsed module — and flattens the import waterfall. For ESM, reach for modulepreload.”
Platform mapping
preconnect → image CDN, payments, maps
preload + fetchpriority=high → first hotel photo (LCP)
dns-prefetch → analytics / experimentation tags
prerender (Speculation Rules) → top search result on hover = “instant” detail page
Don't fail the interview
1.preload needs as — without it: wrong priority + double fetch.
2. Font preloads need crossorigineven same-origin — mismatched mode → downloads twice.
3. Preloading an image ≠ high priority. Images default Low; add fetchpriority="high".
4. Preconnect is not free — each holds a socket. Cap at ~2–4; dns-prefetch the rest.
5.<link rel=prerender> is legacy — say Speculation Rules instead.
6.Everythingfetchpriority=high = nothing is. One bucket → tie-break on document order → shared bandwidth → LCP can get slower. One high for the LCP, low for the rest.
7. For ES modules use modulepreload, not preload as=script — it parses+compiles into the module map & can fetch the import graph. Safari only ≥17.5 → falls back to preload.