电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何理解JS函數(shù)防抖和函數(shù)節(jié)流

瀏覽:111日期:2024-03-25 16:15:10
目錄概述1. 函數(shù)防抖(debounce)2. 函數(shù)節(jié)流(throttle)概述

函數(shù)防抖和函數(shù)節(jié)流都是定義一個(gè)函數(shù),該函數(shù)接收一個(gè)函數(shù)作為參數(shù),并返回一個(gè)添加了防抖或節(jié)流功能后的函數(shù)。

因此可以將函數(shù)防抖和函數(shù)節(jié)流看作是一個(gè)函數(shù)工廠,負(fù)責(zé)對(duì)傳進(jìn)來(lái)的函數(shù)進(jìn)行相應(yīng)的加工改造,然后產(chǎn)出一個(gè)新的帶有某種功能的函數(shù)。

函數(shù)防抖是某一時(shí)間內(nèi)只執(zhí)行一次,而函數(shù)節(jié)流是間隔時(shí)間執(zhí)行

假如有這樣一個(gè)場(chǎng)景:在某一頁(yè)面,有一個(gè)按鈕是 '加載更多',這個(gè)按鈕的作用就是使用 ajax 從后端服務(wù)器請(qǐng)求更多的數(shù)據(jù)展示在頁(yè)面,我們都知道,ajax 請(qǐng)求的響應(yīng)是一個(gè)異步的,會(huì)存在一定的響應(yīng)時(shí)間,如果用戶在點(diǎn)擊了該按鈕后,立馬又點(diǎn)擊了一下該按鈕,按照常規(guī)回調(diào)函數(shù)的操作,回調(diào)函數(shù)會(huì)立馬又執(zhí)行一次,那么就是用戶短時(shí)間內(nèi)點(diǎn)擊了兩次 '加載更多' 按鈕后就會(huì)執(zhí)行回調(diào)函數(shù)向后端發(fā)起了兩次一模一樣的 ajax 請(qǐng)求,服務(wù)器會(huì)一一接收請(qǐng)求并處理返回?cái)?shù)據(jù),短時(shí)間內(nèi)兩次請(qǐng)求還好,如果用戶連續(xù)點(diǎn)擊了 n 次 '加載更多' 按鈕呢?那就會(huì)短時(shí)間內(nèi)向服務(wù)器發(fā)送了 n 次一模一樣的請(qǐng)求,每次后端處理 ajax 請(qǐng)求后返回?cái)?shù)據(jù)后頁(yè)面就會(huì)重新再渲染一次,盡管內(nèi)容沒(méi)有改變,這樣就會(huì)帶來(lái)性能上的問(wèn)題,不僅為服務(wù)器帶去了壓力,也為瀏覽器帶來(lái)了不必要的渲染,這就是函數(shù)頻繁執(zhí)行帶來(lái)的副作用。

那么如何設(shè)置這個(gè)按鈕的點(diǎn)擊事件回調(diào)函數(shù)才能減少該函數(shù)頻繁執(zhí)行帶來(lái)的副作用呢?

1. 函數(shù)防抖(debounce)

函數(shù)防抖的設(shè)計(jì)思路就是在函數(shù)執(zhí)行前加一個(gè)等待時(shí)間,在這個(gè)等待時(shí)間內(nèi)如果該函數(shù)又需要執(zhí)行一次,就重新計(jì)算等待時(shí)間,再次等待,依次類推,直到等待時(shí)間到了,還沒(méi)有等到函數(shù)又需要執(zhí)行的情況,才會(huì)執(zhí)行這個(gè)函數(shù)。

就拿上述的場(chǎng)景來(lái)說(shuō),假設(shè)向后臺(tái)發(fā)送 ajax 請(qǐng)求的響應(yīng)時(shí)間大概是在 2s 左右,那就設(shè)置這個(gè)等待時(shí)間為 2s,當(dāng)用戶第一次點(diǎn)擊'加載更多'按鈕后,該回調(diào)函數(shù)并沒(méi)有立即執(zhí)行,也就是還沒(méi)有開始發(fā)送 ajax,此時(shí)該函數(shù)在等待,如果在 2s 內(nèi)用戶又點(diǎn)擊了'加載更多',那就重新計(jì)算等待時(shí)間,再等待 2s ,此時(shí) 2s 過(guò)去了,用戶沒(méi)再第三次點(diǎn)擊'加載更多'按鈕了,那么該函數(shù)就開始執(zhí)行了,向后端發(fā)送 ajax 請(qǐng)求了。

函數(shù)防抖實(shí)現(xiàn)方式如下:

function debounce(fn, delay){ let timeId = null return function(){let context = thisif(timeId){window.clearTimeout(timeId)}timeId = setTimeout(()=>{ fn.apply(context, arguments) timeId = null},delay) }}2. 函數(shù)節(jié)流(throttle)

函數(shù)節(jié)流的設(shè)計(jì)思路是在函數(shù)執(zhí)行后加一個(gè)冷卻時(shí)間,函數(shù)在第一次執(zhí)行時(shí)是立馬執(zhí)行,但在其執(zhí)行完后設(shè)置一個(gè)冷卻時(shí)間,在冷卻時(shí)間內(nèi),該函數(shù)不能再次執(zhí)行,直到冷卻時(shí)間結(jié)束允許該函數(shù)執(zhí)行了,才可以再次執(zhí)行。

就拿上述的場(chǎng)景來(lái)說(shuō),冷卻時(shí)間假設(shè)也設(shè)置為 2s,在用戶第一次點(diǎn)擊'加載更多' 后按鈕的回調(diào)函數(shù)就會(huì)執(zhí)行,也就是會(huì)向后臺(tái)發(fā)送 ajax 請(qǐng)求,此時(shí)用戶又立馬再次點(diǎn)擊了'加載更多'按鈕,由于此刻 2s 的冷卻時(shí)間還沒(méi)有到,那么就會(huì)給第二次的函數(shù)執(zhí)行加上一個(gè)延遲執(zhí)行。

function throttle(fn, delay){ let canUse = true return function(){if(canUse){ fn.apply(this, arguments) canUse = false setTimeout(()=>canUse=true, delay)} }}

以上就是如何理解JS函數(shù)防抖和函數(shù)節(jié)流的詳細(xì)內(nèi)容,更多關(guān)于JS函數(shù)防抖和函數(shù)節(jié)流的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 厌氧反应器,IC厌氧反应器,厌氧三相分离器-山东创博环保科技有限公司 | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 暴风影音 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 一点车讯-汽车网站,每天一点最新车讯! | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 溶氧传感器-pH传感器|哈美顿(hamilton) | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 出国劳务公司_正规派遣公司[严海] | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 膏方加工_丸剂贴牌_膏滋代加工_湖北康瑞生物科技有限公司 | 南京交通事故律师-专打交通事故的南京律师 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 818手游网_提供当下热门APP手游_最新手机游戏下载 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 动物解剖台-成蚊接触筒-标本工具箱-负压实验台-北京哲成科技有限公司 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 |