亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

解析javascript圖片懶加載與預加載的分析總結

2019-11-20 08:38:46
字體:
來源:轉載
供稿:網友

本篇文章主要介紹了懶加載和預加載兩種技術的解析,廢話不多說,一起來看吧。

懶加載也叫延遲加載:前一篇文章有介紹:JS圖片延遲加載 延遲加載圖片或符合某些條件時才加載某些圖片。

預加載:提前加載圖片,當用戶需要查看時可直接從本地緩存中渲染。

兩種技術的本質:兩者的行為是相反的,一個是提前加載,一個是遲緩甚至不加載。懶加載對服務器前端有一定的緩解壓力作用,預加載則會增加服務器前端壓力。

懶加載的意義及實現方式有:

意義: 懶加載的主要目的是作為服務器前端的優化,減少請求數或延遲請求數。

實現方式:

1.第一種是純粹的延遲加載,使用setTimeOut或setInterval進行加載延遲.

2.第二種是條件加載,符合某些條件,或觸發了某些事件才開始異步下載。

3.第三種是可視區加載,即僅加載用戶可以看到的區域,這個主要由監控滾動條來實現,一般會在距用戶看到某圖片前一定距離遍開始加載,這樣能保證用戶拉下時正好能看到圖片。

預加載的意義及實現方式有:

預加載可以說是犧牲服務器前端性能,換取更好的用戶體驗,這樣可以使用戶的操作得到最快的反映。實現預載的方法非常多,可以用CSS(background)、JS(Image)、HTML(<img />)都可以。常用的是new Image();,設置其src來實現預載,再使用onload方法回調預載完成事件。只要瀏覽器把圖片下載到本地,同樣的src就會使用緩存,這是最基本也是最實用的預載方法。當Image下載完圖片頭后,會得到寬和高,因此可以在預載前得到圖片的大小(方法是用記時器輪循寬高變化)。

怎么樣才能實現預加載?

我們可以通過google一搜索:可以看到很多人用這種方式進行預加載:代碼如下:

 function loadImage(url,callback) {  var img = new Image();    img.src = url;  img.onload = function(){    img.onload = null;    callback.call(img);  }}

為什么其他瀏覽器正常的:其實原因很簡單,就是瀏覽器緩存了,除了IE6以外(即說opera也會,但是我特意用opera試了下,沒有,可能版本的問題吧,或許現在已經修復了。),其他瀏覽器重新點擊會再次執行onload方法,但是IE6是直接從瀏覽器取的。

那現在怎么辦?最好的情況是Image可以有一個狀態值表明它是否已經載入成功了。從緩存加載的時候,因為不需要等待,這個狀態值就直接是表明已經下載了,而從http請求加載時,因為需要等待下載,這個值顯示為未完成。這樣的話,就可以搞定了。經過google搜索下即介紹:發現有一個為各個瀏覽器所兼容的Image的屬性――complete。所以,在圖片onload事件之前先對這個值做一下判斷即可。最后,代碼變成如下的樣子:

