前端 防抖和節流

在前端開發中,防抖(Debounce)節流(Throttle)是兩種常用的性能優化技術,尤其在處理頻繁觸發的事件時顯得尤為重要。無論是在用戶輸入、窗口調整大小,還是滾動事件中,這兩種技術都可以有效減少函數執行的頻率,從而提升網頁的響應速度和用戶體驗。在本文中,我們將深入探討防抖和節流的原理、應用場景及其實現方法,幫助開發者更好地掌控這兩種優化手段。

?現在好啦,js-tool-big-box工具包提供出了這個兩個方法,并有專門的團隊進行維護公有方法,大家可以直接調用,減少了自己的代碼量,可以有更多的時間去專注于自己的業務開發。

1 安裝和引入

執行安裝命令

npm i?js-tool-big-box

項目中引入(Vue項目),工具包對外提供了?eventBox 對象,可以用來調用防抖和節流的方法。

import { eventBox } from 'js-tool-big-box';

2 防抖的調用學習?

防抖呢,比如說一個人頻繁在輸入框輸入值,然后我們需要去判斷它輸入的手機號對不對,郵箱對不對,后者拿著這個輸入值去發送Ajax請求去查東西,肯定不能輸入一個字符就趕緊拿著去查,對吧,所以就需要防抖。

防抖呢就是設定一個時間值,比如2秒,你在這2秒內有操作,就取消,一直到2秒后沒有操作了,再去執行任務。

比如等電梯,早上著急打卡的同學們,越著急,越有人按電梯,有人按一下就得等5秒,除非有人急的不行了,按了關閉按鈕。所以,等5秒,沒人上了,電梯關閉,開始往上走。如果第4秒又有人按按鈕,他進來了,那么就再等5秒吧。

<template><div><input @keyup="handleChange" v-model="inputVal" /></div>
</template><script>
import { eventBox } from 'js-tool-big-box';export default {name: 'dj',data () {return {inputVal: ''}},created() {this.myDebounce = eventBox.debounce((data) => {this.sendAjax(data);}, 2000);},methods: {handleChange(event) {const val = event.target.value;this.myDebounce(val);},sendAjax(data) {console.log('發送時間::', new Date().getTime());console.log('發送請求:', data);},}
}
</script>

在截圖中,我分別輸入了1? ?222 333 ,其中222和333是頻繁輸入的,然后只調用了一次

3 節流的調用學習

節流呢,就像坐火車,人來人往的車站,川流不息的人群,但火車有時刻表,隔多久一趟車。下拉刷新就正好用到這個地方。

<script>
import { eventBox } from 'js-tool-big-box';export default {name: 'dj',data () {return {inputVal: ''}},created() {this.myThrottle = eventBox.throttle((data) => {this.sendAjax(data);}, 2000);},methods: {handleChange(event) {const val = event.target.value;this.myThrottle(val);},sendAjax(data) {console.log('發送時間::', new Date().getTime());console.log('發送請求:', data);},}
}
</script>

看這個時間戳打印的,我一直在頻繁輸入,然后他隔一段時間才執行一次,不錯不錯,節流了。

4 使用方法總結?

方法名返回值入參
debounce傳入的執行方法

第一個參數必填,表示需要執行的方法,

第二個參數非必填,表示需要延遲執行的時間,可不傳,默認300毫秒

throttle傳入的執行方法

第一個參數必填,表示需要執行的方法,

第二個參數非必填,表示需要延遲執行的時間,可不傳,默認300毫秒

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14931.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3D 生成重建011-LucidDreamer 優化SDS過平滑結果的一種探索

3D 生成重建011-LucidDreamer 優化SDS過平滑結果的一種探索 文章目錄 0論文工作1論文方法2 效果 0論文工作 文本到3D生成的最新進展標志著生成模型的一個重要里程碑&#xff0c;為在各種現實場景中創建富有想象力的3D資產打開了新的可能性。雖然最近在文本到3D生成方面的進展…

