函數(shù)節(jié)流的原理

  • 首先江场,我們需要知道什么是函數(shù)節(jié)流

舉個(gè)例子:一個(gè)水龍頭在滴水甩牺,可能一次性會(huì)滴很多滴,但是我們只希望它每隔 500ms 滴一滴水煌茬,保持這個(gè)頻率斥铺。即我們希望函數(shù)在以一個(gè)可以接受的頻率重復(fù)調(diào)用。
函數(shù)節(jié)流就是針對(duì)調(diào)用頻率高的函數(shù)坛善,通過設(shè)置定時(shí)器晾蜘,使其在執(zhí)行后間隔一段時(shí)間,才進(jìn)行下一次的執(zhí)行眠屎,避免重復(fù)頻繁的調(diào)用導(dǎo)致的瀏覽器性能以及ajax重復(fù)調(diào)用問題笙纤。

  • 那么問題來了,有哪些函數(shù)是調(diào)用頻率高的呢组力?

最常見的一些需要節(jié)流的事件:onresize,scroll抖拴,mousemove ,mousehover燎字,因?yàn)檫@些事件會(huì)在頁面中頻繁被觸發(fā)

  • 那么,函數(shù)節(jié)流該如何實(shí)現(xiàn)呢阿宅?思路是什么呢候衍?

主要實(shí)現(xiàn)思路就是通過setTimeout定時(shí)器,通過設(shè)置延時(shí)時(shí)間洒放,在第一次調(diào)用時(shí)蛉鹿,創(chuàng)建定時(shí)器,寫入需要執(zhí)行的函數(shù)往湿。第二次調(diào)用時(shí)妖异,會(huì)清除前一個(gè)定時(shí)器并設(shè)置新的定時(shí)器。如果這時(shí)前一個(gè)定時(shí)器暫未執(zhí)行领追,則將其替換為新的定時(shí)器他膳。目的在于在一定的時(shí)間內(nèi),保證多次函數(shù)的請(qǐng)求只執(zhí)行最后一次調(diào)用

這個(gè)時(shí)候绒窑,我們看一個(gè)簡(jiǎn)單的例子

  • HTML
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>函數(shù)節(jié)流測(cè)試</title>
</head>
<body>
<div class="box">我是一個(gè)div</div>
</body>
</html>
  • js代碼
document.querySelector('.box').addEventListener('mouseenter',function(){
  console.log('鼠標(biāo)進(jìn)來啦')
})
  • 這個(gè)時(shí)候在DIV里來回晃動(dòng)鼠標(biāo)棕孙,控制臺(tái)會(huì)打出很多鼠標(biāo)進(jìn)來啦


    image.png

    如果對(duì)JS進(jìn)行簡(jiǎn)單的修改,變成下面這樣

var clock
document.querySelector('.box').addEventListener('mouseenter',function(){
  clearTimeout(clock)
   clock = setTimeout(function(){
    console.log('鼠標(biāo)進(jìn)來啦')
  },1000)
})

那么些膨,我用鼠標(biāo)去來回晃的結(jié)果就是下面這樣了蟀俊,它只會(huì)在我進(jìn)入div并且1S內(nèi)沒有再次進(jìn)入的時(shí)候才會(huì)執(zhí)行


image.png

那么這就是一個(gè)簡(jiǎn)單的函數(shù)節(jié)流的實(shí)現(xiàn),通過了解原理我們就可以優(yōu)化我們的代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末订雾,一起剝皮案震驚了整個(gè)濱河市肢预,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葬燎,老刑警劉巖误甚,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缚甩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡窑邦,警方通過查閱死者的電腦和手機(jī)擅威,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冈钦,“玉大人郊丛,你說我怎么就攤上這事∏粕福” “怎么了厉熟?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)较幌。 經(jīng)常有香客問我揍瑟,道長(zhǎng),這世上最難降的妖魔是什么乍炉? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任绢片,我火速辦了婚禮,結(jié)果婚禮上岛琼,老公的妹妹穿的比我還像新娘底循。我一直安慰自己,他們只是感情好槐瑞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布熙涤。 她就那樣靜靜地躺著,像睡著了一般困檩。 火紅的嫁衣襯著肌膚如雪祠挫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天悼沿,我揣著相機(jī)與錄音茸歧,去河邊找鬼。 笑死显沈,一個(gè)胖子當(dāng)著我的面吹牛软瞎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拉讯,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涤浇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了魔慷?” 一聲冷哼從身側(cè)響起只锭,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎院尔,沒想到半個(gè)月后蜻展,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉誊,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纵顾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伍茄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡施逾,死狀恐怖敷矫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汉额,我是刑警寧澤曹仗,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蠕搜,受9級(jí)特大地震影響怎茫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妓灌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一遭居、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旬渠,春花似錦、人聲如沸端壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽损谦。三九已至岖免,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間照捡,已是汗流浹背颅湘。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栗精,地道東北人闯参。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悲立,于是被迫代替她去往敵國和親鹿寨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • 首先薪夕,我們需要知道什么是函數(shù)節(jié)流 函數(shù)節(jié)流就是針對(duì)調(diào)用頻率高的函數(shù)脚草,通過設(shè)置定時(shí)器,使其在執(zhí)行后間隔一段時(shí)間原献,才進(jìn)...
    張镕凡閱讀 2,715評(píng)論 0 98
  • ??JavaScript 是一種極其靈活的語言,具有多種使用風(fēng)格写隶。 ??一般來說倔撞,編寫 JavaScript 要么...
    霜天曉閱讀 745評(píng)論 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)樟澜。 注意:講述HT...
    kismetajun閱讀 27,486評(píng)論 1 45
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,103評(píng)論 1 32
  • 昨天好不容易從鄉(xiāng)下回到新江口误窖,新年想了多久都沒有實(shí)現(xiàn)的愿望終于要實(shí)現(xiàn)了——我要去看《飛馳人生》了! 一部悲喜交融的...
    東門無澤閱讀 1,260評(píng)論 0 2