首頁 web前端 js教程 詳細了解JavaScript中的延遲載入

詳細了解JavaScript中的延遲載入

Nov 05, 2020 pm 05:59 PM
javascript 延遲載入

詳細了解JavaScript中的延遲載入

在這篇文章中,我們將看看延遲載入在web上是如何運作的。我們將介紹本地延遲載入API——延遲載入是如何實現的,延遲載入的重要性和優點,最後是一個簡單的延遲載入web內容用例。

瞭解延遲載入API及其運作方式將有助於已經使用實作這些技術的函式庫和框架的開發人員了解底層的情況。此外,如果他們打算實現自己的延遲載入庫,他們將能夠執行更多的指導研究並應用他們學到的技術。

對於一個真實的用例,那些透過平台上的廣告獲得收入的行銷和廣告公司可以很容易地優化和應用延遲加載,從而很容易地判斷哪些廣告被訪問他們平台的用戶看到,從而做出更好的商業決策。

推薦教學:《JavaScript影片教學

#什麼是延遲載入?

根據Wikipedia的介紹,延遲載入是一種設計模式,用於在需要時延遲元素或物件的初始化。這意味著僅當使用者在網頁上捲動時,相對於父DOM元素的目標DOM元素才會被載入並可見(當兩個元素之間存在交集時,基於設定的閾值)。

不採用這種模式的缺點可能導致:

  • 由於從一個或多個來源獲取多個圖像或其他web資源的多個同步網路請求或批次請求,導致頁面效能嚴重延遲

  • 由於要下載/取得的套件的大小而增加頁面載入時間

  • 使用者保留率低,主要適用於網路連線較差的地區。當我們開發人員犯了不儘早實現延遲載入的錯誤時,用戶完全避免使用平台的情況並不少見

  • 由於圖像、iframe和視訊等資源或資產處理不當,對web效能和可訪問性造成巨大影響

目前,大多數現代和更新的瀏覽器在web上都支援延遲載入。但是,對於還沒有提供這種支援的瀏覽器,實作這種技術的填充或庫在它們之上提供了簡單的API層。

延遲載入解決了減少初始頁面載入時間的問題-僅顯示使用者在初始化網頁時以及隨後捲動頁面時需要查看的資源,例如圖片或其他內容。

眾所周知,Web效能和可訪問性問題是多方面的;減少頁面大小、記憶體佔用和一般的載入時間可以為web平台做出很大貢獻。當我們有一堆圖像和視頻,並且在瀏覽器DOM初始化時一次性加載它們時,延遲加載的優點就變得很明顯了。

當然,您現在應該已經理解了這將導致什麼,正如我們前面所討論的。

從資料來看,大多數網站都嚴重依賴圖像和其他網路內容,例如影片或iframe,來將訊息傳遞給目標受眾。雖然這可能看起來瑣碎而簡單,但是我們向用戶顯示這些內容的方式最終決定了我們的平台的效能。

此外,有助於優化頁面載入時間的操作(例如依賴使用者是否滾動到頁面特定部分的事件)是延遲載入的一些用例。隨著本文的繼續,我們將更了解現實環境中的其他用例。

本機延遲載入API

延遲載入建構在交集觀察者API的基礎上,交集觀察者API是一種瀏覽器API,它提供了一種方法來偵測或知道一個稱為目標、父元素的元素何時在瀏覽器視窗內可用或可見(視情況而定)。

當這種情況發生時,將呼叫處理程序函數來幫助處理程式碼邏輯的其他部分,稍後我們將看到這一點。

有了這個新的和改進的瀏覽器API,我們還可以知道兩個DOM元素何時相交——這裡的意思是,目標DOM元素何時進入瀏覽器的視口,或者與另一個元素(很可能是它的父元素)相交。

為了更好地理解延遲載入是如何運作的,我們首先必須理解如何建立一個交集觀察者。為了創建一個交集觀察者,我們所需要做的就是偵聽交集觀察者事件的發生,並在這種事件發生時觸發一個回呼函數或處理程序來運行。

交集觀察者事件是一種類似文件事件類別的瀏覽器事件,其中包含DOMContentLoaded事件。

注意:對於交集事件,我們需要指定要套用交集的元素。這個元素通常被稱為根元素。但是,如果沒有指定根元素,則表示我們打算針對整個瀏覽器視窗。

此外,我們還需要為根元素指定一個空白(如果提供了),以便在必要時可以在交集上輕鬆地更改其形狀或大小。讓我們看一個例子來更好地理解它:

let options = {
root: null,
rootMargin: 10px,
threshold: 1.0
}

let observer  = new IntersectionObserver (options, callback);
登入後複製