自建公式,VBA在Excel中解一元一次方程

自建公式,VBA在Excel中解一元一次方程 文章目錄 前言一、運行效果圖二、操作思路三、代碼1.去除方程中未知數,將未知數轉為“*0”2.計算方程中常數3.計算方程中未知數的系數一,先將未知數替換成“*1”4.計算方程中未知數的系數二5.計算方程得數前言 小學必考內容:一元一次…

掌握Python基本語法的終極指南【基本語法部分】

一、基本語法部分 1.簡單數據類型 1.1字符串類型及操作 字符串訪問&#xff1a; 1.索引訪問 mystr"Hello world" #索引訪問 print(mystr[0]) #H print(mystr[-1]) #d print(mystr[-7]) #o print(mystr[6]) #w 2.切片訪問 [頭下標&#xff1a;尾下標] &#x…

齊護K210系列教程(三十二)_在線模型訓練

在線模型訓練 概念理解準備工作1 采集圖像1.1 圖像要求1.2 使用K210采集圖片 2 標注圖像3 打包數據集4 上傳數據4.1創建項目4.1.1圖像分類創建項目4.1.2圖像檢測創建項目 4.2上傳數據4.2.1分類檢測上傳數據4.2.2圖像檢測上傳數據 5 訓練模型6 部署模型以及測試7 測試效果7.1圖像…

leetcode 152. 乘積最大子數組

. - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 nums &#xff0c;請你找出數組中乘積最大的非空連續 子數組 &#xff08;該子數組中至少包含一個數字&#xff09;&#xff0c;并返回該子數組所對應的乘積。 測試用例的答案是一個 32-位 整數。 示例 1: 輸入…

MongoDB關系處理:優化數據管理、提升性能的最佳實踐

MongoDB 是一種 NoSQL 數據庫&#xff0c;它使用文檔模型來存儲數據&#xff0c;這與關系型數據庫&#xff08;RDBMS&#xff09;有顯著不同。本文將詳細介紹 MongoDB 中的關系處理&#xff0c;包括基本語法、命令、示例、應用場景、注意事項和總結。 基本語法 文檔和集合 M…

30.靜態代碼分析工具clang-tidy

文章目錄 基本介紹安裝clang-tidy使用clang-tidy配置文件和格式文件配置文件格式文件使用配置文件和格式化文件 在代碼中設置排除clang-tidy檢測reference 歡迎訪問個人網絡日志&#x1f339;&#x1f339;知行空間&#x1f339;&#x1f339; 基本介紹 clang-tidy 是一個基于…

JDBC總結

目錄 JDBC(java database connection) JDBC連接數據庫步驟: 1. 在項目中添加jar文件,如圖所示 2.加載驅動類 向數據庫中插入數據代碼示例: 第一種: 第二種: 查詢操作 : 第一種: 第二種: JDBC(java database connection) java數據庫連接.api(應用程序編程接口) ,可…

Java中的垃圾回收機制

在Java編程語言中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;機制是內存管理的一個核心部分。它的主要目標是自動釋放那些不再被程序使用的對象所占用的內存空間&#xff0c;從而防止內存泄漏&#xff0c;并確保程序的穩定運行。下面&#xff0c;我將…

一文講清!傳統企業的進銷存管理難題該怎么解決?

有沒有開源的進銷存軟件啊&#xff1f; 確實&#xff0c;市面上存在不少開源的進銷存軟件。但客觀地講&#xff0c;開源軟件往往面臨著安全隱患&#xff0c;因為代碼公開&#xff0c;容易成為黑客攻擊的目標。此外&#xff0c;開源軟件的功能模塊通常較為固定&#xff0c;難以…

初出茅廬的小李博客之MQTT.fx客戶端接入EMQX Platform

