訂閱以接收新文章的通知:

Cloudflare Pages 透過 Early Hints 變得更快

2022-10-07

閱讀時間:4 分鐘
本貼文還提供以下語言版本:EnglishFrançaisDeutschEspañol简体中文

去年,我們展示了何為「快如閃電」,展示了 Pages 在世界各地的一流效能,而今天,我們很高興地宣佈一項進一步實現這一承諾的整合——為 Early Hints 引入 Pages 支援!Early Hints 讓您能夠在任何交付緩慢的 HTML 頁面之前解除封鎖頁面關鍵資源的載入。Early Hints 可透過顯著降低關鍵效能指標(如最大內容繪製 (LCP))來改善訪客的載入體驗。

Cloudflare Pages gets even faster with Early Hints

什麼是 Early Hints?

Early Hints 是網際網路的一項新功能,Chrome 自版本 103 起支援此功能Cloudflare 使其在使用我們網路的網站中普遍可用。Early Hints 取代 Server Push,作為一種機制向瀏覽器「提示」您頁面上的關鍵資源(例如字型、CSS 和頭版畫面影像)。瀏覽器可以在等待完整的 HTML 回應之前立即開始載入這些資源。這使用了以前浪費的時間!在 Early Hints 之前,在瀏覽器收到回應的第一個位元組之前,無法開始任何工作。現在,瀏覽器可以有效地填補之前等待的時間。Early Hints 可以顯著改善您網站的效能,尤其是 LCP 等指標。

Early Hints 的運作原理

Cloudflare 快取從您的 200 OK 回應傳送的任何 preloadpreconnect 類型 Link 標頭,並將它們作為 103 Early Hints 回應提前傳送給任何後續請求。

實際上,HTTP 交談現在看起來如下所示:

請求

Early Hints 回應

GET /
Host: example.com

回應

103 Early Hints
Link: </styles.css>; rel=preload; as=style

Cloudflare 頁面上的 Early Hints

200 OK
Content-Type: text/html; charset=utf-8
Link: </styles.css>; rel=preload; as=style

<html>
<!-- ... -->
</html>

託管在 Cloudflare Pages 上的網站尤其可以從 Early Hints 中獲益。如果您使用 Pages Functions 來產生動態伺服器端轉譯 (SSR) 頁面,Early Hints很有可能會對您的網站進行重大改進。

效能測試

我們建立了一個簡單的示範電子商務網站,來評估 Early Hints 的效能。

這個登陸頁面有每件商品的價格,以及一個剩餘庫存計數器。頁面本身只是手工製作的 HTML 和 CSS,但這些定價和庫存值正在為使用 Pages Functions 的每個請求即時樣板化。為了模擬從外部資料來源(可能由 KVDurable ObjectsD1 甚至 Shopify 等外部 API 支援)的載入,我們在該資料解析之前新增了固定延遲。我們在對一些關鍵資源的回應中包含了 preload 連結:

A screenshot of the landing page of a demo Cloudflare e-commerce website selling a t-shirt, cap and keycap. Each item is branded with the Cloudflare logo, and has a price and
  • 一個外部 CSS 樣式表,

  • T 恤的影像,

  • 帽子的影像,

  • 和鍵帽的影像。

第一個請求會像您預期的那樣產生一個瀑布。在我們解決此定價和庫存資料時,第一個請求會被阻擋相當長的時間。載入后,瀏覽器將解析 HTML,拉出外部資源,並對其內容發出後續請求。CSS 和影像由於其大尺寸和高品質而大大延長了載入時間。最大內容繪製 (LCP) 發生在 T 恤影像載入時,文件在滿足所有請求後完成。

隨後的請求使事情變得有趣起來!這些 preload 連結在 Cloudflare 的全球網路上進行快取,並在 103 Early Hints 回應中先於文件傳送。現在,瀑布看起來大不相同。最初的請求是一樣的,但現在,對 CSS 和影像的請求向左滑動得更遠,因為它們可以在 103 回應交付後立即開始。瀏覽器開始擷取這些資源,同時等待原始請求完成伺服器端轉譯。T 恤影像載入後,LCP 再次發生,但這次提前了 530 毫秒,因為它開始載入的時間加快了 752 毫秒,文件完全載入的時間加快了 562 毫秒,同樣是因為外部資源能夠更快地開始載入。

