日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

詳解JS函數(shù)防抖

瀏覽:193日期:2024-05-05 09:12:29

一、什么是函數(shù)防抖

概念:函數(shù)防抖(debounce),就是指觸發(fā)事件后,在 n 秒內(nèi)函數(shù)只能執(zhí)行一次,如果觸發(fā)事件后在 n 秒內(nèi)又觸發(fā)了事件,則會(huì)重新計(jì)算函數(shù)延執(zhí)行時(shí)間。

舉個(gè)栗子,坐電梯的時(shí)候,如果電梯檢測(cè)到有人進(jìn)來(lái)(觸發(fā)事件),就會(huì)多等待 10 秒,此時(shí)如果又有人進(jìn)來(lái)(10秒之內(nèi)重復(fù)觸發(fā)事件),那么電梯就會(huì)再多等待 10 秒。在上述例子中,電梯在檢測(cè)到有人進(jìn)入 10 秒鐘之后,才會(huì)關(guān)閉電梯門開(kāi)始運(yùn)行,因此,“函數(shù)防抖”的關(guān)鍵在于,在 一個(gè)事件 發(fā)生 一定時(shí)間 之后,才執(zhí)行 特定動(dòng)作

二、為什么需要函數(shù)防抖

前端開(kāi)發(fā)過(guò)程中,有一些事件,常見(jiàn)的例如,onresize,scroll,mousemove ,mousehover 等,會(huì)被頻繁觸發(fā)(短時(shí)間內(nèi)多次觸發(fā)),不做限制的話,有可能一秒之內(nèi)執(zhí)行幾十次、幾百次,如果在這些函數(shù)內(nèi)部執(zhí)行了其他函數(shù),尤其是執(zhí)行了操作 DOM 的函數(shù)(瀏覽器操作 DOM 是很耗費(fèi)性能的),那不僅會(huì)浪費(fèi)計(jì)算機(jī)資源,還會(huì)降低程序運(yùn)行速度,甚至造成瀏覽器卡死、崩潰。這種問(wèn)題顯然是致命的。

除此之外,短時(shí)間內(nèi)重復(fù)的 ajax 調(diào)用不僅會(huì)造成數(shù)據(jù)關(guān)系的混亂,還會(huì)造成網(wǎng)絡(luò)擁塞,增加服務(wù)器壓力,顯然這個(gè)問(wèn)題也是需要解決的。

三、函數(shù)防抖如何解決上述問(wèn)題

根據(jù)上面對(duì)問(wèn)題的分析,細(xì)細(xì)思索,可以想到如下解決方案。

函數(shù)防抖的要點(diǎn),是需要一個(gè) setTimeout 來(lái)輔助實(shí)現(xiàn),延遲運(yùn)行需要執(zhí)行的代碼。如果方法多次觸發(fā),則把上次記錄的延遲執(zhí)行代碼用 clearTimeout 清掉,重新開(kāi)始計(jì)時(shí)。若計(jì)時(shí)期間事件沒(méi)有被重新觸發(fā),等延遲時(shí)間計(jì)時(shí)完畢,則執(zhí)行目標(biāo)代碼。

四、函數(shù)防抖的代碼實(shí)現(xiàn)

根據(jù)以上分析,我們對(duì) “函數(shù)防抖” 來(lái)進(jìn)行簡(jiǎn)單的代碼實(shí)現(xiàn),如下:

function debounce(fn,wait){ var timer = null; return function(){ if(timer !== null){ clearTimeout(timer); } timer = setTimeout(fn,wait); }} function handle(){ console.log(Math.random());} window.addEventListener('resize',debounce(handle,1000));

五、函數(shù)節(jié)流的使用場(chǎng)景

函數(shù)防抖一般用在什么情況之下呢?一般用在,連續(xù)的事件只需觸發(fā)一次回調(diào)的場(chǎng)合。具體有:

搜索框搜索輸入。只需用戶最后一次輸入完,再發(fā)送請(qǐng)求;

用戶名、手機(jī)號(hào)、郵箱輸入驗(yàn)證;

瀏覽器窗口大小改變后,只需窗口調(diào)整完后,再執(zhí)行 resize 事件中的代碼,防止重復(fù)渲染。