EMQX Platform 概覽 EMQX Platform 是 EMQ 推出的一款面向物聯網領域的 MQTT 消息中間件產品。作為全球首個 MQTT 5.0 消息云服務&#xff0c;EMQX Platform 提供了一站式運維代管、獨有隔離環境的 MQTT 消息服務。在萬物互聯的時代&#xff0c;EMQX Platform 可以幫助您快速構…

python數據類型之列表

目錄 1.創建列表 2.列表基礎操作 常用操作 對列表元素順序隨機打亂 列表下標和切片 字符串分割為列表 列表位移 列表切片替換 3.列表內置方法 4.列表排序 簡單排序 使用key參數按指定規則排序 二維列表排序 自定義排序規則函數 5.列表排序算法 選擇排序 柱狀圖…

C# 利用Xejen框架源碼,我們來開發一個基于Dapper技術的數據庫通用的幫助訪問類,通過Dapper的增刪改查,可以訪問Sqlite數據庫

Dapper 是一個輕量級的對象關系映射&#xff08;ORM&#xff09;工具&#xff0c;適用于 .NET 平臺。它由 Stack Overflow 團隊開發&#xff0c;旨在提供簡單、高效的數據訪問功能。與其他重量級 ORM&#xff08;如 Entity Framework&#xff09;相比&#xff0c;Dapper 更加輕…

基于Python圖像增強算法:低光增強+圖像修復+超分辨率重建

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 在圖像處理與計算機視覺領域&#xff0c;圖像增強技術是提高圖像質量和可用性的重要手段。在實…

單片機io擴展

輸入輸出擴展 i2c擴展 方案1:PCF8575 PCF8575雙向IO口擴展模塊 16位輸入輸出I2C通訊 單片機級聯擴展板 方案2&#xff1a;PCA955A 輸出擴展 74HC595 io口擴展模塊輸出口擴展 參考鏈接 中微愛芯發[2004] 1號           簽發人&#xff1a; (szlcsc.com)https://…

? Vscode和Idea都可以使用的-AI插件(官方-百度出的)

? Vscode和Idea都可以使用的-AI插件&#xff08;官方-百度出的&#xff09; 最新AI特別火&#xff0c;給大家推薦一下最新出的VScode插件&#xff0c;輔助我們寫代碼&#xff01; 1、下載地址&#xff1a; > https://comate.baidu.com/zh/shopping?inviteCodefkzlak8f …

jmeter中Ultimate Thread Group設計梯度壓測場景

Ultimate Thread Group Ultimate Thread Group 線程組是模擬波浪式壓測或者階梯式負載壓測 1、Start Threads Count&#xff1a;線程數量 2、Initial Delay&#xff0c;sec&#xff1a;每組開始添加到測試執行之前的延遲&#xff08;xx秒開始啟動線程&#xff09; 3、Startu…

python中的線程并行

文章目錄 1. 單線程2. 線程池ThreadPoolExecutor 1. 單線程 現在有1154張圖片需要順時針旋轉后保存到本地&#xff0c;一般使用循環1154次處理&#xff0c;具體代碼如下所示&#xff0c;img_paths中存儲1154個圖片路徑&#xff0c;該代碼段耗時約用97ms。 t1time.time() for …

Python筑基之旅-MySQL數據庫(四)

目錄 一、數據表操作 1、新增記錄 1-1、用mysql-connector-python庫 1-2、用PyMySQL庫 1-3、用PeeWee庫 1-4、用SQLAlchemy庫 2、刪除記錄 2-1、用mysql-connector-python庫 2-2、用PyMySQL庫 2-3、用PeeWee庫 2-4、用SQLAlchemy庫 3、修改記錄 3-1、用mysql-conn…

Java輕松轉換Markdown文件到Word和PDF文檔

Markdown 憑借其簡潔易用的特性&#xff0c;成為創建和編輯純文本文檔的常用選擇。但某些時候我們需要更加精致的展示效果&#xff0c;例如在專業分享文檔或打印成離線使用的紙質版時&#xff0c;就需要將Markdown文件以其他固定的文檔格式呈現。通過將 Markdown 轉換為 Word 和…