前端圖片加載優(yōu)化


圖片是界面顯示效果很重要的組成部分奕扣,圖片加載關(guān)系到用戶體驗尝抖、應(yīng)用性能,優(yōu)化圖片加載的常用策略為:預(yù)加載和懶加載练慕。

原文鏈接

預(yù)加載

圖片預(yù)加載可以提高用戶體驗贴浙,對于圖片畫廊和圖片占比很大的網(wǎng)頁內(nèi)容尤其重要

css預(yù)加載

利用css的background屬性可以預(yù)先加載圖片,但不顯示在屏幕位置內(nèi)铛铁,使用這些圖片時路徑一致的話隔显,瀏覽器會優(yōu)先加載緩存內(nèi)的圖片進行顯示,這樣就達到了預(yù)加載的目的
#preload-img{
background: url(http://example.com/image.png) no-repeat -9999px -9999px;
}

但是這種方式會在剛開始頁面加載時影響其他內(nèi)容顯示饵逐,可以添加一些js

window.onload = function () {
    let preload = document.createElement('div');
    preload.id = 'preload';
    document.body.appendChild(preload);
}

純js預(yù)加載

利用js實例化圖片對象括眠,再賦值應(yīng)用地址,這樣可以實現(xiàn)批量圖片預(yù)加載

window.onload = function () {
    let images = [
        'http://example.com/image1.png',
        'http://example.com/image2.png',
        'http://example.com/image3.png',
    ];

    images.forEach((src) => {
        preload(src);
    })
}

let preload = src => {
    let img = new Image();
    img.src = src;
}    

懶加載

圖片懶加載對于服務(wù)器可以起到緩解壓力的作用倍权。

之前在js設(shè)計模式-代理模式中有通過虛擬代理方式實現(xiàn)圖片懶加載的方法

let imageEle = (function(){
    let node = document.createElement('img');
    document.body.appendChild(node);
    return {
        setSrc:function(src){
            node.src = src;
        }
    }
})();

//代理對象
let proxy = (function(){
    let img = new Image();
    img.onload = function(){
        imageEle.setSrc(this.src);
    };
    return {
        setSrc:function(src){
            img.src = src;
            imageEle.setSrc('loading.gif');
        }
    }
})();

proxy.setSrc('example.png');    

對于一些內(nèi)容很長頁面掷豺,我們希望當用戶瀏覽到相應(yīng)區(qū)域時再加載圖片捞烟,常用的解決方法是在img元素上使用data-src屬性替換src,判斷img元素在用戶可視區(qū)域時動態(tài)賦值src屬性顯示相應(yīng)圖片当船。

如果是圖片墻形式頁面题画,為避免開始加載全部圖片需要給圖片設(shè)置默認高度

.img{
    min-height: 400px;
}

設(shè)置滾動事件

let imgs = document.getElementsByTagName("img");
let n = 0; //存儲加載圖片索引
let lazyload= ()=> {
    let cHeight = document.documentElement.clientHeight;
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動條距離頂部高度
    for (let i = n,l = imgs.length; i < l; i++) {
        let img = imgs[i];
        if (img.offsetTop < cHeight + scrollTop) {
            img.src = img.src == 'loading.gif'? img.getAttribute('data-src'):img.src;
            n = i + 1;
        }
    }
}
window.onscroll = lazyload;

滾動事件可以節(jié)流函數(shù)再進行優(yōu)化

正確使用圖片加載可以提高用戶體驗靠汁,保證頁面的展示效果棚辽,同時又可以在一定程度上緩解服務(wù)器的壓力,算是前端優(yōu)化中經(jīng)常涉及到的部分集惋,了解其中的解決方法和策略可以幫助我們做出更好的產(chǎn)品壹置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竞思,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钞护,更是在濱河造成了極大的恐慌盖喷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件患亿,死亡現(xiàn)場離奇詭異传蹈,居然都是意外死亡,警方通過查閱死者的電腦和手機步藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門惦界,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咙冗,你說我怎么就攤上這事沾歪。” “怎么了雾消?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵灾搏,是天一觀的道長。 經(jīng)常有香客問我立润,道長狂窑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任桑腮,我火速辦了婚禮泉哈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘破讨。我一直安慰自己丛晦,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布提陶。 她就那樣靜靜地躺著烫沙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙笆。 梳的紋絲不亂的頭發(fā)上锌蓄,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天升筏,我揣著相機與錄音,去河邊找鬼瘸爽。 笑死仰冠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蝶糯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辆沦,長吁一口氣:“原來是場噩夢啊……” “哼昼捍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肢扯,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤妒茬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蔚晨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乍钻,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年铭腕,在試婚紗的時候發(fā)現(xiàn)自己被綠了银择。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡累舷,死狀恐怖浩考,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情被盈,我是刑警寧澤析孽,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站只怎,受9級特大地震影響袜瞬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜身堡,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一邓尤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盾沫,春花似錦裁赠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕾哟,卻和暖如春一忱,著一層夾襖步出監(jiān)牢的瞬間莲蜘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工帘营, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留票渠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓芬迄,卻偏偏與公主長得像问顷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子禀梳,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容