目前遇到過(guò)的用處就是這些,理解了原理與實(shí)現(xiàn)思路,小伙伴可以把它運(yùn)用在任何需要的場(chǎng)合,提高代碼質(zhì)量。

總結(jié)

函數(shù)防抖其實(shí)是分為 “立即執(zhí)行版” 和 “非立即執(zhí)行版” 的,根據(jù)字面意思就可以發(fā)現(xiàn)他們的差別,所謂立即執(zhí)行版就是 觸發(fā)事件后函數(shù)不會(huì)立即執(zhí)行,而是在 n 秒后執(zhí)行,如果在 n 秒內(nèi)又觸發(fā)了事件,則會(huì)重新計(jì)算函數(shù)執(zhí)行時(shí)間。 而 “非立即執(zhí)行版” 指的是 觸發(fā)事件后函數(shù)會(huì)立即執(zhí)行,然后 n 秒內(nèi)不觸發(fā)事件才能繼續(xù)執(zhí)行函數(shù)的效果。。

在開(kāi)發(fā)過(guò)程中,我們需要根據(jù)不同的場(chǎng)景來(lái)決定我們需要使用哪一個(gè)版本的防抖函數(shù),一般來(lái)講上述的防抖函數(shù)都能滿足大部分的場(chǎng)景需求。但我們也可以將非立即執(zhí)行版和立即執(zhí)行版的防抖函數(shù)結(jié)合起來(lái),實(shí)現(xiàn)最終的雙劍合璧版本的防抖函數(shù),以下為小伙伴們做了簡(jiǎn)單的實(shí)現(xiàn):

