立即延遲載入畫面外 iframe 了!

瀏覽器支援

  • Chrome:77.
  • Edge:79,
  • Firefox:121。
  • Safari:16.4。

延遲載入 <iframe> 元素會阻止系統載入螢幕外 iframe 直到使用者捲動地圖附近這樣可以儲存資料,並加快 並降低記憶體用量

圖片的延遲載入功能一樣, 使用 loading 屬性告知瀏覽器要延遲載入 iframe。

<iframe src="https://example.com"
        loading="lazy"
        width="600"
        height="400"></iframe>

以下是 <iframe loading=lazy>示範,展示了延遲載入的嵌入式影片:

為什麼要延遲載入 iframe?

第三方嵌入的內容包羅萬象,從影片播放器到 社群媒體貼文加入廣告這類內容通常不會立即顯示在使用者的檢視區中,但使用者仍須為每個影格支付下載資料和昂貴的 JavaScript 費用,即使他們沒有捲動到該影格也一樣。

透過針對 iframe 使用 iframe 延遲載入功能,可以節省數據流量。在這個範例中,急載會載入 3 MB,而延遲載入則會在使用者捲動至 iframe 附近時才載入這段程式碼。
如果系統過度積極載入畫面外 iframe,使用者就會下載可能永遠不會看到的元素,造成資料浪費。

根據 Chrome 針對為省資料模式使用者自動延後載入螢幕外 iframe的研究,延後載入 iframe 可節省 2% 到 3% 的資料 (中位數),減少 1% 到 2% 的首次顯示內容所需時間 (中位數),並改善 2% 的首次輸入延遲 (FID) (第 95 個百分位數)。

延遲載入螢幕外 iframe 也有助於改善網頁的最大 內容繪製 (LCP)。由於 iframe 通常需要 提供大量頻寬以載入所有子資源 螢幕外的 iframe 可減少網路限制頻寬爭用情形 因而釋出更多頻寬來載入網頁 LCP。

iframe 內建的延遲載入功能如何運作?

loading 屬性可讓瀏覽器延遲載入畫面外 iframe, 直到使用者捲動畫面附近loading 支援兩種值:

  • lazy:適合延遲載入的候選文字。
  • eager:不太適合用於延後載入。立即載入。

在 iframe 上使用 loading 屬性的運作方式如下:

<!-- Lazy-load the iframe -->
<iframe src="https://example.com"
        loading="lazy"
        width="600"
        height="400"></iframe>

<!-- Eagerly load the iframe -->
<iframe src="https://example.com"
        width="600"
        height="400"></iframe>

不指定屬性的影響與明確急速載入的影響相同 資源

如果您要動態使用 JavaScript 建立 iframe,請將 元素上的 iframe.loading = 'lazy'支援

var iframe = document.createElement('iframe');
iframe.src = 'https://example.com';
iframe.loading = 'lazy';
document.body.appendChild(iframe);

延遲載入熱門 iframe 嵌入如何影響使用者體驗?

將延後載入的 iframe 設為預設值,可讓網站的回應速度大幅提升。下列範例說明如何改善互動時間 (TTI) 和節省媒體嵌入資料,但延後載入廣告 iframe 也能提供類似的優點。

YouTube

延後載入 YouTube 影片嵌入內容,可在初始網頁載入時節省約 500 KB:

<iframe src="https://www.youtube.com/embed/YJGCZCaIZkQ"
        loading="lazy"
        width="560"
        height="315"
        frameborder="0"
        allow="accelerometer; autoplay;
        encrypted-media; gyroscope;
        picture-in-picture"
        allowfullscreen></iframe>
Chrome.com 可將 YouTube 影片內嵌的螢幕外 iframe 延遲載入,讓互動時間縮短 10 秒
Chrome.com 透過延後載入螢幕外的 YouTube 嵌入內容,將 TTI 縮短 10 秒。

Instagram

Instagram 嵌入功能會提供一組標記和指令碼,用於將 iframe 插入頁面。延遲載入這個 iframe 可避免載入嵌入內容所需的所有指令碼,並在初始載入時節省約 100 KB 的空間。由於這些嵌入內容通常會顯示在大多數文章的可視區域下方,因此這是 iFrame 延後載入的合理候選項目。

Spotify

延遲載入 Spotify 嵌入項目可在初始載入時節省 514 KB。

<iframe src="https://open.spotify.com/embed/album/1DFixLWuPkv3KT3TnV35m3"
        loading="lazy"
        width="300"
        height="380"
        frameborder="0"
        allowtransparency="true"
        allow="encrypted-media"></iframe>

Facebook 的社群媒體外掛程式

Facebook 社交外掛程式可讓開發人員將 Facebook 內容嵌入 網頁。其中最受歡迎的就是 Like 外掛程式 請點選按鈕,查看有多少使用者已表示喜歡該網頁。根據預設 我們透過 Facebook JSSDK 在網頁上提取約 215 KB 的 197 KB 是 JavaScript外掛程式通常出現在結尾處 文章或靠近網頁結尾處 所以在文章離開畫面時立即載入 甚至可能無法達到最佳效果

Facebook 的類似外掛程式
Facebook 的按讚外掛程式。

感謝工程師 Stoyan Stefanov,所有 Facebook 社交外掛程式現已支援 支援標準化 iframe 延遲載入功能。 選擇透過外掛程式data-lazy 現在可以防止這些外掛程式在使用者捲動畫面前載入 就在附近。這樣一來,嵌入內容就能為需要的使用者繼續運作,同時為未捲動至頁面底部的使用者儲存資料。希望您有所幫助 這是許多在 Google 平台 。

如果您希望進一步掌控 iframe 延遲載入

所有主要瀏覽器皆支援瀏覽器層級的 iframe 延遲載入功能,而且在大多數情況下,建議你使用這種格式,不必依賴 JavaScript。

不過,如果您需要支援舊版瀏覽器,或是想進一步控制延遲載入門檻,可以使用第三方程式庫在網站上延遲載入 iframe。「lazysizes」JavaScript 程式庫就是這類程式庫,可讓您視需要選用其他選項。

是否有螢幕外 iframe 延後載入的例外狀況?

早期實驗:針對數據節省模式使用自動延遲載入 iframe Chrome 使用者擁有隱藏 iframe 的例外狀況,通常用於 以及數據分析或數據分析這些功能無法以延遲方式載入,且一律會載入,以免破壞這些功能。

loading 屬性不會套用這些推測法則,因此開發人員一律可以選擇要延後載入的內容。loading 屬性應一律受到尊重,但會受到距離限制和其他瀏覽器選項 (例如列印) 的影響。

資源

如要進一步瞭解延遲載入的點子,請參閱 web.dev 的 圖片和影片延遲載入集合

感謝 Dom Farolino、Scott Little、Houssein Djirdeh、Simon Pieters、Kayce Basques、Joe Medley 和 Stoyan Stefanov 提供評論。