真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何原生JS實(shí)現(xiàn)圖片懶加載之頁(yè)面性能優(yōu)化-創(chuàng)新互聯(lián)

這篇文章主要介紹如何原生JS實(shí)現(xiàn)圖片懶加載之頁(yè)面性能優(yōu)化,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供海珠網(wǎng)站建設(shè)、海珠做網(wǎng)站、海珠網(wǎng)站設(shè)計(jì)、海珠網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、海珠企業(yè)網(wǎng)站模板建站服務(wù),十余年海珠做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

在項(xiàng)目開發(fā)中,我們往往會(huì)遇到一個(gè)頁(yè)面需要加載很多圖片的情況。我們可以一次性加載全部的圖片,但是考慮到用戶有可能只瀏覽部分圖片。所以我們需要對(duì)圖片加載進(jìn)行優(yōu)化,只加載瀏覽器窗口內(nèi)的圖片,當(dāng)用戶滾動(dòng)時(shí),再加載更多的圖片。這種加載圖片的方式叫做圖片懶加載,又叫做按需加載或圖片的延時(shí)加載。這樣做的好處是:1.可以加快頁(yè)面首屏渲染的速度;2.節(jié)約用戶的流量。

一.實(shí)現(xiàn)思路

1.圖片img標(biāo)簽自定義一個(gè)屬性data-src來(lái)存放真實(shí)的地址。

2.當(dāng)滾動(dòng)頁(yè)面時(shí),檢查所有的img標(biāo)簽,判斷是否出現(xiàn)在事業(yè)中,如果出現(xiàn)在視野中,繼續(xù)進(jìn)行判斷,看齊是否被加載過(guò)了,如果沒(méi)有加載,那就進(jìn)行加載。

判斷圖片元素是否處于瀏覽器視野中的示意圖(手繪):

如何原生JS實(shí)現(xiàn)圖片懶加載之頁(yè)面性能優(yōu)化

二.根據(jù)思路完成代碼如下:




 
 原生js實(shí)現(xiàn)圖片懶加載
 



 
     
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

好了,在瀏覽器中運(yùn)行一下,第一次進(jìn)頁(yè)面如果不滾動(dòng)滾輪的話什么也看不到,所以第一次進(jìn)頁(yè)面需要調(diào)用checkShow(),處于視野中的圖片也加載出來(lái)。

在代碼最后加上:

// 第一次進(jìn)頁(yè)面加載處于視野中的圖片
 Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{
 let img=li.getElementsByTagName('img')[0];
 // 判斷當(dāng)前img是否出現(xiàn)在了視野中
 // 判斷當(dāng)前img是否被加載過(guò)了
 if(checkShow(img) && !isLoaded(img)){
  loadImg(img);
 }
 })

此時(shí)我們發(fā)現(xiàn)判斷加載視野中的圖片代碼存在重復(fù),直接封裝成一個(gè)新的方法lazyRenderImg();

// window綁定滾動(dòng)事件
 window.addEventListener('scroll',function(){
 // 遍歷所有的img標(biāo)簽
 lazyRenderImg();
 });

function lazyRenderImg(){
 Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{
  let img=li.getElementsByTagName('img')[0];
  // 判斷當(dāng)前img是否出現(xiàn)在了視野中
  // 判斷當(dāng)前img是否被加載過(guò)了
  if(checkShow(img) && !isLoaded(img)){
  loadImg(img);
  }
 })
 }

 // 第一次進(jìn)頁(yè)面加載處于視野中的圖片
 lazyRenderImg();

三.性能優(yōu)化

問(wèn)題:window.scroll 方法頁(yè)面只要一滾動(dòng)就會(huì)觸發(fā)里面的方法,對(duì)性能影響很大

解決方法:當(dāng)頁(yè)面停止?jié)L動(dòng)的時(shí)候,再去執(zhí)行頁(yè)面中的方法,類似與函數(shù)節(jié)流(throttle)

Tips:函數(shù)節(jié)流:等時(shí)間間隔執(zhí)行函數(shù), 讓一個(gè)函數(shù)不要執(zhí)行得太頻繁,減少一些過(guò)快的調(diào)用來(lái)節(jié)流。

// window綁定滾動(dòng)事件
 let timer;
 window.addEventListener('scroll',function(){
 console.log('scroll')
 // 遍歷所有的img標(biāo)簽
 if(timer){
  clearTimeout(timer)
 }
 timer=setTimeout(()=>{
  console.log('lazyRenderImg...');
  lazyRenderImg();
 },300);

通過(guò)打印的日志發(fā)現(xiàn)當(dāng)滾動(dòng)停止后才執(zhí)行lazyRenderImg方法的,確實(shí)減少了不必要調(diào)用lazyRenderImg的次數(shù)。

如何原生JS實(shí)現(xiàn)圖片懶加載之頁(yè)面性能優(yōu)化

以上是“如何原生JS實(shí)現(xiàn)圖片懶加載之頁(yè)面性能優(yōu)化”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前文章:如何原生JS實(shí)現(xiàn)圖片懶加載之頁(yè)面性能優(yōu)化-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/dshjos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部