圖片懶加載

圖片懶加載

定義:就是這張圖片很懶,喜歡臨時(shí)抱佛腳瞳氓,都到了出現(xiàn)在屏幕視線范圍內(nèi)了才加載策彤。不過(guò)懶人有懶福栓袖,這樣可以在那種有大量圖片需要展示的網(wǎng)站上優(yōu)化性能,減輕瀏覽器壓力店诗,畢竟你要瀏覽器一次加載一兩百?gòu)垐D片也很累

原理: 每個(gè)圖片標(biāo)簽先把圖片地址存儲(chǔ)在一個(gè)臨時(shí)屬性上裹刮,用瀏覽器的onscroll事件監(jiān)聽每個(gè)圖片元素,到了屏幕可視區(qū)域再賦予地址到src上庞瘸。

代碼實(shí)現(xiàn):

html代碼 省略
js代碼
            const imgs = document.querySelectorAll('img');
            let begin = 0;
            function lazyload(){
                for (let index = begin; index < imgs.length; index++) {
                    const img = imgs[index];
                    if(img.offsetTop < document.documentElement.clientHeight + document.documentElement.scrollTop){
                        console.log("scroll"+index+"到了")
                        begin = index; //不去遍歷已經(jīng)加載了得圖片
                        img.src = img.getAttribute("imgPath")
                    }
                }
            }
            lazyload() //渲染首屏捧弃,先執(zhí)行一次
             window.onscroll = lazyload;

以上代碼缺點(diǎn),執(zhí)行太多了擦囊,每次監(jiān)聽到滾輪事件都要去循環(huán)

添加個(gè)節(jié)流函數(shù):违霞,如下:

//節(jié)流函數(shù)
            function throttle(lazyTime, Fuc){
                var lastTime = null //記錄上次時(shí)間
                return function(){
                    var currentTime = new Date().getTime();
                    if(!lastTime){ //初始化時(shí)間
                        lastTime = currentTime;
                    }
                    if(lastTime + lazyTime < currentTime){
                        Fuc();
                        lastTime = currentTime;
                    }
                }
            }
            window.onscroll = throttle(50, lazyload) //事件回調(diào)是個(gè)閉包

測(cè)試基本可行,沒在項(xiàng)目中跑過(guò)瞬场,可能待優(yōu)化的地方還比較多买鸽,原理是這樣的

建議自己多自己寫下,紙上得來(lái)終覺淺贯被,絕知此事要躬行


說(shuō)到了節(jié)流眼五,又要說(shuō)下防抖函數(shù),現(xiàn)學(xué)現(xiàn)賣彤灶,以前我不知道二者的區(qū)別看幼,但是在項(xiàng)目中已經(jīng)不知不覺用過(guò)了。

節(jié)流函數(shù):不管事件的觸發(fā)頻率有多高幌陕,只會(huì)間隔設(shè)定的時(shí)間執(zhí)行目標(biāo)函數(shù)诵姜,如模糊搜索,上面的懶加載苞轿,規(guī)定時(shí)間內(nèi)必執(zhí)行

防抖函數(shù): 當(dāng)觸發(fā)頻率高于設(shè)定的值得時(shí)候茅诱,不執(zhí)行。低于觸發(fā)頻率再執(zhí)行搬卒。
解釋起來(lái)很模糊瑟俭。
實(shí)際運(yùn)用中,如:需要后臺(tái)驗(yàn)證的用戶名注冊(cè)輸入框契邀,當(dāng)用戶頻繁輸入的時(shí)候不用驗(yàn)證摆寄,當(dāng)用戶有一個(gè)停頓的時(shí)候,去后臺(tái)驗(yàn)證是否重名坯门,這樣優(yōu)化了交互微饥,減輕了服務(wù)器壓力

上代碼:

html
        <h1>注冊(cè)</h1>
        <p id="text"></p>
        <input type="text" id="input">
js
            function debounce(Fuc, time){ //防抖
                let timer = null
                return function () {
                    clearTimeout(timer); 
//清除定時(shí)器,如果觸發(fā)時(shí)間超過(guò)設(shè)定時(shí)間古戴,則定時(shí)器中的代碼不能執(zhí)行
                    timer = setTimeout(() => {
                        Fuc()
                    }, time); //重新賦值定時(shí)器
                }
            }
            function test(){
                document.querySelector('#text').innerHTML = new Date().getTime();
            }
            document.querySelector('#input').addEventListener('input', debounce(test, 1000))

原理很簡(jiǎn)單欠橘,利用閉包操作同一個(gè)定時(shí)器的原理,和定時(shí)器的異步性现恼,觸發(fā)時(shí)間短于設(shè)定時(shí)間時(shí)肃续,去清除還沒有執(zhí)行的定時(shí)器黍檩,然后重新定義定時(shí)器。很巧妙的代碼

效果圖:
輸入前:


輸入前.png

頻繁輸入過(guò)程中:


image.png

輸入停止1s后:


1s后.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末始锚,一起剝皮案震驚了整個(gè)濱河市刽酱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞧捌,老刑警劉巖棵里,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姐呐,居然都是意外死亡殿怜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門曙砂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稳捆,“玉大人,你說(shuō)我怎么就攤上這事麦轰。” “怎么了砖织?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵款侵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我侧纯,道長(zhǎng)新锈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任眶熬,我火速辦了婚禮妹笆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娜氏。我一直安慰自己拳缠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布贸弥。 她就那樣靜靜地躺著窟坐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绵疲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天徙菠,我揣著相機(jī)與錄音,去河邊找鬼婿奔。 笑死缺狠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脸秽。 我是一名探鬼主播儒老,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼记餐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了片酝?” 一聲冷哼從身側(cè)響起囚衔,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雕沿,沒想到半個(gè)月后练湿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體审轮,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年篡诽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榴捡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吊圾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出项乒,到底是詐尸還是另有隱情,我是刑警寧澤呈枉,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布埃碱,位于F島的核電站,受9級(jí)特大地震影響砚殿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜似炎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贩毕。 院中可真熱鬧,春花似錦辉阶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谆棺。三九已至罕袋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浴讯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掠河,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓唠摹,卻偏偏與公主長(zhǎng)得像奉瘤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盗温,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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