rel="prefetch"必须静态写在HTML的中,且位于和之后、首个或之前;动态插入或置于中完全无效。

rel="prefetch" 必须放在
里且在
浏览器只在初始 HTML 解析阶段读取 常见错误是构建工具(比如 Webpack + HtmlWebpackPlugin)把 很多人误以为 这意味着: 在 Chrome DevTools 的 Network 面板里, 验证是否真被缓存使用,不能只看 Network 是否有请求,要三看: 预取在空闲时触发,但“空闲”是相对的。在 3G 或高延迟 Wi-Fi 下,浏览器未必有真正空闲窗口;此时 这不是理论风险,而是真实可复现的问题。尤其当搜索结果页同时 prefetch 3–5 个详情页时,首屏加载耗时反而上升。rel="prefetch",动态插入或写在 里完全无效。它不是 JS 运行时指令,而是解析器早期就捕获的资源提示。
prefetch 标签塞到 底部,或者用 document.createElement 晚于 DOMContentLoaded 插入——这些统统不触发预取。
和 之后、任何 或 <script></script> 之前prefetch 标签之间无执行依赖,但按用户点击概率从高到低排列,部分浏览器会据此微调调度顺序prefetch 不下载 HTML,也不预解析它
rel="prefetch" href="/post/123" 会让浏览器提前加载并缓存整个页面的 DOM 结构。实际上,它只缓存原始字节流(raw bytes),后续跳转仍需完整导航流程:DNS → TCP → TLS → HTTP GET → HTML 解析 → 构建 DOM/CSSOM → render。prefetch 对纯静态详情页(如 /post/2024-06-15-title)有效,但对带 query 参数(/post?id=123)、含 CSR 路由(/post/123#comments)或服务端动态渲染(/search?q=xxx)的 URL 几乎无效——缓存无法命中,甚至可能污染 disk cache。
main.js 或关键 CSS chunk 做 prefetchrel="prefetch" for APIPriority 显示为 Low 才算生效,否则配置错
prefetch 请求的 Priority 列必须显示为 Low。如果看到 High 或 Medium,说明它被当成 preload 或普通请求处理了——大概率是漏写了 as 属性,或写成了 rel="preload"。
Prefetch(不是 Parser 或 Other)from memory cache 或 from disk cache
移动端弱网下 prefetch 可能拖慢本页渲染
prefetch 会抢占 HTTP/2 流和带宽,挤掉首屏图片、字体或 critical CSS 的请求,导致 FCP 延迟 200ms+。
实际生效的 media 属性做条件加载,例如:
SameSite=Lax,否则可能意外携带 Cookie 触发埋点或登录态同步200 请求但无真实 PV,GA4 等统计系统需过滤 User-Agent 含 prefetch 的请求prefetch 很少,多数失败不是因为语法错,而是路径不可预测、缓存未命中、或根本没等到空闲时机——它不像 preload 那样强制执行,而更像一个浏览器愿意听但不一定照做的建议。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











