欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3項目中使用防抖節(jié)流的實現(xiàn)示例

 更新時間:2024年04月14日 15:55:16   作者:帥龍之龍  
防抖節(jié)流是可以說是一種優(yōu)化組件性能的技巧,可以有效減少組件中的渲染次數(shù)和計算量,本文主要介紹了Vue3項目中使用防抖節(jié)流的實現(xiàn)示例,感興趣的可以了解一下

前言

防抖節(jié)流是可以說是一種優(yōu)化組件性能的技巧,可以有效減少組件中的渲染次數(shù)和計算量,從而提高組件的響應(yīng)速度和用戶體驗。在Vue3中可以使用`lodash`庫中的`debounce`和`throttle`函數(shù)來分別實現(xiàn)防抖和節(jié)流。當(dāng)然也可以自行設(shè)計實現(xiàn)防抖節(jié)流函數(shù),調(diào)用方式都差不多。

防抖:在一定時間內(nèi),多次觸發(fā)同一事件,只執(zhí)行最后一次操作,常用于輸入框搜索、滾動加載等場景。

節(jié)流:在一定時間內(nèi),多次觸發(fā)同一事件,限制函數(shù)執(zhí)行頻率,防止函數(shù)被頻繁調(diào)用,從而提高頁面性能。

一、基于Vue3內(nèi)置的lodash函數(shù)庫實現(xiàn)防抖節(jié)流

(1)首先導(dǎo)入lodash函數(shù)庫的防抖和節(jié)流方法

import { debounce, throttle } from 'lodash'

(2)隨便寫兩個按鈕

<el-button size="small" type="primary" @click="handleDebounceClick($event)">
  <el-icon :size="16" style="margin-right: 5px;"><Basketball /></el-icon>
  <small>防抖·籃球</small>
</el-button>

<el-button size="small" type="primary" @click="handleThrottleClick($event)">
  <el-icon :size="16" style="margin-right: 5px;"><Football /></el-icon>
  <small>節(jié)流·足球</small>
</el-button>

(3)隨便寫兩個方法

/**
 * 防抖·籃球
 */
const handleDebounceClick = debounce((evt) => {
  // ---- ^ 業(yè)務(wù)邏輯 ----
  // 定義fn方法
  const fn = (evt) => {
    console.log('debounce =>', evt)
  }
  // 調(diào)用fn方法
  fn(evt)
  // ---- / 業(yè)務(wù)邏輯 ----
}, 1000)

/**
 * 節(jié)流·足球
 */
const handleThrottleClick = throttle((evt) => {
  // ---- ^ 業(yè)務(wù)邏輯 ----
  // 定義fn方法
  const fn = (evt) => {
    console.log('throttle =>', evt)
  }
  // 調(diào)用fn方法
  fn(evt)
  // ---- / 業(yè)務(wù)邏輯 ----
}, 1000)

二、自行設(shè)計實現(xiàn)的防抖節(jié)流函數(shù)

(1)自行設(shè)計實現(xiàn)防抖節(jié)流的好處

關(guān)于Vue的防抖節(jié)流函數(shù)庫或插件已經(jīng)有很多了,這個可以自己搜一下并看看效果如何。那為何還需要自行設(shè)計實現(xiàn)防抖節(jié)流?因為有些需求需要定制化設(shè)計,同時你還知道了防抖節(jié)流的基本原理。

(2)防抖節(jié)流具體實現(xiàn)

/**
 * 防抖
 */
const debounce = (fn, time) => {
  let timer = null
  return (...args) => {
    const context = this
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn.call(context, ...args)
    }, time)
  }
}

/**
 * 節(jié)流
 */
const throttle = (fn, time) => {
  let activeTime = null
  return (...args) => {
    const context = this
    const current = Date.now()
    if (current - activeTime >= time) {
      fn.call(context, ...args)
      activeTime = Date.now()
    }
  }
}

(2)隨便寫兩個按鈕

<el-button size="small" type="primary" @click="handleDebounceClick($event, '你好')">
  <el-icon :size="16" style="margin-right: 5px;"><Basketball /></el-icon>
  <small>防抖·籃球</small>
</el-button>

<el-button size="small" type="primary" @click="handleThrottleClick($event, '世界')">
  <el-icon :size="16" style="margin-right: 5px;"><Football /></el-icon>
  <small>節(jié)流·足球</small>
</el-button>

(3)隨便寫兩個方法

/**
 * 防抖·籃球
 */
const handleDebounceClick = debounce((evt, str) => {
  // ---- ^ 業(yè)務(wù)邏輯 ----
  // 定義fn方法
  const fn = (evt) => {
    console.log('debounce =>', evt, str)
  }
  // 調(diào)用fn方法
  fn(evt)
  // ---- / 業(yè)務(wù)邏輯 ----
}, 1000)

/**
 * 節(jié)流·足球
 */
const handleThrottleClick = throttle((evt, str) => {
  // ---- ^ 業(yè)務(wù)邏輯 ----
  // 定義fn方法
  const fn = (evt) => {
    console.log('throttle =>', evt, str)
  }
  // 調(diào)用fn方法
  fn(evt)
  // ---- / 業(yè)務(wù)邏輯 ----
}, 1000)

