偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何理解JS事件的防抖與節(jié)流?

開發(fā) 前端
在平時的編碼過程中,當(dāng)紿瀏覽器注冊一個時間,經(jīng)常會遇到一些執(zhí)行次數(shù)非常頻繁的事件,如scroll,resize等,事件頻繁的執(zhí)行會導(dǎo)致瀏覽器進行大量的計算而引發(fā)頁面卡頓假死的情況,為些我們需要通過一些手段來解決這個問題,所以就有了防抖和節(jié)流這兩個技術(shù)。

本文轉(zhuǎn)載自微信公眾號「新鈦云服」,作者方章和。轉(zhuǎn)載本文請聯(lián)系新鈦云服公眾號。

在平時的編碼過程中,當(dāng)紿瀏覽器注冊一個時間,經(jīng)常會遇到一些執(zhí)行次數(shù)非常頻繁的事件,如scroll,resize等,事件頻繁的執(zhí)行會導(dǎo)致瀏覽器進行大量的計算而引發(fā)頁面卡頓假死的情況,為些我們需要通過一些手段來解決這個問題,所以就有了防抖和節(jié)流這兩個技術(shù)。

事件節(jié)流 throttle

是指在某段時間內(nèi),不管你觸發(fā)了多少次回調(diào)事件,我都只認第一次,并在計時結(jié)束時給予響應(yīng),至于后面你再觸發(fā)多少次回調(diào)我都不會予以回應(yīng)。代碼實現(xiàn)如下:

  1. // fn執(zhí)行的函數(shù), interval是時間間隔的閾值, 意為多久后執(zhí)行,單位毫秒 
  2. function throttle(fn, interval) { 
  3. // 上一次觸發(fā)回調(diào)的時間 
  4. let last = 0 
  5.   
  6. return function () { 
  7.     let context = this 
  8.     let args = arguments 
  9.     let now = +new Date() 
  10.       
  11.     // 判斷上次觸發(fā)的時間和本次觸發(fā)的時間差是否小于設(shè)置的間隔時間 
  12.     if (now - last >= interval) { 
  13.     // 如果時間間隔大于我們設(shè)定的時間間隔閾值,則執(zhí)行回調(diào) 
  14.         last = now; 
  15.         fn.apply(context, args); 
  16.     } 
  17.   } 
  18. // 紿scroll事件增加節(jié)流 
  19. const newScroll = throttle(() => console.log('滾動了'), 1000) 
  20. document.addEventListener('scroll', newScroll) 

事件防抖Debounce

與事件節(jié)流怡好相反,事件防抖只認最后一次,不管你前面觸發(fā)了多少次我都不管,我只執(zhí)行你最后一次觸發(fā)事件的回調(diào),代碼實現(xiàn)如下:

  1. // fn執(zhí)行的函數(shù), delay是延遲多久執(zhí)行的時間, 意為多久后才觸發(fā)事件,單位毫秒 
  2. function debounce(fn, delay) { 
  3. let timer = null 
  4. return function () { 
  5.   let context = this 
  6.   let args = arguments 
  7.   // 每次事件被觸發(fā)時,都去清除之前的舊定時器 
  8.   if(timer) { 
  9.       clearTimeout(timer) 
  10.   } 
  11.   timer = setTimeout(function () { 
  12.     fn.apply(context, args) 
  13.   }, delay) 
  14. const newScroll = debounce(() => console.log('滾動了'), 1000) 
  15. document.addEventListener('scroll', newScroll) 

函數(shù)防抖的應(yīng)用場景

連續(xù)的事件,只需觸發(fā)一次回調(diào)的場景有:

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

手機號、郵箱驗證輸入檢測

窗口大小Resize。只需窗口調(diào)整完成后,計算窗口大小。防止重復(fù)渲染。

函數(shù)節(jié)流的應(yīng)用場景

間隔一段時間執(zhí)行一次回調(diào)的場景有: 

  • 滾動加載,加載更多或滾到底部監(jiān)聽
  • 百度搜索框,搜索聯(lián)想功能
  • 高頻點擊提交,表單重復(fù)提交

 

責(zé)任編輯:武曉燕 來源: 新鈦云服
相關(guān)推薦

2023-12-18 07:37:17

JavaScript防抖節(jié)流

2023-12-21 08:51:37

防抖節(jié)流Vue.js

2025-06-19 00:02:00

防抖節(jié)流函數(shù)

2021-11-19 09:01:09

防抖節(jié)流前端

2022-04-01 07:52:42

JavaScript防抖節(jié)流

2024-10-12 09:33:24

消息隊列多線程并行編程

2024-03-08 08:26:20

防抖節(jié)流delay?

2022-02-22 08:29:59

Vue前端防抖

2021-05-27 09:00:00

Node.js開發(fā)線程

2022-05-15 22:08:58

ReactHookdebounce

2025-05-09 08:00:00

JavaScript代碼防抖節(jié)流

2021-12-13 07:50:14

前端性能優(yōu)化

2017-04-25 16:20:10

頁面優(yōu)化滾動優(yōu)化

2024-01-05 08:49:15

Node.js異步編程

2024-06-14 09:30:58

2025-10-15 08:00:00

防抖技術(shù)JavaScript

2016-10-20 19:07:10

Javascript事件冒泡與捕獲

2024-05-28 09:26:46

2017-08-16 10:36:10

JavaScriptNode.js事件驅(qū)動

2024-07-01 08:27:05

KeyAndroid按鍵事件
點贊
收藏

51CTO技術(shù)棧公眾號