网页性能优化03-函数防抖
生活随笔
收集整理的這篇文章主要介紹了
网页性能优化03-函数防抖
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.1-函數(shù)防抖
1.函數(shù)防抖介紹
-
1.什么是函數(shù)防抖? (debounce)
- 網(wǎng)上主流解釋:函數(shù)防抖,就是指觸發(fā)事件后在 n 秒內(nèi)函數(shù)只能執(zhí)行一次,如果在 n 秒內(nèi)又觸發(fā)了事件,則會重新計算函數(shù)執(zhí)行時間。
- 參考博客:https://www.jianshu.com/p/f9f6b637fd6c
- 參考博客:https://segmentfault.com/a/1190000018445196
- 筆者解釋:
- 先理解什么是抖動?:例如用戶鼠標(biāo)輕微晃動,快速劃過某一個元素(用戶本身不想觸發(fā),只是鼠標(biāo)誤觸發(fā),常見于鼠標(biāo)事件 移入/移出/移動 )。 例如輸入框手機和郵箱驗證,用戶在不停的輸入,還沒有輸完的時候其實是不需要驗證的,應(yīng)該等用戶輸入完畢后再驗證。
- 防抖 :如果用戶鼠標(biāo)輕微晃動,在某一個元素上停留時間很短,則認為是用戶誤觸發(fā),則不執(zhí)行本次事件處理函數(shù)
- 一句話總結(jié):用戶連續(xù)多次觸發(fā)某個事件,則只執(zhí)行最后一次
- 由于函數(shù)防抖 屬于 前端中的 網(wǎng)頁性能優(yōu)化技術(shù),因此初學(xué)者剛開始學(xué)習(xí)會有一些吃力,并且很多網(wǎng)站都沒有做防抖處理(性能優(yōu)化)
- 沒有函數(shù)防抖的真實案例:http://www.elong.com/?semid=ppzqbaidu
- 這是一個旅游類網(wǎng)站,上面酒店類型選擇沒有做防抖處理,用戶體驗很差
- 有函數(shù)防抖的真實案例:https://xyq.163.com/
- 這是網(wǎng)易夢幻西游官網(wǎng),在網(wǎng)頁底部選擇職業(yè)的手風(fēng)琴位置有做防抖處理,用戶體驗較好
- 沒有函數(shù)防抖的真實案例:http://www.elong.com/?semid=ppzqbaidu
- 網(wǎng)上主流解釋:函數(shù)防抖,就是指觸發(fā)事件后在 n 秒內(nèi)函數(shù)只能執(zhí)行一次,如果在 n 秒內(nèi)又觸發(fā)了事件,則會重新計算函數(shù)執(zhí)行時間。
-
沒有做函數(shù)防抖處理的用戶體驗如下
- 假設(shè)當(dāng)前鼠標(biāo)在第一張,此時用戶想看第五張。正常情況下,鼠標(biāo)會依次觸發(fā) 第二、第三、第四張的移入事件,但這不是用戶真正想要觸發(fā)的(誤觸發(fā))
- 有做函數(shù)防抖處理的用戶體驗如下
- 用戶從第一張 滑動到第五張,由于鼠標(biāo)在 第二、第三、第四張停留時間很短(假設(shè)小于0.5秒),所以判定為用戶誤觸發(fā),則不觸發(fā)對應(yīng)的事件處理函數(shù)
2.函數(shù)防抖解決思路
-
使用定時器:保證用戶多次觸發(fā)事件時,以最后一次觸發(fā)為準(zhǔn)
-
1.每一次移入元素時 : 不立即觸發(fā)該事件處理函數(shù),而是開啟定時器,間隔0.5s(防抖間隔)之后再執(zhí)行事件處理函數(shù)。
- 此時并沒有徹底解決函數(shù)防抖,因為用戶多次觸發(fā)事件時,每一個定時器都會在0.5s之后,依次執(zhí)行
-
2.每一次移入元素時 : 先清除上一次的定時器
- 保證用戶多次觸發(fā)事件時,以最后一次觸發(fā)為準(zhǔn)
-
注意點:定時器中的this默認為window,需要使用上下文模式bind()動態(tài)修改為當(dāng)前事件源
3.萬能防抖函數(shù)的封裝
- 為什么要封裝萬能的防抖函數(shù)
- 在上一個小節(jié)中,我們的重點是介紹函數(shù)防抖的思路。但是在實際開發(fā)中,每一個防抖函數(shù)的事件處理都是不一樣的,他們可能是鼠標(biāo)移入、鼠標(biāo)移出、鼠標(biāo)移動。 每一個案例需要的防抖間隔也不同
總結(jié)
以上是生活随笔為你收集整理的网页性能优化03-函数防抖的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页性能优化02-懒加载工作原理
- 下一篇: 网页性能优化04-函数节流