在上面的程式碼片段中,我們看到了一個用於建立觀察者的簡單用例。 options物件幫助我們定義目標的自訂屬性。

這裡,options物件中的threshold屬性表示何時觸發回呼。它的預設值為0,這意味著一旦使用者接近目標元素並且它變得可見,就會觸發回調。

另一方面,根元素是父元素,當目標元素在使用者捲動網頁時對使用者可見時,根元素充當目標元素的視區。注意,如果根設定為空,父元素將自動成為視區。

最後,rootMargin幫助設定根元素周圍的空白。例如,在計算目標元素和父元素/viewport之間的交集之前,可能需要調整它的大小、邊距或維度。

而且,接受兩個輸入參數的回呼包括一個我們打算套用於目標元素和呼叫回呼的觀察者的intersectionObserverEntry物件清單。

回呼的簽章如下:

let callback = (entries, observer) => {
entries.forEach(entry => {
If (entry.isIntersection) {
// do some magic here
}
// and some other methods
})
}
登入後複製

該intersectionObserverEntry物件表示父元素和目標元素之間存在交集。它有一堆的API中的屬性,其中包括isIntersectionintersectionRatiointersectionRecttargettime ,等。

我們需要針對特定的DOM元素,並在它與父元素相交時觸發回呼函數。目標DOM元素的一個例子如下面的程式碼片段所示:

let target = document.querySelector("#targetElement");
登入後複製

在上面的程式碼片段中,我們創建了一個目標元素並為它分配了一個變數。之後,我們使用intersectionObserver建構子/函式簽章上的observe方法觀察目標元素,如下所示:

// start observing for changes on the target element
observer.observe(target);
登入後複製

當觀察者為目標設定的閾值達到時,將觸發回呼。

最後,observe()方法告訴觀察者要觀察什麼目標元素。請注意,交集觀察者在它的API中同樣有一堆方法:unObserve()takeRecords()observe()等就是一些例子。

延遲載入技術的優點

現在,我們必須更好地理解為什麼延遲載入web內容和資產是必要的。讓我們來看看使用這種技術的一些進一步的優勢:

  • 建立可高度存取的web應用程式。關於web可訪問性的討論是今天的首要任務。使用這種技術肯定有助於建立一個範圍更廣的平台

  • 高用戶保留。如果web平台與驅動業務目標以及提供價值相關聯,那麼實現這種技術將有助於使平台更加用戶友好。 web標準稍後會感謝您的!

  • 作為開發人員,您可能需要在web平台上實現無限滾動。理解這個概念將大有幫助,從而提供即時的業務價值

#實作延遲載入

讓我們來看一個在網頁上延遲載入圖片的簡單範例。我們將開始自訂的選項物件的目標元素,我們打算觀察的交集:

let  options = {
root: document.querySelector('.root'),
rootMargin: '0px, 0px, 100px, 0px'
};
登入後複製

現在,對於目標元素,我們來定位幾個圖像:

let  images = [...document.querySelectorAll('.targetImages')];
登入後複製

現在,讓我們看看實現回調:

const callback = (entries) => {

entries.forEach(entry => {
 If (entry.isIntersecting) {
    observer.unObserve('entry.target');
}
// handle other code logic here 
})
}
登入後複製

我們可以繼續呼叫交集觀察者建構函數來觀察目標元素,基於它的options物件中指定的自訂:

let observer = new intersectionObserver(options, callback);
登入後複製

最後,我們可以觀察到要觀察的目標元素:

images.forEach(image => {
observer.observe(image);
})
登入後複製

注意:為了簡單起見,這裡不包含HTML和CSS程式碼。透過在MDN文件中查看此範例,您可以詳細了解如何實現此技術。

總結

現在,當我們在網頁上有一堆圖像或視頻,並在瀏覽器DOM初始化時加載它們時,這種技術的優勢就會非常明顯。作為開發人員,我們有責任確保我們管理或維護的平台的最佳效能,特別是當它們與業務目標相關聯時。

作為一種web效能技術,延遲載入有助於解決這類問題。

更多程式相關知識,請造訪:程式設計入門! !

以上是詳細了解JavaScript中的延遲載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Spring Data JPA 的架構和工作原理是什麼? Spring Data JPA 的架構和工作原理是什麼? Apr 17, 2024 pm 02:48 PM

SpringDataJPA基於JPA架構,透過映射、ORM和事務管理與資料庫互動。其儲存庫提供CRUD操作,派生查詢簡化了資料庫存取。此外,它使用延遲加載,僅在必要時檢索數據,從而提高了效能。

Linux 動態連結與靜態連結原來是這麼回事? Linux 動態連結與靜態連結原來是這麼回事? Feb 05, 2024 pm 05:45 PM

