详解HTML中link标签的prefetch预读取_利用浏览器空闲加载资源

云静吖_4180

云静吖_4180

2026-06-12

752人浏览

原创

link rel="prefetch"仅在当前页onload完成、浏览器空闲且页面未卸载时低优先级预取下页资源并存入http缓存,不加速首屏,需严格满足触发条件、同源、正确as属性(如as="script")及静态写入head中,否则无效。

详解html中link标签的prefetch预读取_利用浏览器空闲加载资源

link rel="prefetch" 不是“加了就快”,它只在当前页 onload 完成、浏览器空闲、页面未卸载时,才低优先级地把资源塞进 HTTP 缓存——对首屏毫无帮助,用错反而拖慢真实请求。

prefetch 什么时候根本不会发请求

写了 <link rel="prefetch" href="/next.js"> 却没看到网络请求,大概率不是代码写错了,而是触发条件压根没满足:

  • 当前页还没触发 onload(比如有长任务阻塞主线程、图片加载慢、JS 执行卡住)
  • 用户开了“节省流量”模式(Chrome / Edge 默认跳过 prefetch)
  • 用的是 Safari —— 对非 script 类型资源支持极弱,as="document" 基本无效
  • 页面很快被关闭或跳转(浏览器主动取消 prefetch 请求)
  • 目标资源返回了 Cache-Control: no-store 或 max-age=0,浏览器连缓存都不想建,直接不发

验证是否发出请求:打开 Chrome DevTools → Network 面板 → 取消所有过滤器,或手动输入 prefetch 过滤;别只看 XHR 或 JS 标签页。

as 属性不是可选,写错等于白写

as 决定浏览器怎么处理这个请求:设什么 MIME、加什么 Accept 头、走哪条缓存路径。漏掉或写错,请求大概率降级为普通 fetch,甚至被忽略。

  • 预取 JS 文件必须写 as="script":<link rel="prefetch" href="/assets/detail.4f9c.js" as="script">
  • 预取 HTML 页面必须写 as="document":<link rel="prefetch" href="/pages/checkout.html" as="document">
  • 预取 CSS 必须写 as="style":<link rel="prefetch" href="/css/detail.css" as="style">
  • as="fetch" 或 as="json" 是无效值,浏览器不识别,也不报错,只是当普通链接处理

注意:href 必须是合法路径(不能是 //cdn.example.com/xxx.js 这种协议相对地址),且必须同源(跨域 prefetch 在 Firefox/Safari 中基本被无视)。

page-agent 浏览器控制(CDP)
page-agent 浏览器控制(CDP)

使用 page-agent CLI(CDP)控制浏览器;CLI只能通过 GitHub Release 的 .tgz 安装,npm 官方包暂未发布。

下载

prefetch 和 preload 别混着用同一资源

同一个 URL 同时写了 preload 和 prefetch,Chrome 会发两次请求——一次高优、一次低优,纯属浪费带宽和缓存空间。

  • 首屏关键 JS/CSS/字体 → 用 <link rel="preload" as="...">,必须带 as,且建议加 crossorigin(尤其字体)
  • 下一页确定要用的 JS/HTML → 用 <link rel="prefetch" as="...">,放在 里静态写死,别用 JS 动态插入
  • 别对 API 接口(如 /api/user)写 prefetch —— 它不发 fetch 请求,也不解析响应体,只存二进制 blob

如果目标 HTML 是服务端渲染且含动态 nonce 或一次性 token,prefetch 缓存的 HTML 很可能因校验失败而无法渲染——这种页面根本不适合 prefetch。

真正要预取数据时,该换什么方案

prefetch 只存资源,不提供 JS 接口,也没法读取 JSON。想提前拿到 API 数据并供后续页面使用,得换路子:

  • 页面加载完成后,用 fetch() + cache.put() 存入 Cache API,后续通过 cache.match() 读取
  • 在 SPA 路由切换前(比如用户点“下一步”按钮后、跳转前),主动 fetch() 下一页所需数据
  • 服务端启用 HTTP/3 QPACK 推送(需服务器支持,客户端兼容性有限)
  • rel="prerender" 可整页预渲染,但只 Chromium 支持、内存开销大、不适用于数据动态生成的页面

最常被忽略的一点:prefetch 的收益高度依赖用户行为一致性。如果预取的页面路径随登录态、AB 实验、地域等动态变化,缓存命中率会断崖下跌——这时候不如关掉,别让浏览器白忙活。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6195

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3472

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3150

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3179

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4899

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3101

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2909

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2568

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2648

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 224人学习