前端網頁的懶加載


作為網頁內容的一部分,圖像和視頻通常要消耗很多資源加載。要提高網頁應用的性能,如何避免資源浪費在加載圖像和視頻上就很重要了。但是,很多時候我們都不願意減少網頁上的媒體資源,所以我們經常無從下手。幸運的是,我們有懶加載這個絕招,它可以幫助我們減少加載時間和降低負載,而不在內容上偷工減料。  

 

什么是懶加載?

懶加載是一種在頁面加載時延遲加載一些非關鍵資源的技術,換句話說就是按需加載。

我們之前看到的懶加載一般是這樣的形式:

  • 瀏覽一個網頁,准備往下拖動滾動條
  • 拖動一個占位圖片到視窗
  • 占位圖片被瞬間替換成最終的圖片

 

為什么使用懶加載而不直接加載?

  • 浪費流量。在不計流量收費的網絡,這可能不重要;在按流量收費的網絡中,毫無疑問,一次性加載大量圖片就是在浪費用戶的錢。
  • 消耗額外的電量和其他的系統資源,並且延長了瀏覽器解析的時間。因為媒體資源在被下載完成后,瀏覽器必須對它進行解碼,然后渲染在視窗上,這些操作都需要一定的時間。

懶加載圖片和視頻,可以減少頁面加載的時間、頁面的大小和降低系統資源的占用,這些對於性能都有顯著地提升。總體來講,就是改善用戶體驗,增強頁面性能。

 

懶加載圖解

通過下圖所示(綠色為頁面范圍,紅色為窗口范圍,藍色為待顯示元素)。 $(window).scrollTop() 為 頁面頂部 到 窗口頂部的高度。 $(window).height() 為 窗口的高度。$node.offset().top 為頁面頂部到待顯示元素的高度。即我們可以知道如何判斷一個元素,是否進入用戶視野范圍內,即

$node.offset().top <= $(window).height() + $(window).scrollTop()

  

條件滿足的時候,這個元素就進入了我們的視野。

 

 

懶加載的實現

//進頁面直接調用
  start()
  // 滾動的時候執行加載函數
  $(window).on('scroll',function(){
    start()
  })

  //加載函數
  function start(){
    //not('[data-isLoaded]') 用來過濾已經加載過的,實現節流
    $('.container img').not('[data-isLoaded]').each(function(){
      if( isShow($(this)) ){
        loadImg($(this))
      }
    })
  }

  // 判斷是否進入視野的函數
  function isShow($node){
    return $node.offset().top <= $(window).height() + $(window).scrollTop()
  }

  // 格式化圖片加載地址函數
  function loadImg($img){
    //setTimeout模擬延遲 測試效果用,實際環境不要加
    // setTimeout(function(){
      $img.attr('src', $img.attr('data-src'))
    // },500)
     //加載過后就添加 data-isLoaded屬性
      $img.attr('data-isLoaded',1)
  }

  

pixabayhttps://www.wode007.com/sites/73237.html wallhavenhttps://www.wode007.com/sites/73236.html

懶加載效果預覽

該 demo 添加了 setTimeout 便於直觀的查看懶加載的效果,實際應用的時候不要添加,因為懶加載的作用就是增強用戶體驗的。

結合該 demo 更好的理解之前的圖解

 
$(window).height() + $(window).scrollTop() < $(node).offset().top

 

$(window).height() + $(window).scrollTop() >= $(node).offset().top


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM