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

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

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

前言

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

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

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

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

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

import { debounce, throttle } from 'lodash'

(2)隨便寫(xiě)兩個(gè)按鈕

<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)隨便寫(xiě)兩個(gè)方法

/**
 * 防抖·籃球
 */
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è)計(jì)實(shí)現(xiàn)的防抖節(jié)流函數(shù)

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

關(guān)于Vue的防抖節(jié)流函數(shù)庫(kù)或插件已經(jīng)有很多了,這個(gè)可以自己搜一下并看看效果如何。那為何還需要自行設(shè)計(jì)實(shí)現(xiàn)防抖節(jié)流?因?yàn)橛行┬枨笮枰ㄖ苹O(shè)計(jì),同時(shí)你還知道了防抖節(jié)流的基本原理。

(2)防抖節(jié)流具體實(shí)現(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)隨便寫(xiě)兩個(gè)按鈕

<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)隨便寫(xiě)兩個(gè)方法

/**
 * 防抖·籃球
 */
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)

三、運(yùn)行效果

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

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

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

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

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

優(yōu)點(diǎn):

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

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

缺點(diǎn):

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

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

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

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

相關(guān)文章

  • Vue中$router和$route的區(qū)別詳解

    Vue中$router和$route的區(qū)別詳解

    在 Vue.js 中,$router 和 $route 是兩個(gè)常用的對(duì)象,用于處理路由相關(guān)的操作,下面小編就來(lái)和大家介紹一下$router 和 $route 的區(qū)別以及如何使用它們吧
    2023-06-06
  • spring-cloud-stream的手動(dòng)消息確認(rèn)問(wèn)題

    spring-cloud-stream的手動(dòng)消息確認(rèn)問(wèn)題

    這篇文章主要介紹了spring-cloud-stream的手動(dòng)消息確認(rèn)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue.js的復(fù)用組件開(kāi)發(fā)流程完整記錄

    Vue.js的復(fù)用組件開(kāi)發(fā)流程完整記錄

    這篇文章主要給大家介紹了關(guān)于Vue.js的復(fù)用組件開(kāi)發(fā)流程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • vue中g(shù)et方法\post方法如何傳遞數(shù)組參數(shù)詳解

    vue中g(shù)et方法\post方法如何傳遞數(shù)組參數(shù)詳解

    在前后端交互的時(shí)候,有時(shí)候需要通過(guò)get或者delete傳遞一個(gè)數(shù)組給后臺(tái),下面下面這篇文章主要給大家介紹了關(guān)于vue中g(shù)et方法\post方法如何傳遞數(shù)組參數(shù),文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • vue在頁(yè)面和方法中如何通過(guò)遍歷對(duì)象獲取對(duì)象的鍵(key)和值(value)

    vue在頁(yè)面和方法中如何通過(guò)遍歷對(duì)象獲取對(duì)象的鍵(key)和值(value)

    這篇文章主要介紹了vue在頁(yè)面和方法中如何通過(guò)遍歷對(duì)象獲取對(duì)象的鍵(key)和值(value)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue+antd實(shí)現(xiàn)折疊與展開(kāi)組件

    vue+antd實(shí)現(xiàn)折疊與展開(kāi)組件

    這篇文章主要為大家詳細(xì)介紹了vue+antd實(shí)現(xiàn)折疊與展開(kāi)組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Vue3中的onMounted詳解與使用方法詳解

    Vue3中的onMounted詳解與使用方法詳解

    這篇文章主要介紹了Vue3中的onMounted生命周期鉤子,它在組件掛載到DOM后執(zhí)行代碼,onMounted只調(diào)用一次,適合進(jìn)行異步操作、DOM操作和事件監(jiān)聽(tīng),在使用時(shí)需要注意組件銷(xiāo)毀和響應(yīng)式數(shù)據(jù)的管理,需要的朋友可以參考下
    2024-11-11
  • uniapp 拖拽圖片排序功能實(shí)現(xiàn) 類(lèi)似于微信朋友圈效果

    uniapp 拖拽圖片排序功能實(shí)現(xiàn) 類(lèi)似于微信朋友圈效果

    這篇文章主要介紹了uniapp 拖拽圖片排序功能實(shí)現(xiàn)類(lèi)似于微信朋友圈,一部分是拖拽的放大做小,xy位置判定,圖片數(shù)組的插入排序,另一部分是上傳加號(hào)圖片的?定位? 動(dòng)態(tài)計(jì)算分為幾列,每一個(gè)圖片大小的位置?絕對(duì)定位的計(jì)算,需要的朋友可以參考下
    2024-07-07
  • 使用Vue3生成二維碼和條形碼詳細(xì)圖文教程

    使用Vue3生成二維碼和條形碼詳細(xì)圖文教程

    在Vue項(xiàng)目和微信小程序中生成二維碼和條形碼是一個(gè)常見(jiàn)的需求,主要用于分享、產(chǎn)品識(shí)別等場(chǎng)景,這篇文章主要給大家介紹了關(guān)于使用Vue3生成二維碼和條形碼的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • 一文帶你深入理解Vue3中Composition API的使用

    一文帶你深入理解Vue3中Composition API的使用

    Composition API 是 Vue 3 中的一項(xiàng)強(qiáng)大功能,它改進(jìn)了代碼組織和重用,使得構(gòu)建組件更加靈活和可維護(hù),本文我們將深入探討 Composition API 的各個(gè)方面,希望對(duì)大家有所幫助
    2023-10-10

最新評(píng)論

原阳县| 全州县| 宁津县| 岳普湖县| 灵台县| 南开区| 镇雄县| 鹿泉市| 福海县| 乌兰县| 亚东县| 临澧县| 镇江市| 阜平县| 无极县| 岳普湖县| 和硕县| 象州县| 溧阳市| 天津市| 建水县| 浦北县| 南汇区| 玉树县| 乐平市| 霍城县| 盖州市| 阳山县| 怀柔区| 建宁县| 永泰县| 林周县| 淮滨县| 龙川县| 湟源县| 太谷县| 栾川县| 九龙坡区| 永济市| 池州市| 黄石市|