function loadImage(url,callback) {  var img = new Image();    img.src = url;  if(img.complete) { // 如果圖片已經存在于瀏覽器緩存,直接調用回調函數        callback.call(img);    return; // 直接返回,不用再處理onload事件  }  img.onload = function(){    img.onload = null;    callback.call(img);  }}

也就是說如果圖片已經在瀏覽器緩存里面 那么支持直接從瀏覽器緩存取得直接執行img.complete里面的函數 接著返回.

但是我們可以看到上面的代碼:必須等圖片加載完成后,可以執行回調函數,也可以說等圖片加載后,我們可以獲取圖片的寬度和高度。那么如果我們想提前獲取圖片的尺寸那怎么辦?上網經驗告訴我:瀏覽器在加載圖片的時候你會看到圖片會先占用一塊地然后才慢慢加載完畢,并且不需要預設width與height屬性,因為瀏覽器能夠獲取圖片的頭部數據?;诖?,只需要使用javascript定時偵測圖片的尺寸狀態便可得知圖片尺寸就緒的狀態。代碼如下:(但是有個前提是 這個方式不是我想的,也不是我寫的代碼,是網上朋友總結的代碼 我只是知道有這么一個原理)

var imgReady = (function(){  var list = [],    intervalId = null;  // 用來執行隊列  var queue = function(){    for(var i = 0; i < list.length; i++){      list[i].end ? list.splice(i--,1) : list[i]();    }    !list.length && stop();  };    // 停止所有定時器隊列  var stop = function(){    clearInterval(intervalId);    intervalId = null;  }  return function(url, ready, error) {    var onready = {},       width,       height,       newWidth,       newHeight,      img = new Image();    img.src = url;    // 如果圖片被緩存,則直接返回緩存數據    if(img.complete) {      ready.call(img);      return;    }    width = img.width;    height = img.height;    // 加載錯誤后的事件     img.onerror = function () {      error && error.call(img);      onready.end = true;      img = img.onload = img.onerror = null;    };    // 圖片尺寸就緒    var onready = function() {      newWidth = img.width;      newHeight = img.height;      if (newWidth !== width || newHeight !== height ||        // 如果圖片已經在其他地方加載可使用面積檢測        newWidth * newHeight > 1024      ) {        ready.call(img);        onready.end = true;      };    };    onready();    // 完全加載完畢的事件    img.onload = function () {      // onload在定時器時間差范圍內可能比onready快      // 這里進行檢查并保證onready優先執行      !onready.end && onready();      // IE gif動畫會循環執行onload,置空onload即可      img = img.onload = img.onerror = null;    };            // 加入隊列中定期執行    if (!onready.end) {      list.push(onready);      // 無論何時只允許出現一個定時器,減少瀏覽器性能損耗      if (intervalId === null) {        intervalId = setInterval(queue, 40);      };    };  }})();

調用方式如下:

imgReady('http://img01.taobaocdn.com/imgextra/i1/397746073/T2BDE8Xb0bXXXXXXXX-397746073.jpg',function(){  alert('width:' + this.width + 'height:' + this.height);});

以上就是本文的全部內容,希望本文所述對你有所幫助,希望大家繼續關注我們的網站!想要學習jsp可以繼續關注本站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频com| 亚洲精品wwwww| 欲色天天网综合久久| 欧美性受xxxx白人性爽| 一区二区三区精品99久久| 亚洲精品久久久久| 影音先锋欧美在线资源| 欧美劲爆第一页| 88xx成人精品| 亚洲女人天堂色在线7777| 57pao国产精品一区| 亚洲高清av在线| 欧美一级淫片videoshd| 伊人久久久久久久久久久久久| 亚洲午夜久久久久久久| 欧美与欧洲交xxxx免费观看| 欧美一区三区三区高中清蜜桃| 欧美福利视频在线| 国产福利精品av综合导导航| 欧美高清视频免费观看| 午夜欧美大片免费观看| 亚洲美女免费精品视频在线观看| 日韩电影中文字幕一区| 国产精品mp4| 亚洲开心激情网| 欧美日产国产成人免费图片| 欧美中文在线视频| 国产精品高潮粉嫩av| 色综合色综合网色综合| 欧美激情综合亚洲一二区| 国产精品成人免费视频| 国产精品第七十二页| 91wwwcom在线观看| 国产精品爱久久久久久久| 久久精品一偷一偷国产| 亚洲国产小视频| 国产精品18久久久久久首页狼| 亚洲欧美日韩中文视频| 日韩激情av在线播放| 亚洲女人天堂色在线7777| 欧美日韩裸体免费视频| 日韩精品在线免费观看| 国产精品扒开腿做爽爽爽视频| 国产成人精品免高潮费视频| 日韩一级裸体免费视频| 国产欧美日韩中文字幕在线| 亚洲成人网久久久| 91精品一区二区| 日韩免费观看高清| 国产精品视频一区二区三区四| 91探花福利精品国产自产在线| 久久激情五月丁香伊人| 欧美裸体xxxx极品少妇| 国产剧情久久久久久| 国产日韩欧美综合| 亚洲国产欧美一区二区三区久久| 热99精品只有里视频精品| 亚洲一区久久久| 久久成人一区二区| 日韩成人在线视频网站| 国产www精品| 国产精品久久久久久av福利| 日本成人在线视频网址| 国产精品99导航| 尤物yw午夜国产精品视频明星| 精品久久久中文| 久久国产精品久久久久久| 亚洲黄色av女优在线观看| 日韩av电影在线播放| 神马久久桃色视频| 国产丝袜一区二区三区| 另类专区欧美制服同性| 亚洲激情小视频| 欧美床上激情在线观看| 日本不卡视频在线播放| 黑人巨大精品欧美一区二区免费| 欧美激情精品久久久久久蜜臀| 欧美中文字幕在线播放| 久久精品视频在线播放| 777777777亚洲妇女| 国产精品亚洲欧美导航| 国产成人精品在线| 一区二区亚洲欧洲国产日韩| 中文字幕国内精品| 国色天香2019中文字幕在线观看| 国产精品高潮呻吟久久av野狼| 92看片淫黄大片欧美看国产片| 久久久人成影片一区二区三区观看| 69久久夜色精品国产69| 中国china体内裑精亚洲片| 成人在线视频网| 欧美激情在线狂野欧美精品| 精品露脸国产偷人在视频| 97色在线视频| 亚洲国产精久久久久久| 青青草成人在线| 久久伊人色综合| 日韩精品黄色网| 大量国产精品视频| 在线观看不卡av| 日韩av综合中文字幕| 中文字幕在线日韩| 国产欧美精品日韩精品| 亚洲乱亚洲乱妇无码| 456国产精品| 久久国产精品视频| 国产精品高潮粉嫩av| 欧美成人午夜视频| 日韩成人在线视频网站| 国产一区在线播放| 精品国产鲁一鲁一区二区张丽| 国产成人涩涩涩视频在线观看| 97视频在线观看播放| 国产成+人+综合+亚洲欧洲| 日本国产欧美一区二区三区| 亚洲福利在线观看| 色偷偷888欧美精品久久久| 国产日韩在线免费| 久久99精品视频一区97| 久久香蕉精品香蕉| 97涩涩爰在线观看亚洲| 久久躁日日躁aaaaxxxx| 亚洲成人激情在线| 日韩av在线播放资源| 亚洲人成网站色ww在线| 亚洲欧洲成视频免费观看| 最近的2019中文字幕免费一页| 久久综合电影一区| 91精品国产成人| 日韩h在线观看| 成人免费视频a| 亚洲新中文字幕| 久久视频免费观看| 国语自产精品视频在线看抢先版图片| 97精品视频在线观看| 亚洲精品欧美极品| 在线亚洲男人天堂| 97免费视频在线播放| 日韩在线视频线视频免费网站| 国产精品一区=区| 亚洲男人天堂手机在线| 欧美日韩亚洲一区二| 亚洲二区中文字幕| 俺去啦;欧美日韩| 亚洲午夜久久久影院| 日韩影视在线观看| 日韩欧美在线视频免费观看| 亚洲精品99999| 亚洲成av人片在线观看香蕉| 亚洲一区中文字幕在线观看| 欧美性猛交丰臀xxxxx网站| 日韩高清电影好看的电视剧电影| 欧美一级视频在线观看| 一区二区三区动漫| 在线观看日韩视频| 久久久国产精品视频| 日韩国产高清污视频在线观看| 亚洲国产精品va在线看黑人动漫| 日韩成人在线视频| 欧美国产极速在线| 欧美日韩亚洲一区二| 色偷偷9999www| 国内精久久久久久久久久人| 亚洲激情电影中文字幕|