/*** @desc 函數(shù)防抖---“立即執(zhí)行版本” 和 “非立即執(zhí)行版本” 的組合版本* @param func 需要執(zhí)行的函數(shù)* @param wait 延遲執(zhí)行時(shí)間(毫秒)* @param immediate---true 表立即執(zhí)行,false 表非立即執(zhí)行**/function debounce(func,wait,immediate) {let timer;return function () {let context = this;let args = arguments;if (timer) clearTimeout(timer);if (immediate) {var callNow = !timer;timer = setTimeout(() => {timer = null;}, wait)if (callNow) func.apply(context, args)} else {timer = setTimeout(function(){func.apply(context, args)}, wait);}}}function handle(){console.log(Math.random());}// window.addEventListener('mousemove',debounce(handle,1000,true)); // 調(diào)用立即執(zhí)行版本window.addEventListener('mousemove',debounce(handle,1000,false)); // 調(diào)用非立即執(zhí)行版本

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆精品新av中文字幕| 日本不卡视频在线观看| 亚洲激情中文| 香蕉成人久久| 成人精品久久| 国产一二在线播放| 亚洲黄色中文字幕| 国产成人调教视频在线观看| 婷婷精品在线| 国产欧美69| 美女久久精品| 精品美女视频| 亚洲人成网站在线在线观看| 国产私拍福利精品视频二区| 老牛国产精品一区的观看方式| 日韩中文字幕亚洲一区二区va在线 | 亚州精品视频| 岛国精品一区| 免费日韩视频| 美女国产精品久久久| 伊人久久av| 国产农村妇女精品一二区| 欧美另类中文字幕| 日本免费一区二区三区四区| 黄色日韩在线| 四虎在线精品| 日本蜜桃在线观看视频| 日韩国产在线一| 久久亚洲黄色| 综合激情网站| 中文字幕一区久| 日韩福利视频导航| 在线日韩中文| 欧美激情网址| 国产亚洲午夜| av免费不卡国产观看| 亚洲精品日本| 国产综合亚洲精品一区二| 国产精品一在线观看| 91精品国产福利在线观看麻豆| 日韩专区一卡二卡| 国模大尺度视频一区二区| 亚洲一二av| 久久婷婷丁香| 国产传媒在线| 四虎国产精品免费观看| 精品美女在线视频| jizzjizz中国精品麻豆| 伊人精品一区| 国产乱人伦丫前精品视频| 亚洲高清久久| 成人午夜毛片| 欧美日韩va| 亚洲ww精品| 日本欧洲一区二区| 中文av在线全新| 美女视频一区在线观看| 中文字幕一区二区三区日韩精品 | 亚洲精品影视| 亚洲伊人影院| 精品一区免费| 午夜精品成人av| 中文字幕一区二区三区在线视频| 男人操女人的视频在线观看欧美| 国产成人免费精品| 久久香蕉网站| 麻豆精品久久久| 日韩精品第一| 视频精品一区二区| 免费看欧美美女黄的网站| 亚洲精品1区| 国产亚洲高清视频| 丝袜美腿一区二区三区| 亚洲一区二区动漫| 日韩中文字幕一区二区三区| 亚洲一区欧美二区| 日本久久一区| 国产精品嫩模av在线| 国产精品久久国产愉拍| 视频福利一区| 91国语精品自产拍| 亚洲免费影院| 国精品产品一区| 日韩国产成人精品| 国产精品久久久久久久久久白浆| 国产精品久久久免费| 日韩精品一区二区三区免费视频| 日本视频中文字幕一区二区三区| 久久国产生活片100| 精品美女视频| 亚洲欧美一区在线| 视频一区日韩精品| 欧美xxxx性| 日韩一区欧美| 天堂av一区| 高清av一区| 蜜桃久久久久久| 精品三级av| 国产高清久久| 日本h片久久| 蜜桃tv一区二区三区| 日本不卡不码高清免费观看| 91免费精品| 国产传媒在线观看| 亚洲免费中文| 国产aⅴ精品一区二区四区| 91高清一区| 久久三级中文| 奇米亚洲欧美| 国产精品女主播一区二区三区| 欧美日韩午夜电影网| 日韩午夜av| 亚洲www啪成人一区二区| 欧美资源在线| 久久久成人网| 国产成人调教视频在线观看| 日韩专区视频网站| 日韩视频久久| 久久香蕉国产| 天堂√8在线中文| 国产精品777777在线播放| 免费高清在线一区| 亚洲性视频h| 日韩精品2区| 在线精品亚洲欧美日韩国产| 久久久久亚洲精品中文字幕| 日本久久二区| 日本午夜精品一区二区三区电影| 亚洲精品.com| 日韩在线欧美| 国产成人精品一区二区三区视频| 久久国产乱子精品免费女| 亚州精品视频| 97久久超碰| 国产欧美大片| 久久中文在线| 久久亚洲黄色| 麻豆91小视频| 高潮久久久久久久久久久久久久| 国产精品mm| 国产va在线视频| 黄色在线观看www| 久久亚洲成人| 日韩视频一区| 亚洲开心激情| 日本欧美大码aⅴ在线播放| 蜜臀国产一区二区三区在线播放| 欧美日韩在线播放视频| 亚洲国产专区| 免费不卡在线视频| 麻豆精品在线播放| 久久精品中文| 日欧美一区二区| 高清av一区| 99成人在线| 国产精品久久久久久久久久久久久久久 | 99精品视频在线| 在线亚洲激情| 国产三级一区| 国产在线|日韩| 亚洲精品乱码日韩| 欧美国产视频| 日韩一区自拍| 亚洲aa在线| 国产欧美69| 一区二区亚洲精品| 精品国产美女a久久9999| 日韩中文av| 五月天激情综合网| 欧美xxxx中国| 国产欧美精品久久| 午夜一级在线看亚洲| zzzwww在线看片免费| 日韩高清在线一区| 久久国产福利| 久久亚洲精品中文字幕蜜潮电影| 欧美一区不卡| 999精品在线| 成人精品国产亚洲| 91九色精品国产一区二区| 中文字幕日韩高清在线| 国产成人免费精品| 丝袜美腿一区二区三区| 亚洲精品进入| 天堂√中文最新版在线| 国产精品v亚洲精品v日韩精品| 97精品久久| 日韩欧美午夜| 日韩黄色免费网站| 午夜精品亚洲| 精品久久在线| 日韩精品第一| aa亚洲婷婷| 91精品啪在线观看国产18| 日韩精品一二三区| 香蕉视频亚洲一级| 亚洲精品少妇| 日韩一区二区久久| 色婷婷色综合| 日韩高清在线观看一区二区|