排除不必要的下載作業

Ilya Grigorik
Ilya Grigorik

最快且最佳化程度最高的資源,就是未傳送的資源。您應從應用程式中移除不必要的資源。建議您與團隊一起質疑並定期檢視隱含和明確的假設。範例如下:

  • 您一向在頁面中加入資源 X,但下載和顯示資源 X 的成本是否抵銷了它為使用者帶來的價值?您能評估並證明其價值嗎?
  • 資源 (尤其是第三方資源) 是否能提供一致的效能?這項資源是否位於關鍵路徑中,或需要位於關鍵路徑中?如果資源位於關鍵路徑中,是否會成為網站的單一故障點?也就是說,如果資源無法使用,是否會影響網頁的效能和使用者體驗?
  • 這項資源是否需要或已設有服務水準協議 (SLA)?這個資源是否遵循壓縮、快取等最佳效能做法?

網頁經常含有不必要的資源,甚至會妨礙網頁效能,對訪客或代管網站的價值不大。這項規定同樣適用於第一方和第三方資源和小工具:

  • 網站 A 決定在首頁上顯示相片輪轉介面,讓訪客只要按一下滑鼠,就能預覽多張相片。網頁載入時會載入所有相片,並讓使用者瀏覽相片。
    • 問題:您是否評估過有多少使用者會查看輪轉介面中的多張相片?下載大多數訪客不會查看的資源,可能會造成高額的額外負擔。
  • 網站 B 決定安裝第三方小工具,以便顯示相關內容、提高社群參與度或提供其他服務。
    • 問題:您是否追蹤了有多少訪客使用小工具,或點擊小工具提供的內容?這個小工具產生的互動是否足以抵銷其額外負擔?此外,您是否可以使用載入策略,確保只有在需要時才載入指令碼

決定是否要移除不必要的下載項目時,通常需要仔細思考和評估。為獲得最佳成效,請定期檢查網頁上的每項素材資源,並重新審視這些問題。

對 Core Web Vitals 的影響

Google 推出網站使用體驗核心指標計畫,提供一組指標,反映使用者在使用網站時的體驗。雖然 Core Web Vitals 有許多最佳化策略,但您可以思考是否要載入網頁上的特定資源,這或許能為您開啟一條改善網站這些指標的路徑。以下列舉幾個值得考慮的例子,並依各項 Core Web Vitals 分組。雖然這份清單並未列舉所有範例 (範例很多),但閱讀這些範例可能會讓您有所啟發。

最大內容繪製 (LCP)

最大內容繪製 (LCP) 會評估載入最大內容 (例如主圖片或標題) 的時間。這項指標被視為重要的感知指標,可讓使用者感覺網站載入速度快速。

一般來說,下載資源越少,使用者可用的頻寬就會分配給越少的資源,因此 LCP 可能會有所改善。最典型的例子就是延遲載入,在網頁載入期間,瀏覽器會判斷使用者較有可能看到哪些圖片,然後才下載可視區域以外的圖片。如果您有大型縮圖庫 (例如 50 張圖片),除了前 10 張圖片外,其餘圖片都會以延遲載入的方式顯示,這樣瀏覽器就能更有效率地運用可用的頻寬,使用者看到的第一批圖片也會更快載入。

不過,這不一定是因為載入的圖片減少了。瀏覽器內建的優先順序規劃會決定每個資源應接收多少頻寬。不過,即使有這個所有資源,特別是那些以高優先順序下載的資源,都可能會剝奪潛在 LCP 元素的依附資源。這一點對連線速度緩慢的網路尤其重要。該依附資源可能是代表網頁 LCP 元素的圖片檔案,但也可能是瀏覽器需要轉譯文字節點的網路字型資源,而該節點可能會視為網頁的 LCP 元素。

如果網站內容以文字為主,網頁的 LCP 元素可能就是文字節點。雖然有許多良好的字型最佳化和載入策略,但您不妨考慮系統字型是否足以滿足網站需求,讓文字節點的 LCP 元素在載入時不必依賴網路字型資源,並在 CSS 和 HTML 從伺服器傳送到裝置時立即著色。

累計版面配置位移 (CLS)

每個載入的資源都可能會影響網頁的累計版面配置位移 (CLS),尤其是在初始繪製時尚未完成下載的情況下。就圖片而言,避免 CLS 的做法包括設定明確的尺寸。針對字型,管理字型載入和可能的備用字型比對,可在網路字型交換期間盡量減少轉換。以 JavaScript 來說,您可以管理指令碼操控 DOM 的方式,讓版面配置的位移量降到可接受的程度。

每個影響網頁 CLS 的資源都需要進行一些工作,確保網頁版面配置足夠穩定。只要思考是否需要特定資源,就能加快網頁載入速度,並減少維持版面配置穩定性所需的認知努力。這樣一來,不僅使用者體驗會大幅改善,開發人員的體驗也會有所提升,因為您將有更多時間在專案中追求其他目標。

Interaction to Next Paint (INP)

Interaction to Next Paint (INP):評估網頁在整個生命週期中回應使用者輸入內容的速度。網頁的 INP 可能會受到載入的 JavaScript 影響,因為 JavaScript 是網頁上大部分互動體驗的驅動力。特別是,在網頁載入期間下載的指令碼資源數量,可能會啟動指令碼評估和編譯作業,而這類作業可能會耗費大量資源。啟動期間載入的 JavaScript 越少,瀏覽器在網頁體驗的關鍵時刻 (使用者可能會嘗試與網頁互動) 時,就越不需要執行太多工作。

雖然有許多策略可用於減少啟動期間下載的 JavaScript 資源大小,例如程式碼分割和樹狀圖搖動,但建議您審查專案中使用的套件,看看是否有必要使用這些套件。舉例來說,lodash 提供許多至今仍實用的函式,但也提供瀏覽器原生提供的方法,例如用於對應縮減篩選Array 專屬函式,以及其他許多函式

漸進式強化也是 JavaScript 的實用做法,因為您可以為使用者提供基準 (但仍可正常運作) 體驗,並為擁有更強大裝置和更快網路連線的使用者新增內容。無論您是否遵循漸進式強化原則,重點都是:您能避免下載的每個 JavaScript 資源,都能讓使用者互動體驗的回應速度加快,這也是網頁效能的重要一環。

結論

檢查網站是否有不必要的下載作業,雖然只是提供快速使用者體驗的其中一個面向,但卻可能帶來重大影響。重點回顧:

  • 在網頁上列出您自己的素材資源和第三方素材資源。
  • 評估每項素材資源的成效:價值和技術成效。
  • 判斷資源是否提供足夠的價值。
  • 瞭解不必要的下載作業對 Core Web Vitals 和輔助指標的影響。

透過這種方式改善內容效率,不僅可提升整體成效,還能避免浪費使用者的頻寬,並有機會改善以使用者為中心的指標,進而提供更優質的使用者體驗。