透過 PRPL 模式套用即時載入

PRPL 是個縮寫,可以描述一種模式,用於載入網頁及提升互動性:

  • 預先載入較晚發現的資源。
  • 盡快算繪初始路線。
  • 預先快取剩餘的素材資源。
  • 延遲載入其他路徑和非必要的素材資源。

本指南將說明如何將這些技術結合使用,但仍可獨立使用來達成成效。

使用 Lighthouse 稽核網頁

執行 Lighthouse,找出符合 PRPL 技巧的改善機會:

  1. 按下 `Control+Shift+J` 鍵 (在 Mac 上為 `Command+Option+J` 鍵) 開啟開發人員工具。
  2. 按一下「Lighthouse」分頁標籤。
  3. 勾選「成效」和「漸進式網頁應用程式」核取方塊。
  4. 按一下「執行稽核」即可產生報表。

詳情請參閱「使用 Lighthouse 找出效能改善機會」。

預先載入重要資源

如果某個資源的剖析和擷取作業延遲,Lighthouse 會顯示下列失敗的稽核項目:

Lighthouse:預先載入關鍵要求稽核

預先載入是宣告式擷取要求,會指示瀏覽器要求瀏覽器預先載入掃描器未偵測到的資源,例如 background-image 屬性參照的圖片。在 HTML 文件的標題中加入包含 rel="preload"<link> 標記,即可預先載入延遲找到的資源:

<link rel="preload" as="image" href="hero-image.jpg">

新增 <link rel="preload"> 指令會啟動該資源的要求,並將其儲存在快取中。瀏覽器就能在需要時擷取該資訊。

如要進一步瞭解如何預先載入重要資源,請參閱「預先載入重要素材資源」指南。

盡快算繪初始路徑

如果某個資源會延遲「First Paint」(也就是網站將像素轉譯至螢幕畫面) 時,Lighthouse 會發出警告:

Lighthouse:排除會妨礙顯示的資源稽核

為了改善首繪時間,Lighthouse 建議您內嵌重要的 JavaScript,並使用 async 延遲其他 JavaScript,以及內嵌在可視區域上方使用的關鍵 CSS。這麼做可減少擷取轉譯阻斷資產時,對伺服器的往返連線,進而提升效能。不過,從開發人員的角度來看,內嵌程式碼較難維護,且無法由瀏覽器個別快取。

另一種改善首次繪製時間的方法,是伺服器端算繪網頁的初始 HTML。這樣一來,系統就能在擷取、剖析及執行指令碼時,立即向使用者顯示內容。不過,這麼做可能會大幅增加 HTML 檔案的酬載,進而影響互動時間,也就是應用程式變得可互動並回應使用者輸入內容所需的時間。

沒有任何單一正確的解決方案可用於減少應用程式中的首次繪製時間,而且您只有在優點大於應用程式權衡時,才應考慮內嵌樣式和伺服器端算繪。您可以參閱下列資源,進一步瞭解這兩個概念。

使用服務工作者的請求/回應

預先快取資產

服務工作站做為 Proxy 後,即可直接從快取擷取資產,不必重複造訪伺服器。這不僅可讓使用者在離線時使用應用程式,還可加快重複造訪的網頁載入時間。

使用第三方程式庫可簡化產生 Service Worker 的程序,除非您的快取需求比程式庫可提供的更複雜。舉例來說,Workbox 提供一組工具,可讓您建立及維護 Service Worker,以便快取資產。如要進一步瞭解服務工作站和離線可靠性,請參閱可靠性學習路徑中的服務工作站指南

延遲載入

如果您透過網路傳送過多資料,Lighthouse 就會顯示稽核失敗。

Lighthouse:有大量的網路酬載稽核

這包括所有素材資源類型,但由於瀏覽器需要花費時間剖析及編譯,因此大型 JavaScript 酬載的成本特別高。Lighthouse 也會在適當情況下提供這類警告。

Lighthouse:JavaScript 啟動時間稽核

如要傳送僅含使用者初始載入應用程式所需程式碼的小型 JavaScript 酬載,請視需要分割整個套件與「延遲載入」區塊。

分割套件後,請預先載入較重要的區塊 (請參閱「預先載入重要素材資源」指南)。預先載入可確保更重要資源供瀏覽器更快擷取及下載。

除了視需要分割及載入不同的 JavaScript 片段,Lighthouse 也提供非必要圖片的延遲載入稽核功能。

Lighthouse:延後畫面外圖片稽核作業

如果網頁上載入了許多圖片,請在載入網頁時,延遲所有位於折疊下方或裝置可視區域之外的圖片 (請參閱「使用 lazysize 延遲載入圖片」)。

後續步驟

您現在已瞭解 PRPL 模式背後的一些基本概念,請繼續參閱本節中的下一篇指南,進一步瞭解相關資訊。請務必記住,並非所有技巧都需要同時套用。只要採取下列任何做法,就能明顯改善成效。

  • 預先載入重要資源。
  • 盡快算繪初始路線。
  • 預先快取剩餘的素材資源。
  • 延遲載入其他路徑和非必要的素材資源。

您可以進一步瞭解 PRPL 模式。