摘要:節(jié)流分流,與防抖去抖實(shí)現(xiàn)原理相似。本文主要討論節(jié)流,鏡像文章防抖理解,實(shí)踐與實(shí)現(xiàn)。分開(kāi)討論防抖和節(jié)流,主要是為了讓一些還不太了解節(jié)流防抖的讀者能夠有針對(duì)性地,逐一掌握它們。上方為未節(jié)流模式,每一次觸發(fā)都會(huì)繪制一個(gè)圓點(diǎn)。
節(jié)流(分流),與防抖(去抖)實(shí)現(xiàn)原理相似。本文主要討論節(jié)流,鏡像文章:防抖 - 理解,實(shí)踐與實(shí)現(xiàn)。分開(kāi)討論防抖和節(jié)流,主要是為了讓一些還不太了解節(jié)流防抖的讀者能夠有針對(duì)性地,逐一掌握它們。
如何用代碼實(shí)現(xiàn)節(jié)流也是一個(gè)要點(diǎn)。本文采用循序漸進(jìn)地方式,先繪制一個(gè)案例的流程圖,再根據(jù)流程圖的邏輯編寫節(jié)流功能代碼。
文章包含多個(gè)可交互案例,可通過(guò)博客原文實(shí)時(shí)查看案例節(jié)流案例
同時(shí)歡迎訂閱我的博客
點(diǎn)擊運(yùn)行案例
當(dāng)鼠標(biāo)移動(dòng)時(shí),mousemove事件頻繁被觸發(fā)。上方為未節(jié)流模式,每一次mousemove觸發(fā)都會(huì)繪制一個(gè)圓點(diǎn)。而下方為節(jié)流模式,盡管mosuemove在鼠標(biāo)移動(dòng)時(shí)被多次觸發(fā),但只有在限定時(shí)間間隔才會(huì)繪制圓點(diǎn)。
理解和實(shí)現(xiàn)節(jié)流通過(guò)上方案例,可以基本了解節(jié)流的作用: 頻繁觸發(fā)的事件,事件處理函數(shù)在一定的時(shí)間間隔內(nèi)只執(zhí)行一次。
不過(guò)節(jié)流函數(shù)是如何做到的? 以上方案例為例,繪制其流程圖如下。
核心參數(shù):
間隔時(shí)長(zhǎng)
計(jì)時(shí)器
根據(jù)流程圖的思路實(shí)現(xiàn)分流函數(shù):
function throttle( func, wait ) { let timer function throttled( ...args ) { const self = this if ( timer == null ) { invokeFunc() addTimer() } function addTimer() { timer = setTimeout( () => { clearTimer() }, wait ) } function invokeFunc() { func.apply( self, args ) } } return throttled function clearTimer() { clearTimeout( timer ) timer = null } }
接下來(lái),用編寫的節(jié)流函數(shù)實(shí)現(xiàn)上方案例
點(diǎn)擊運(yùn)行案例
應(yīng)用場(chǎng)景無(wú)限的滾動(dòng)條
點(diǎn)擊運(yùn)行案例
總結(jié)節(jié)流和防抖類似,都能有效優(yōu)化系統(tǒng)性能,不過(guò)使用業(yè)務(wù)場(chǎng)景有所區(qū)別:
防抖既可用于在多次觸發(fā)的事件(如文本框逐個(gè)輸入文字),也可用于在頻繁觸發(fā)的事件(如調(diào)整窗口尺寸)。
節(jié)流多只用在頻繁觸發(fā)的事件(如滾動(dòng)滾動(dòng)條)上。
感謝你花時(shí)間閱讀這篇文章。如果你喜歡這篇文章,歡迎點(diǎn)贊、收藏和分享,讓更多的人看到這篇文章,這也是對(duì)我最大的鼓勵(lì)和支持!
同時(shí)歡迎訂閱我的博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/109313.html
摘要:本文主要討論防抖,鏡像文章節(jié)流理解,實(shí)踐與實(shí)現(xiàn)。分開(kāi)討論防抖和節(jié)流,主要是為了讓一些還不太了解防抖節(jié)流的讀者能夠有針對(duì)性地,逐一掌握它們。防抖是什么結(jié)合上方案例,防抖可以理解為多次觸發(fā)事件后,事件處理函數(shù)只執(zhí)行一次。 為了完整閱讀體驗(yàn),歡迎移步到我的博客原文。 防抖(去抖),以及節(jié)流(分流)在日常開(kāi)發(fā)中可能用的不多,但在特定場(chǎng)景,卻十分有用。本文主要討論防抖,鏡像文章:節(jié)流 - 理解,...
摘要:起因面試被問(wèn)到了節(jié)流和防抖動(dòng)自己對(duì)這兩個(gè)的概念比較模糊都不知道回答了什么鬼從語(yǔ)文和英語(yǔ)學(xué)起首先先看字面意思節(jié)流的意思就是水龍頭關(guān)小點(diǎn)頻率不要那么高防抖動(dòng)這根彈簧你不要來(lái)回蹦了我就要你最后停下來(lái)的沒(méi)有發(fā)生形變的那一刻舉個(gè)例子節(jié)流在改變窗口大小 起因 面試被問(wèn)到了節(jié)流和防抖動(dòng), 自己對(duì)這兩個(gè)的概念比較模糊, 都不知道回答了什么鬼 從語(yǔ)文和英語(yǔ)學(xué)起 首先, 先看字面意思:節(jié)流(throttl...
摘要:第一種直接調(diào)用避免在不必要的情況下使用,是一個(gè)危險(xiǎn)的函數(shù),他執(zhí)行的代碼擁有著執(zhí)行者的權(quán)利。來(lái)自于此外,實(shí)現(xiàn)需要考慮實(shí)例化后對(duì)原型鏈的影響。函數(shù)柯里化的主要作用和特點(diǎn)就是參數(shù)復(fù)用提前返回和延遲執(zhí)行。手寫路徑導(dǎo)航 實(shí)現(xiàn)一個(gè)new操作符 實(shí)現(xiàn)一個(gè)JSON.stringify 實(shí)現(xiàn)一個(gè)JSON.parse 實(shí)現(xiàn)一個(gè)call或 apply 實(shí)現(xiàn)一個(gè)Function.bind 實(shí)現(xiàn)一個(gè)繼承 實(shí)現(xiàn)一個(gè)J...
摘要:設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐讀書筆記最近利用碎片時(shí)間在上面閱讀設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐讀書這本書,剛開(kāi)始閱讀前兩章內(nèi)容,和大家分享下我覺(jué)得可以在項(xiàng)目中用的上的一些筆記。事件綁定暫時(shí)這么多,以后會(huì)不定期更新一些關(guān)于我讀這本書的筆記內(nèi)容 JavaScript 設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐讀書筆記 最近利用碎片時(shí)間在 Kindle 上面閱讀《JavaScript 設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐讀書》這本書,剛開(kāi)始閱讀前兩章內(nèi)容,...
閱讀 1773·2021-10-13 09:39
閱讀 3222·2021-10-12 10:11
閱讀 600·2021-09-28 09:36
閱讀 2748·2019-08-30 15:55
閱讀 1465·2019-08-30 13:04
閱讀 690·2019-08-29 17:08
閱讀 1978·2019-08-29 14:14
閱讀 3476·2019-08-28 18:23