老規矩,先提出幾個問題:為什麼要進行動態連結?如何進行動態連結?什麼是地址無關代碼技術?什麼是延遲綁定技術?如何在程式運行過程中進行明確連結?為什麼要進行動態連結?動態連結的出現是為了解決靜態連結的一些缺點:節約記憶體和磁碟空間:如下圖所示,Program1和Program2分別包含Program1.o和Program2.o兩個模組,他們都需要Lib.o模組。靜態連結情況下,兩個目標檔案都用到Lib.o這個模組,所以它們同時在連結輸出的可執行檔Program1和program2中有副本,同時執行

解碼Laravel效能瓶頸:優化技巧全面揭秘! 解碼Laravel效能瓶頸:優化技巧全面揭秘! Mar 06, 2024 pm 02:33 PM

解碼Laravel效能瓶頸:優化技巧全面揭秘! Laravel作為一個受歡迎的PHP框架,為開發者提供了豐富的功能和便利的開發體驗。然而,隨著專案規模增加和訪問量增加,我們可能會面臨效能瓶頸的挑戰。本文將深入探討Laravel效能最佳化的技巧,幫助開發者發現並解決潛在的效能問題。一、資料庫查詢優化使用Eloquent延遲載入在使用Eloquent查詢資料庫時,避免

Java JPA 效能優化秘技:讓你的應用程式飛起來 Java JPA 效能優化秘技:讓你的應用程式飛起來 Feb 19, 2024 pm 09:03 PM

文章關鍵字:JavaJPA效能最佳化ORM實體管理JavaJPA(JavaPersistanceapi)是一種物件關聯映射(ORM)框架,它允許你使用Java物件來操作資料庫中的資料。 JPA提供了與資料庫互動的統一API,讓你可以使用相同的程式碼存取不同資料庫。此外,JPA還支援懶加載、快取和髒資料偵測等特性,可以提高應用程式的效能。然而,如果使用不當,JPA效能可能會成為你應用程式的瓶頸。以下是一些常見的效能問題:N+1查詢問題:當你在應用程式中使用JPQL查詢時,可能會遇到N+1查詢問題。在這種

html圖片過大怎麼辦 html圖片過大怎麼辦 Apr 05, 2024 pm 12:24 PM

優化 HTML 圖片過大的方法有:優化圖片檔案大小:使用壓縮工具或圖片編輯軟體。使用媒體查詢:根據裝置動態調整影像大小。實作延遲載入:僅在影像進入可視區域時載入。使用 CDN:將影像分發到多個伺服器。使用圖像佔位符:在圖像載入時顯示佔位圖像。使用縮圖:顯示圖像的較小版本並在點擊後加載全尺寸圖像。

Hibernate 如何最佳化資料庫查詢效能? Hibernate 如何最佳化資料庫查詢效能? Apr 17, 2024 pm 03:00 PM

優化Hibernate查詢性能的技巧包括:使用延遲加載,推遲加載集合和關聯對象;使用批處理,組合更新、刪除或插入操作;使用二級緩存,將經常查詢的對象存儲在內存中;使用HQL外連接,檢索實體及其相關實體;最佳化查詢參數,避免SELECTN+1查詢模式;使用遊標,以區塊的方式檢索海量資料;使用索引,提高特定查詢的效能。

如何阻止iframe載入事件 如何阻止iframe載入事件 Feb 19, 2024 am 08:02 AM

如何防止iframe載入事件在網頁開發中,我們常常會使用iframe標籤來嵌入其他網頁或內容。預設情況下,當瀏覽器載入iframe時,會觸發載入事件。然而,在某些情況下,我們可能希望延遲載入iframe,或完全阻止載入事件。在本文中,我們將探討如何透過程式碼範例來實現這個目標。一、延遲載入iframe如果要延遲載入iframe,我們可以使用

Java JPA 開源專案推薦:為你的專案注入新的活力 Java JPA 開源專案推薦:為你的專案注入新的活力 Feb 20, 2024 am 09:09 AM

在Java程式設計領域,JPA(JavaPersistenceapi)作為一種流行的持久化框架,為開發者提供了對關係型資料庫進行操作的便捷方式。透過使用JPA,開發者可以輕鬆地將Java物件持久化到資料庫中,並從資料庫中檢索數據,從而大大提高了應用程式的開發效率和維護性。本文精心挑選了10個高品質的JavaJPA開源項目,涵蓋了各種不同的功能和應用場景,旨在為開發者提供更多的靈感和解決方案,協助打造更有效率和可靠的應用程式。這些項目包括:SpringDataJPA:springDataJPA是Spr

See all articles