A network diagnostics waterfall for the page without Early Hints, as described above.

最後四個請求(以黃色醒目提示)返回為使用 If-None-Match 標頭的 304 Not Modified 回應。依預設,Cloudflare Pages 要求瀏覽器確認所有資產都是最新的,因此,如果它們在 Early Hints 回應和開始使用之間更新的可能性很小,瀏覽器會檢查它們是否已變更。因為它們沒有更新,所以沒有內容可下載,回應很快就完成了。這可以透過使用一個 _headers 檔案在這些資產上設定自訂 Cache-Control 標頭來避免。例如,您可以使用如下規則將這些影像快取一分鐘:

A network diagnostics waterfall with Early Hints, as described above.

我們可以透過探索 Cloudflare 提供的其他功能(例如自動 CSS 縮製Cloudflare ImagesImage Resizing)來進一步進行效能稽核。

# _headers

/*.png
  Cache-Control: max-age=60

我們已經透過全球最快的網路之一為 Cloudflare Pages 提供服務——Early Hints 讓開發人員能夠進一步利用我們的全球網路。

使用 Early Hints 和 Cloudflare Pages

Cloudflare 上的 Early Hints 功能目前僅限於在網頁回應中快取 Link 標頭。通常,這意味著 Cloudflare Pages 使用者需要使用 _headers 檔案或 Pages Functions 來套用這些標頭。但是,為了您的方便,我們還新增了支援,將您包含在主體中的任何 <link> HTML 元素轉換為 Link 標頭。這讓您能夠直接從參照這些資源的同一文件中直接控制您傳送的Early Hints,無需從 HTML 中出來以利用Early Hints。

例如,對於以下 HTML 文件,將產生 Early Hints 回應:

HTML 文件

Early Hints 回應

<!DOCTYPE html>
<html>
  <head>
    <link rel="preload" as="style" href="/styles.css" />
  </head>
  <body>
    <!-- ... -->
  </body>
</html>

如前所述,如果您願意,也可以使用 _headers 檔案設定 Link 標頭:

103 Early Hints
Link: </styles.css>; rel=preload; as=style

Early Hints(和自動 HTML <link> 剖析)已經為所有 pages.dev 網域自動啟用。如果您在 Pages 專案上設定了任何自訂網域,請確保在 Cloudflare 儀表板的「速度」索引標籤下的該網域上啟用 Early Hints。如需更多資訊,請參見我們的文件

# _headers

/
  Link: </styles.css>; rel=preload; as=style

此外,我們希望未來能夠支援 Smart Early Hints 功能。使用 Smart Early Hints,即使不存在 Link 標頭或 <link> 元素,Cloudflare 也能透過分析網站流量並推斷哪些資源對給定頁面很重要,從而自動產生 Early Hints。我們將很快分享有關 Smart Early Hints 的更多資訊。

同時,誠邀立即試用 Early Hints on Pages !讓我們知道您在我們的 Discord 伺服器中看到了多少載入改進。

在 Cloudflare TV 上觀看

我們保護整個企業網路,協助客戶有效地建置網際網路規模的應用程式,加速任何網站或網際網路應用程式抵禦 DDoS 攻擊,阻止駭客入侵,並且可以協助您實現 Zero Trust

從任何裝置造訪 1.1.1.1,即可開始使用我們的免費應用程式,讓您的網際網路更快速、更安全。

若要進一步瞭解我們協助打造更好的網際網路的使命,請從這裡開始。如果您正在尋找新的職業方向,請查看我們的職缺
Early HintsCloudflare Pages速度與可靠性產品新聞

在 X 上進行關注

Greg Brimble|@GregBrimble
Cloudflare|@cloudflare

相關貼文

2024年10月24日 下午1:00

Durable Objects aren't just durable, they're fast: a 10x speedup for Cloudflare Queues

Learn how we built Cloudflare Queues using our own Developer Platform and how it evolved to a geographically-distributed, horizontally-scalable architecture built on Durable Objects. Our new architecture supports over 10x more throughput and over 3x lower latency compared to the previous version....