1. 程式人生 > 其它 >wpf-mvvm開發學習1

wpf-mvvm開發學習1

懶載入的概念

懶載入也叫做延遲載入、按需載入,指的是在長網頁中延遲載入圖片資料,是一種較好的網頁效能優化的方式。

在比較長的網頁或應用中,如果圖片很多,所有的圖片都被加載出來,而使用者只能看到可視視窗的那一部分圖片資料,這樣就浪費了效能。如果使用圖片的懶載入就可以解決以上問

題。在滾動螢幕之前,視覺化區域之外的圖片不會進行載入,在滾動螢幕時才載入。這樣使得網頁的載入速度更快,減少了伺服器的負載。懶載入適用於圖片較多,頁面列表較長(長

列表)的場景中。

懶載入的特點

減少無用資源的載入

使用懶載入明顯減少了伺服器的壓力和流量,同時也減小了瀏覽器的負擔

提升使用者體驗

如果同時載入較多圖片,可能需要等待的時間較長,這樣影響了使用者體驗,而使用懶載入就能大大的提高使用者體驗。

防止載入過多圖片而影響其他資原始檔的載入

懶載入的實現原理

圖片的載入是由src引起的,當對src賦值時,瀏覽器就會請求圖片資源。

根據這個原理,我們使用HTML5 的data-xxx屬性來儲存圖片的路徑,在需要載入圖片的時候,將data-xxx中圖片的路徑賦值給src,這樣就實現了圖片的按需載入,即懶載入。

懶載入的實現重點在於確定使用者需要載入哪張圖片,在瀏覽器中,可視區域內的資源就是使用者需要的資源。所以當圖片出現在可視區域時,獲取圖片的真實地址並賦值給圖片即可

使用原生JavaScript實現懶載入


window.innerHeight 是瀏覽器可視區的高度

document.body.scrollTop || document.documentElement.scrollTop 是瀏覽器視窗頂部與文件頂部之間的距離,也就是滾動條滾動的距離

imgs.offsetTop 是元素頂部距離文件頂部的高度(包括滾動條的距離)

圖片載入條件:img.offsetTop < window.innerHeight + document.body.scrollTop;

程式碼實現

<body>
    <div class="container">
        <h6>圖片懶載入</h6>
        <img data-src="/images/login-bg-3.jpg" src="/images/login-bg-4.jpg"><br>
<img data-src="/images/login-bg-1.jpg" src="/images/login-bg-4.jpg"><br> <img data-src="/images/login-bg.jpg" src="/images/login-bg-4.jpg"><br> <img data-src="/images/login-bg-3.jpg" src="/images/login-bg-4.jpg"><br> <img data-src="/images/login-bg-old.jpg" src="/images/login-bg-4.jpg"><br> <img data-src="/images/login-bg-1.jpg" src="/images/login-bg-4.jpg"><br> <img data-src="/images/login-bg.jpg" src="/images/login-bg-4.jpg"><br> </div> </body> <script> var imgs = document.querySelectorAll('img') function lazyLoad() { var scrollTop = document.body.scrollTop || document.decumentElement.scrollTop var windowHeight = window.innerHeight for (var i = 0; i < imgs.length; i++) { if (imgs[i].offsetTop < scrollTop + windowHeight) { imgs[i].src = imgs[i].getAttribute('data-src') } } } window.onscroll = lazyLoad() </script>

 

 

getBoundingClientRect API 實現 

程式碼實現

  data(){
    return{
      flag: true
    }
  },
  created() {
    //this.lazyLoad();
    this.throttle(this.lazyLoad, 3000)()  //首次進入載入
  },
  mounted() {
    const that = this;
    window.addEventListener('scroll',()=>{
       that.throttle(that.lazyLoad, 2000)()
     //that.lazyLoad()
    })
  },
  methods:{
    //節流優化
    throttle(fn, delay){
      const that = this;
      return function () {
        if (!that.flag) return;
        that.flag = false;  //沒執行過就一直是false,會直接return
        setTimeout(() => {
          fn.apply(that, arguments);
          that.flag = true; //setTimeout執行完畢後再把標記設定為true(關鍵)表示可以執行下一次迴圈了。當定時器沒有執行的時候標記永遠是false,在開頭被return掉
        }, delay);
      }
    },
    lazyLoad(){
      let images = document.getElementsByTagName('img')  //不是陣列,htmlCollection遍歷時要注意
      //加定時器的目的是為了讓images能夠遍歷到
      setTimeout(()=>{
        for(let i =0;i<images.length;i++){
          if(images[i].getBoundingClientRect().top<document.body.clientHeight){   //getBoundingClientRect().top 元素的上邊相對瀏覽器視窗的位置如果小於可視視窗的高度
            images[i].src = images[i].dataset.src;
          }
        }
      },300)
    }
  }

 

懶載入與預載入的區別

這兩種方式都是提高網頁效能的方式,兩者主要區別是一個是提前載入,一個是遲緩甚至不載入。懶載入對伺服器前端有一定的緩解壓力作用,預載入則會增加伺服器前端壓力。

懶載入

懶載入也叫延遲載入,指的是在長網頁中延遲載入圖片的時機,當用戶需要訪問時,再去載入,這樣可以提高網站的首屏載入速度,提升使用者的體驗,並且可以減少伺服器的壓力。它

適用於圖片很多,頁面很長的電商網站的場景。懶載入的實現原理是,將頁面上的圖片的 src 屬性設定為空字串,將圖片的真實路徑儲存在一個自定義屬性中,當頁面滾動的時候,

進行判斷,如果圖片進入頁面可視區域內,則從自定義屬性中取出真實路徑賦值給圖片的 src 屬性,以此來實現圖片的延遲載入。

預載入

預載入指的是將所需的資源提前請求載入到本地,這樣後面在需要用到時就直接從快取取資源。通過預載入能夠減少使用者的等待時間,提高使用者的體驗。我瞭解的預載入的最常用的方

式是使用 js 中的 image 物件,通過為 image 物件來設定 src屬性,來實現圖片的預載入。

 參考文章:

(38條訊息) 圖片懶載入的幾種實現方式_Wonder*的部落格-CSDN部落格_圖片懶載入的實現方式