什麼是好的 lcp 時間?
為了提供良好的用戶體驗,您應該努力在您的網站上擁有2.5 秒或更短的最大內容繪製。您的大部分頁面加載都應該在此閾值下發生。
現在我們知道什麼是 lcp 以及我們的目標應該是什麼,讓我們看看在我們的網站上改進 lcp 的方法?
如何優化最大內容繪製 (lcp)
在下面提到的所有技術中減少 lcp 的基本原理是減少下載到用戶設備上的數據並減少發送和執行該內容所需的時間。
一.優化你的圖片
在大多數網站上,首屏內容通常包含一個大圖像,該圖像被考慮用於 lcp。它可以是英雄形象、橫幅或旋轉木馬。因此,優化這些圖像以獲得更好的 lcp 至關重要。
要優化圖像,您應該使用第三方圖像 cdn,例如 imagekit.io。使用第三方圖片cdn的好處是可以專注於自己的實際業務,將圖片優化留給圖片cdn
圖像 cdn 將始終處於技術發展的邊緣,您始終可以以最少的持續投資獲得最佳功能。
imagekit 是一個完整的實時圖像 cdn,可以與任何現有的雲存儲(如 aws s3、azure、google cloud storage 等)集成。它甚至帶有稱為媒體庫的集成圖像存儲和管理器。
以下是 imagekit 如何幫助您提高 lcp 分數。
1.以較輕的格式交付您的圖像
imagekit 檢測用戶的瀏覽器是否支持現代較輕的格式,如 webp 或 avif,並實時自動以最輕的格式提供圖像。與 jpeg 等價物相比,像 webp 這樣的格式要輕 30% 以上。
2.自動壓縮您的圖像
imagekit 不僅將圖像轉換為正確的格式,還將圖像壓縮為更小的尺寸。這樣做時,它平衡了圖像的視覺質量和輸出大小。
只需更改 url 參數,您就可以選擇實時更改壓縮級別(或質量),從而平衡視覺質量和加載時間的業務需求。
3.為響應式圖片提供實時變換
谷歌幾乎對所有網站都使用移動優先索引。因此,與桌面相比,更重要的是針對移動設備優化 lcp。每個圖像都需要根據布局的要求縮小。
例如,您需要在產品列表頁面上使用較小尺寸的圖像,在產品詳細信息頁面上使用較大尺寸的圖像。這種調整大小可確保您不會發送除該特定頁面所需的任何額外位元組。
imagekit 允許您通過在圖像 url 中添加相應的轉換來實時轉換響應式圖像。例如,通過在其 url 中添加高度和寬度轉換參數,將以下圖像調整為寬度 200 像素和高度 300 像素。
4.緩存圖片並縮短交付時間
圖像 cdn 使用全球內容交付網絡(cdn) 來交付圖像。使用 cdn 可確保圖像從更靠近用戶的位置加載,而不是從您的伺服器加載,後者可能位於地球的另一端。
例如,imagekit 使用 aws cloudfront 作為其 cdn,它在全球擁有 220 多個交付節點。絕大多數圖像的加載時間不到 50 毫秒。此外,它使用適當的緩存指令來緩存用戶設備、cdn 節點甚至其處理網絡上的圖像,以加快加載時間。
這有助於改進您網站上的 lcp
二.預加載關鍵資源
在某些情況下,瀏覽器可能不會優先加載影響 lcp 的視覺上重要的資源。例如,摺疊上方的橫幅圖像可以指定為 css 文件中的背景圖像。由於瀏覽器在下載 css 文件並與 dom 樹一起解析之前永遠不會知道此圖像,因此它不會優先加載它。
對於此類資源,您可以通過向html 文檔的 head 部分添加<link>帶有rel= "preload"屬性的標籤來預加載它們。
<!-- example of preloading --><link rel="preload"src="banner_image.jpg"/>
雖然您可以在一個文檔中預加載多個資源,但您應該始終將其限制為首屏圖像或視頻、全頁面字體文件或關鍵的 css 和 js 文件。
三.減少伺服器響應時間
如果您的伺服器需要很長時間來響應請求,那麼在螢幕上呈現頁面所需的時間也會增加。因此,它會對每個頁面速度指標產生負面影響,包括 lcp。為了改善您的伺服器響應時間,您應該執行以下操作。
1.分析和優化您的伺服器
大量計算、資料庫查詢和頁面構建發生在伺服器上。您應該分析發送到伺服器的請求並確定響應請求的可能瓶頸。它可能是資料庫查詢減慢速度或在您的伺服器上構建頁面。
您可以應用最佳實踐,例如緩存資料庫響應、預渲染頁面等,以減少伺服器響應請求所需的時間。
當然,如果上述措施沒有改善響應時間,您可能需要增加伺服器容量來處理傳入的請求數量。
2.使用內容交付網絡
我們在上面已經看到,使用像 imagekit 這樣的圖像 cdn 可以改善圖像的加載時間。您的用戶可以在幾毫秒內從靠近他們位置的 cdn 節點獲取內容。
您應該將同樣的內容擴展到您網站上的其他內容。為您的靜態內容(如 js、css 和字體文件)使用 cdn 將顯著加快它們的加載時間。imagekit 確實支持通過其系統交付靜態內容。
您還可以嘗試為 html 和 api 使用 cdn,以在 cdn 節點上緩存這些響應。鑒於此類內容的動態特性,將 cdn 用於 html 或 api 可能比將 cdn 用於靜態內容複雜得多。
3.預連接到第三方源
如果您使用第三方域來交付重要的首屏內容,例如 js、css 或圖像,那麼您可以通過向瀏覽器指示需要儘快建立與該第三方域的連接而受益.這是使用標籤的rel="preconnect"屬性完成的<link>
<link rel="preconnect"href="https://static.example.com"/>
使用preconnect到位,瀏覽器可以在稍後下載實際資源時節省域連接時間。
在這種情況下,您的主網站域 example.com 的 static.example.com 等子域也是第三方域。
您還可以在不支持預連接的瀏覽器中使用dns-prefetch作為後備。該指令指示瀏覽器完成對第三方域的 dns 解析,即使它無法建立正確的連接。
4.使用 service worker 優先提供內容緩存
service worker 可以攔截來自用戶瀏覽器的請求並為其提供緩存響應。這允許我們在用戶設備上緩存靜態資產和 html 響應,並在不訪問網絡的情況下為它們提供服務。
雖然 service worker 緩存的用途與 http 或瀏覽器緩存相同,但它提供了細粒度的控制,即使用戶離線也能工作。您還可以使用 service worker 將緩存中的預緩存內容提供給網絡速度較慢的用戶,從而縮短 lcp 時間。
5.壓縮文本文件
您在網頁上加載的任何基於文本的數據在通過網絡傳輸時都應使用 gzip 或 brotli 等壓縮算法進行壓縮。svg、json、api 響應、js 和 css 文件以及主頁的 html 是使用這些算法進行壓縮的理想選擇。這種壓縮顯著減少了在頁面加載時下載的數據量,從而降低了 lcp
四、 移除渲染阻塞資源
當瀏覽器從您的伺服器接收到 html 頁面時,它會解析 dom 樹。如果 dom 中有任何外部樣式表或 js 文件,瀏覽器必須暫停它們,然後繼續解析剩餘的 dom 樹。
這些 js 和 css 文件稱為渲染阻塞資源並延遲 lcp 時間。以下是一些減少 js 和 css 文件阻塞時間的方法:
1.不要加載不必要的bundle
如果不需要,請避免將大量 js 和 css 文件發送到瀏覽器。如果 css 可以稍後下載,或者特定頁面上不需要 js 功能,則沒有理由預先加載它並阻止瀏覽器中的渲染。
假設您不能將特定文件拆分為較小的包,但這對頁面的功能也不是關鍵。在這種情況下,您可以使用 script 標籤的 defer 屬性向瀏覽器指示它可以繼續進行 dom 解析並在稍後階段繼續執行 js 文件。添加 defer 屬性可以移除任何 dom 解析的阻塞。因此,lcp 下降。
2.內聯關鍵 css
關鍵 css 包含出現在頁面第一摺疊中的 dom 所需的樣式定義。如果頁面這部分的樣式定義是內聯的,即在每個元素的style屬性中,瀏覽器就不需要依賴外部 css 來設置這些元素的樣式。因此,它可以快速渲染頁面,並且lcp下降。
3.縮小和壓縮內容
在將 css 和 js 文件加載到瀏覽器之前,您應該始終對其進行縮小。css 和 js 文件包含空格以使它們清晰易讀,但它們對於代碼執行來說是不必要的。因此,您可以刪除它們,從而減少生產中的文件大小。較小的文件大小意味著文件可以快速加載,從而減少您的 lcp 時間。
如前所述,壓縮技術使用數據壓縮算法來減小通過網絡傳輸的文件大小。gzip 和 brotli 是兩種壓縮算法。與 gzip 相比,brotli 壓縮提供了更高的壓縮率,現在所有主要瀏覽器、伺服器和 cdn 都支持。
五、優化lcp客戶端渲染
任何客戶端呈現的網站都需要大量的 javascript 才能在瀏覽器中加載。如果您不優化發送到瀏覽器的 javascript,則在 javascript 下載並執行之前,用戶可能看不到或無法與頁面上的任何內容進行交互。
我們在上面討論了一些與 js 相關的優化,比如優化發送到瀏覽器的包和壓縮內容。您還可以執行更多操作來優化客戶端設備上的渲染。
1.使用服務端渲染
您可以在伺服器上動態生成頁面,然後將其發送到客戶端的設備,而不是將整個 js 傳送到客戶端並在那裡進行所有渲染。這會增加生成頁面所需的時間,但會減少在瀏覽器中激活頁面所需的時間。
但是,為同一頁面同時維護客戶端和伺服器端框架可能非常耗時。
2.使用預渲染
預渲染是一種不同的技術,其中無頭瀏覽器模仿普通用戶的請求並讓伺服器渲染頁面。這個呈現的頁面在構建周期中存儲一次,然後每個後續請求都使用該預呈現的頁面,而無需在伺服器上進行任何計算,從而加快加載時間。
與伺服器端渲染相比,這改進了 ttfb,因為頁面是預先準備好的。但是交互的時間可能仍然會受到影響,因為它必須等待 js 下載才能使頁面具有交互性。此外,由於此技術需要預渲染頁面,因此如果您有大量頁面,它可能無法擴展。
- 編程問答
- 答案列表
怎麼改善網站上最大的內容繪製 LCP[朗讀]
加入收藏