最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中防抖和節(jié)流的原理和區(qū)別詳解

 更新時間:2023年09月18日 09:05:51   作者:念舊的俗人  
JavaScript 中,防抖和節(jié)流是一種用于優(yōu)化事件處理函數(shù)調用頻率的技術,防抖和節(jié)流的目的都是為了避免頻繁地觸發(fā)事件處理函數(shù),從而減少瀏覽器和服務器的負擔,本文將給大家介紹一下JavaScript中防抖和節(jié)流的原理和區(qū)別,需要的朋友可以參考下

前言

JavaScript 中,防抖和節(jié)流是一種用于優(yōu)化事件處理函數(shù)調用頻率的技術。防抖和節(jié)流的目的都是為了避免頻繁地觸發(fā)事件處理函數(shù),從而減少瀏覽器和服務器的負擔。

防抖

防抖(Debounce)的原理是在事件被觸發(fā)后,等待一定的時間間隔(比如500ms),如果在這個時間間隔內沒有再次觸發(fā)該事件,才會執(zhí)行事件處理函數(shù)。如果在這個時間間隔內又觸發(fā)了該事件,那么就重新等待新的時間間隔。

防抖主要是通過定時器來實現(xiàn),如下:

function debounce(fun, time) {
    let timer
    return function () {
        let that = this
        if (timer) clearTimeout(timer)
        timer = setTimeout(function () {
            fun.call(that)
        }, time)
    }
}

以上代碼中,fun 是事件處理程序,time 是事件執(zhí)行的延遲時間,單位:毫秒。每一次觸發(fā)事件時,會先判斷一下 timer 的值是否賦值了定時器,如果賦值了,就直接清除定時器。然后在執(zhí)行下面的代碼。

節(jié)流

節(jié)流(Throttle)的原理是在事件被觸發(fā)后,首先執(zhí)行事件處理函數(shù),然后設置一個時間間隔(比如500ms),在這個時間間隔內不再觸發(fā)該事件。只有等待這個時間間隔過去后,才會重新觸發(fā)事件,并再次執(zhí)行事件處理函數(shù)。

節(jié)流的實現(xiàn)方式有兩種:

  • 使用定時器實現(xiàn)
function throttlea(fun, t) {
    let timer = null
    return function () {
        let that = this
        if (!timer) {
            timer = setTimeout(function () {
                fun.call(that)
                timer = null
            }, t)
        }
    }
}

以上代碼中,觸發(fā)事件后,會直接重新賦值 timer 為一個定時器,到時間后執(zhí)行事件處理程序,重新賦值 timer 為 null,在這期間,因為 timer 的值是一個定時器,if 判斷是不會執(zhí)行的,必須重新賦值為 null 后才會重新執(zhí)行。

  • 時間戳的方式
function throttle(fun, time) {
    let start = 0
    return function () {
        let that = this
        let current = Date.now()
        if (current - start >= time) {
            fun.call(that)
            start = current
        }
    }
}

以上代碼中,觸發(fā)事件后,定義開始觸發(fā)事件的時間 start 為零,獲取當前的時間戳賦值給 current,判斷當前時間與初始時間是否超過間隔,如果超過了就把當前這個時間戳賦值給 start,然后執(zhí)行事件處理程序。(因為初始時間為零,所以第一次觸發(fā)會直接執(zhí)行)

總結

防抖:適用于需要等待用戶停止操作后再執(zhí)行的場景,比如搜索框輸入文本后請求接口。

節(jié)流:適用于需要限制函數(shù)執(zhí)行頻率的場景,比如滾動事件中的懶加載。

到此這篇關于JavaScript中防抖和節(jié)流的原理和區(qū)別詳解的文章就介紹到這了,更多相關JavaScript防抖和節(jié)流內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS實現(xiàn)的簡單tab切換功能完整示例

    JS實現(xiàn)的簡單tab切換功能完整示例

    這篇文章主要介紹了JS實現(xiàn)的簡單tab切換功能,結合完整實例形式分析了javascript基于事件響應實現(xiàn)頁面元素屬性動態(tài)變換相關操作技巧,需要的朋友可以參考下
    2019-06-06
  • JS自定義打印及靜默打印的實現(xiàn)方法

    JS自定義打印及靜默打印的實現(xiàn)方法

    在瀏覽器上打印應該一個比較常見的操作, 最簡單的打印方式就是直接點擊瀏覽器右上角,找到“打印”按鈕或者調用window.print(), 然而,實際情況下大多數(shù)需求都不會如此簡單,所以本文給大家介紹了使用JS自定義打印及靜默打印的方法實現(xiàn),需要的朋友可以參考下
    2024-01-01
  • 微信QQ的二維碼登錄原理js代碼解析

    微信QQ的二維碼登錄原理js代碼解析

    這篇文章主要大家詳細解析了微信QQ的二維碼登錄原理js代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • js HTML5 Canvas繪制轉盤抽獎

    js HTML5 Canvas繪制轉盤抽獎

    這篇文章主要為大家詳細介紹了js HTML5 Canvas繪制轉盤抽獎,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • javascript瀑布流式圖片懶加載實例

    javascript瀑布流式圖片懶加載實例

    這篇文章主要為大家詳細介紹了javascript瀑布流式圖片懶加載實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 怎樣用JavaScript實現(xiàn)觀察者模式

    怎樣用JavaScript實現(xiàn)觀察者模式

    這篇文章主要介紹了怎樣用JavaScript實現(xiàn)觀察者模式,想學習設計模式的同學,可以參考一下
    2021-04-04
  • big.js與bignumber.js的差異、統(tǒng)一配置與避坑技巧完全指南

    big.js與bignumber.js的差異、統(tǒng)一配置與避坑技巧完全指南

    big.js是一個小巧、快速且易于使用的JavaScript庫,專門用于任意精度的十進制算術運算,這篇文章主要介紹了big.js與bignumber.js的差異、統(tǒng)一配置與避坑技巧完全指南,需要的朋友可以參考下
    2026-01-01
  • javascript 中select框觸發(fā)事件過程的分析

    javascript 中select框觸發(fā)事件過程的分析

    這篇文章主要介紹了javascript 中select框觸發(fā)事件過程的分析的相關資料,這里對select 觸發(fā)過程進行了深入分析,幫助大家理解這部分內容,需要的朋友可以參考下
    2017-08-08
  • JavaScript之自定義類型

    JavaScript之自定義類型

    在JavaScript中,創(chuàng)建一個具有自定義屬性和方法的對象有很多種模式,下面一一進行介紹
    2012-05-05
  • js實現(xiàn)瀏覽器的各種菜單命令比如打印、查看源文件等等

    js實現(xiàn)瀏覽器的各種菜單命令比如打印、查看源文件等等

    瀏覽器的各種菜單命令比如打印、查看源文件、加入收藏等等,這些在js中時完全可以實現(xiàn)的,本文搜集整理了一些,感興趣的朋友可以參考下
    2013-10-10

最新評論

吉木萨尔县| 钟山县| 乌恰县| 威宁| 沐川县| 玛曲县| 昌邑市| 盐源县| 鄂伦春自治旗| 屏南县| 徐闻县| 民和| 鸡西市| 湛江市| 汽车| 虞城县| 纳雍县| 岑溪市| 南木林县| 新余市| 隆昌县| 德化县| 兖州市| 横峰县| 沈阳市| 基隆市| 富源县| 江川县| 成武县| 南陵县| 通化县| 玛沁县| 中宁县| 厦门市| 临江市| 合江县| 五大连池市| 腾冲县| 阳泉市| 富源县| 山阴县|