三、運行效果

極致防抖和節(jié)流在以下場景中可以發(fā)揮作用:

1. 表單輸入:
當(dāng)用戶在輸入框中連續(xù)輸入時,可以使用極致防抖來延遲觸發(fā)輸入事件的處理,避免頻繁的計算和請求。

2. 滾動加載:
當(dāng)用戶滾動頁面時,可以使用節(jié)流來限制觸發(fā)滾動事件的頻率,以減少滾動事件的處理次數(shù),提高性能。

3. 頻繁點擊:
當(dāng)用戶頻繁點擊某個按鈕或鏈接時,可以使用極致防抖來確保只有最后一次點擊被處理,避免重復(fù)操作。

4. 鼠標(biāo)移動:
當(dāng)用戶鼠標(biāo)在頁面上移動時,可以使用節(jié)流來限制觸發(fā)鼠標(biāo)移動事件的頻率,以減少事件的處理次數(shù)。

優(yōu)點:

提高性能:極致防抖和節(jié)流可以減少不必要的計算和請求,從而提高頁面的響應(yīng)速度和性能。

  • 減少資源消耗:限制函數(shù)的執(zhí)行頻率可以減少資源的消耗,如網(wǎng)絡(luò)帶寬、CPU計算等。
  • 提升用戶體驗:通過減少不必要的操作和事件處理,可以提升用戶的體驗和滿意度。

缺點:

可能會延遲實際操作:由于極致防抖和節(jié)流會延遲函數(shù)的執(zhí)行,可能會導(dǎo)致用戶在某些情況下感覺到操作的延遲。

  • 需要權(quán)衡延遲時間:選擇合適的延遲時間是一個挑戰(zhàn),如果延遲時間設(shè)置過長,可能會導(dǎo)致用戶體驗不佳;如果設(shè)置過短,可能會導(dǎo)致頻繁的函數(shù)執(zhí)行。

在實際應(yīng)用中,需要根據(jù)具體的場景和需求來選擇使用極致防抖還是節(jié)流,以及適當(dāng)調(diào)整延遲時間。同時,需要注意權(quán)衡延遲時間和用戶體驗之間的平衡,以及對性能的影響。

到此這篇關(guān)于Vue3項目中使用防抖節(jié)流的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Vue3 防抖節(jié)流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對vue中v-if的常見使用方法詳解

    對vue中v-if的常見使用方法詳解

    今天小編就為大家分享一篇對vue中v-if的常見使用方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue實現(xiàn)表單未編輯或未保存離開彈窗提示功能

    vue實現(xiàn)表單未編輯或未保存離開彈窗提示功能

    這篇文章主要介紹了vue實現(xiàn)表單未編輯或未保存離開彈窗提示功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題

    解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題

    今天小編就為大家分享一篇解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue3自定義指令實現(xiàn)按鈕防抖示例詳解

    vue3自定義指令實現(xiàn)按鈕防抖示例詳解

    這篇文章主要為大家介紹了vue3自定義指令實現(xiàn)按鈕防抖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Vue插件之滑動驗證碼

    Vue插件之滑動驗證碼

    這篇文章主要為大家詳細紹介紹了Vue插件之滑動驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 關(guān)于VanCascader默認(rèn)值(地址code轉(zhuǎn)換)

    關(guān)于VanCascader默認(rèn)值(地址code轉(zhuǎn)換)

    這篇文章主要介紹了關(guān)于VanCascader默認(rèn)值(地址code轉(zhuǎn)換),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 在線使用iconfont字體圖標(biāo)的簡單實現(xiàn)

    在線使用iconfont字體圖標(biāo)的簡單實現(xiàn)

    這篇文章主要介紹了在線使用iconfont字體圖標(biāo)的簡單實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Nuxt引入vue-persistedstate以及踩坑記錄

    Nuxt引入vue-persistedstate以及踩坑記錄

    這篇文章主要介紹了Nuxt引入vue-persistedstate以及踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • uniapp嵌套webview無法返回上一級解決方式

    uniapp嵌套webview無法返回上一級解決方式

    uniapp是一款非常強大的跨平臺開發(fā)框架,它可以讓我們只編寫一份代碼,就能在多個平臺上運行,這篇文章主要給大家介紹了關(guān)于uniapp嵌套webview無法返回上一級的解決方式,需要的朋友可以參考下
    2024-05-05
  • Vue讓router-view默認(rèn)顯示頁面操作方法

    Vue讓router-view默認(rèn)顯示頁面操作方法

    一個home頁面,點擊左邊的菜單欄,右邊顯示頁面,因此都知道在右邊放一個router-view然后配置路由即可,然而問題出現(xiàn)在:重新打開的時候,默認(rèn)是白色空的,遇到這樣的問題如何解決呢,下面小編給大家分享Vue讓router-view默認(rèn)顯示頁面操作方法,感興趣的朋友一起看看吧
    2024-03-03

最新評論