最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Js中防抖與節(jié)流

2023-03-02 13:49 作者:晨曦箘  | 我要投稿

防抖的概念

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

前端開發(fā)中,常見的事件如,onresize,scroll,mousemove?,mousehover?等會(huì)短時(shí)間內(nèi)多次觸發(fā)(頻繁觸發(fā)),不做限制的話可能一秒執(zhí)行幾百次,

在這些函數(shù)內(nèi)部如果還執(zhí)行了其他函數(shù),尤其是執(zhí)行了操作?dom?的函數(shù)的話(瀏覽器操作 DOM 是很耗費(fèi)性能的),那不僅會(huì)浪費(fèi)計(jì)算機(jī)資源,

還會(huì)降低程序運(yùn)行速度,甚至造成瀏覽器卡死、崩潰。

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

防抖代碼實(shí)現(xiàn)

防抖的關(guān)鍵是需要一個(gè)?setTimeout?來輔助實(shí)現(xiàn),延遲運(yùn)行需要執(zhí)行的代碼。


如果方法多次觸發(fā),則把上次記錄的延遲執(zhí)行代碼用?clearTimeout?清掉,重新開始計(jì)時(shí)。

若計(jì)時(shí)期間事件沒有被重新觸發(fā),等延遲時(shí)間計(jì)時(shí)完畢,則執(zhí)行目標(biāo)代碼。

注意:當(dāng)你一直連續(xù)不斷的點(diǎn)擊超過你設(shè)置的時(shí)間,并且只有第一次點(diǎn)擊有效,這不是bug,這是概念問題,注意看下面標(biāo)紅這部分,

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

節(jié)流的概念

節(jié)流又叫函數(shù)節(jié)流(throttle):指當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。

節(jié)流代碼實(shí)現(xiàn)

  • 鼠標(biāo)連續(xù)不斷地觸發(fā)某事件(如點(diǎn)擊),只在單位時(shí)間內(nèi)只觸發(fā)一次;

  • 在頁面的無限加載場(chǎng)景下,需要用戶在滾動(dòng)頁面時(shí),每隔一段時(shí)間發(fā)一次 ajax 請(qǐng)求,而不是在用戶停下滾動(dòng)頁面操作時(shí)才去請(qǐng)求數(shù)據(jù);

  • 監(jiān)聽滾動(dòng)事件,比如是否滑到底部自動(dòng)加載更多,用throttle來判斷;

節(jié)流和防抖都是差不多的,區(qū)別在于是“立即執(zhí)行版” 和 “非立即執(zhí)行版”?


防抖和節(jié)流的區(qū)別

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

函數(shù)節(jié)流:是間隔時(shí)間執(zhí)行,不管事件觸發(fā)有多頻繁,都會(huì)保證在規(guī)定時(shí)間內(nèi)一定會(huì)執(zhí)行一次真正的事件處理函數(shù)。

原理:

防抖是維護(hù)一個(gè)計(jì)時(shí)器,規(guī)定在delay時(shí)間后觸發(fā)函數(shù),但是在delay時(shí)間內(nèi)再次觸發(fā)的話,都會(huì)清除當(dāng)前的 timer 然后重新設(shè)置超時(shí)調(diào)用,即重新計(jì)時(shí)。這樣一來,只有最后一次操作能被觸發(fā)。

節(jié)流是通過判斷是否到達(dá)一定時(shí)間來觸發(fā)函數(shù),若沒到規(guī)定時(shí)間則使用計(jì)時(shí)器延后,而下一次事件則會(huì)重新設(shè)定計(jì)時(shí)器。

總結(jié)

函數(shù)防抖和節(jié)流的實(shí)現(xiàn)很簡(jiǎn)單,能很友好的解決前端開發(fā)過程中的遇到的很多問題,提升性能,優(yōu)化用戶體驗(yàn)。在實(shí)際的開發(fā)中,防抖函數(shù)還是節(jié)流函數(shù)的選擇需要開發(fā)者針對(duì)不同的應(yīng)用場(chǎng)景進(jìn)行相應(yīng)的應(yīng)用。


Js中防抖與節(jié)流的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
驻马店市| 陵川县| 宝丰县| 镇原县| 大竹县| 黑水县| 江津市| 高唐县| 北海市| 宁陕县| 江北区| 平邑县| 剑阁县| 梁平县| 怀宁县| 雷山县| 九江县| 永丰县| 靖西县| 华坪县| 乳山市| 沾化县| 舒城县| 淮南市| 北安市| 南开区| 安化县| 济南市| 邵武市| 土默特左旗| 黔江区| 浑源县| 太康县| 额尔古纳市| 通许县| 十堰市| 许昌县| 新兴县| 方城县| 即墨市| 绥阳县|