函數(shù)節(jié)流和去抖的用法和區(qū)別
我們都知道頻繁觸發(fā)執(zhí)行一段js邏輯代碼對性能會有很大的影響,尤其是在做一些效果實(shí)現(xiàn)方面,或者邏輯中需要進(jìn)行后端請求,更是會導(dǎo)致卡頓,效果失效等結(jié)果,所以在處理類似的情況時,可以考慮使用函數(shù)節(jié)流和函數(shù)去抖來解決,至于具體使用哪一種方式,根據(jù)實(shí)際情況分析定奪,先來講解一些這兩者的概念,以下是我個人的一些看法,若有不足,希望大家可以提出.
函數(shù)節(jié)流
在頻繁觸發(fā)的情況下,需要執(zhí)行的邏輯只有執(zhí)行完之后,才能繼續(xù)執(zhí)行下一次.示例代碼:
// 函數(shù)節(jié)流例子
var can = true;
window.onscroll = function(){
if(!can){
//判斷上次邏輯是否執(zhí)行完畢,如果在執(zhí)行中,則直接return
return;
}
can = false;
setTimeout(function(){
//執(zhí)行邏輯
can = true;
}, 100);
};
函數(shù)去抖
在頻繁觸發(fā)的情況下,只有足夠的空閑時間,才執(zhí)行代碼一次,如果沒有執(zhí)行完就清除掉,重新執(zhí)行邏輯,示例代碼:
// 函數(shù)去抖
var timer = null;
window.onscroll = function(){
if (timer) {
// 清除未執(zhí)行的邏輯,重新執(zhí)行下一次邏輯,不論上一次是否執(zhí)行完畢
clearTimeout(timer);
}
timer = setTimeout(function(){
//執(zhí)行邏輯
}, 300);
};
應(yīng)用場景
一般是一些高頻率觸發(fā)的地方,然后想要優(yōu)化性能.比如監(jiān)聽屏幕滾動,鼠標(biāo)拖拽等等.
歡迎關(guān)注微信公眾號:猴哥說前端