rel=prefetch
<link>
元素的 rel
属性的 prefetch
关键字,用于向浏览器提供一个提示,即用户很可能在将来的导航中需要目标资源,因此浏览器可以通过预先获取和缓存该资源来改善用户体验。<link rel="prefetch">
用于同站导航资源,或用于同站页面使用的子资源。
结果会保留在硬盘的 HTTP 缓存中。因此,它对于预取子资源很有用,即使它们不被当前页面使用。您也可以使用它来预取用户可能访问的网站上的下一个文档。但是,您需要注意请求头——例如,某些 Cache-Control
请求头可能会阻止预取(例如 no-cache
或 no-store
)。
注意: 由于这些限制,建议您在支持 Speculation Rules API 的情况下,优先使用该 API 进行文档预取。
<link rel="prefetch">
在功能上等同于一个带有 priority: "low"
选项的 fetch()
调用,只不过前者通常具有更低的优先级,并且会在请求中设置 Sec-Purpose: prefetch
请求头。请注意,浏览器通常会给预取资源比预加载资源(例如通过 <link rel="preload">
请求的)更低的优先级——当前页面比下一个页面更重要。
prefetch
操作的获取请求会产生一个 HTTP 请求,该请求包含 Sec-Purpose: prefetch
HTTP 请求头。服务器可以使用此请求头更改资源的缓存超时时间,或执行其他特殊处理。请求还将包含 Sec-Fetch-Dest
请求头,其值为 empty
。
请求中的 Accept
请求头将与正常导航请求使用的值匹配。这允许浏览器在导航后查找匹配的缓存资源。
示例
基本预取
<link rel="prefetch" href="main.js" />
导航和子资源预取
预取可用于获取可能进行的下一次导航的 HTML 和子资源。一个常见的用例是让网站的登陆页面预取网站其余部分使用的更“重量级”的资源。
<link rel="prefetch" href="/app/style.css" />
<link rel="prefetch" href="/landing-page" />
缓存分区的影响
许多浏览器现在都实现了某种形式的 缓存分区,这使得 <link rel="prefetch">
对于不同顶级站点 intended 的资源无效。这包括跨站点导航时的主要文档。因此,例如,以下预取
<link rel="prefetch" href="https://news.example/article" />
将无法从 https://aggregator.example/
访问。
规范
规范 |
---|
HTML # link-type-prefetch |
浏览器兼容性
加载中…
另见
- 投机性加载,用于比较
<link rel="prefetch">
和其他类似的性能改进功能。