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">和其他類似的效能改進功能。