1. 程式人生 > >節流(Throttling )和防抖(Debouncing )

節流(Throttling )和防抖(Debouncing )

為了區分這兩個思想,最常用的例子就是電梯例子,我們也通過該例子來比較兩個思想。當有很多人用電梯時,我們不能每來一個人,電梯都特意去送這個人一趟。這樣,電梯的執行方式可以有兩種優化思想

debouncing

每上一個人,從這個人開始,指定時間(比如400ms)後電梯關閉開始送人。在程式中,也就是每發生一個事件,從這個事件往後T秒,執行回撥函式。
//實現函式:
	var debounce = function(func, delay) {
		var inDebounce = undefined;
		return function() {
			debugger
			var context = this,
			args = arguments;
			clearTimeout(inDebounce);
			return inDebounce = setTimeout(function() {
				return func.apply(context, args);
			}, delay);
		}
	}
<!-- 呼叫函式 -->
<body>
	<button >click me</button>
</body>
<script>
function aFunction(msg){
		console.log(msg);
	}
	$('button').click(debounce(function() {
		return aFunction('i am message');
	}, 400));
</script>

Throttling 

從上第一個人開始,電梯指定時間迴圈著執行,無論中間是否上人,都是每t秒執行一次。
//實現函式:
	var throttle = function(func, limit) {
		var inThrottle = undefined;
		return function() {
			var args = arguments,
			context = this;
			if (!inThrottle) {
				func.apply(context, args);
				inThrottle = true;
				return setTimeout(function() {
					return inThrottle = false;
				}, limit);
			}
		};
	};

<!-- 呼叫函式 -->
<body>
	<button >click me</button>
</body>
<script>
	function aFunction(msg){
		console.log(msg);
	}
	$('button').click(throttle(function() {
		return aFunction('i am message');
	}, 400));
</script>

相關推薦

節流Throttling Debouncing

為了區分這兩個思想,最常用的例子就是電梯例子,我們也通過該例子來比較兩個思想。當有很多人用電梯時,我們不能每來一個人,電梯都特意去送這個人一趟。這樣,電梯的執行方式可以有兩種優化思想 debouncing 每上一個人,從這個人開始,指定時間(比如400ms)後電梯關閉開始

事件的節流throttledebounce

follow clear blank tlist 參數 -i ava 就會 example 事件的節流(throttle)與防抖(debounce) 有些瀏覽器事件可以在短時間內快速觸發多次,比如調整窗口大小或向下滾動頁面。例如,監聽頁面窗口滾動事件,並且用戶持續快速地向

移動端事件—— 函式函式節流

函式防抖   在對於函式高頻次執行時,只執行一次。   有兩種情況:     1.尾部執行:高頻次觸發時,只執行最後一次     2.頭部執行:高頻次觸發時,只執行第一次   尾部執行實現很簡單,先設一個定時器,一開始觸發的時候我不執行,稍微延遲一會後再執行,當你下次執行時,我把上一次的定時器消失,

移動端事件—— 函式函式節流的封裝

我們瞭解了函式防抖與函式節流的思路後,我們現在來將他們封裝起來,提高程式碼複用性。 今天直接上菜   cb 要處理防抖的函式  time 預設的高頻間隔時間  isStart 是否在頭部執行 函式防抖封裝:呼叫debounce 函式,返回一個處理過防抖的函式 <!DOCTYPE html> &l

“淺入淺出”函式debounce節流(throttle)

函式防抖與節流是日常開發中經常用到的技巧,也是前端面試中的常客,但是發現自己工作一年多了,要麼直接複用已有的程式碼或工具,要麼抄襲《JS高階程式設計》書中所述“函式節流”,(實際上紅寶書上的實現類似是函式防抖而不是函式節流),還沒有認真的總結和親自實現這兩個方法,實在是一件蠻丟臉的事。網上關於這方面的資料簡直

抽象類abstract class接口interface有什麽異同?

否則 繼承 默認 strong 什麽 成員 -s 實例 abstract 相同點: 1.抽象類和接口都不能被實例化,但可以定義抽象類和接口類型的引用。 2.一個類如果繼承了抽象類和接口,必須要對其中的抽象方法全部實現。(接口中方法默認的是public abstract修飾的

同步Synchronous異步Asynchronous

就會 一個 方法調用 這一 開始 訂單 必須 通知 下單 同步和異步通常用來形容一次方法調用。同步方法調用一旦開始,調用者必須等到方法調用返回後,才能繼續後續的行為。異步方法調用更像一個消息的傳遞,一旦開始,方法調用就會立即返回,調用者就可以繼續後續的操作。而異步方法通常會

java String長度與varchar長度匹配理解字符字節長度理解

轉化 筆記 指定 是我 有一個 ati 法語 itl 情況 java String長度與varchar長度匹配理解(字符和字節長度理解) string中的length()長度,返回的是char的數量,每個char可以存儲世界上任何類型的文字和字符,一個char 而

C語言中存儲類別又分為四類:自動auto、靜態static、寄存器的register外部的extern

字符變量 修飾 例如 register ext 進行 適合 sta -- 除法運算中註意: 如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。 取余運算中註意: 該運算只適

SpringMVC中文件的上傳上傳到服務器下載問題--------下載

cat exc stream log trac close pri page fin 一、建立一個簡單的jsp頁面。 我們在建好的jsp的頁面中加入一個超鏈接:<a href="${pageContext.request.contextPath}/down

節流throttledebounce

限制 return str key cut blog 新頁面 apply bounce underscore.js提供了很多很有用的函數,今天想說說其中的兩個。這兩個函數都用於限制函數的執行。 debounce 在解釋這個函數前,我們先從一個例子看下這個函數的使用場景。假設

maven可選依賴Optional Dependencies依賴排除Dependency Exclusions

許可 mave manage spa 兩個 傳遞 方式 mis ont 我們知道,maven的依賴關系是有傳遞性的。如:A-->B,B-->C。但有時候,項目A可能不是必需依賴C,因此需要在項目A中排除對A的依賴。在maven的依賴管理中,有兩種方式可以對依賴關

LeetCode 380. Insert Delete GetRandom O(1) 插入刪除獲得隨機數 常數時間

delet size 利用 eat www. random called ret runtime Design a data structure that supports all following operations in average O(1) time.

UI自動化測試瀏覽器操作及對元素的定位方法xpath定位css定位詳解

cli 刷新 ota api enter 版本 ror apache 窗口 Selenium下的Webdriver工具支持FireFox(geckodriver)、 IE(InternetExplorerDriver)、Chrome(ChromeDriver)、 Opera

Linux運維之道之admin1.4權限歸屬,LADP認證

達內 linux 運維admin admin1.4權限和歸屬:基本權限:基本權限的類別:訪問方式(權限):---讀取:允許查看內容--read (r權限:能夠ls瀏覽此目錄內容)---寫入:允許修改內容--write (w權限:能夠執行rm/mv/cp/mkdir/touch等更

轉發forward重定向redirect的區別

border 新的 狀態 rec nbsp url req red 完成 轉發與重定向的主要區別 轉發 重定向 轉發是服務器行為 重定向是客戶端行為 轉發瀏覽器url不改變 重定向瀏覽器url改變 轉發request請求數據不丟失 重定向request請

js函數節流

doc tle javascrip als fun .get highlight console settime // 函數節流 var canRun = true; document.getElementById("throttle").onscroll = funct

發個無聊時寫的俄羅斯方塊分為SDLQt兩個版本

app deb fcm cnn 無聊 線程 dac tutorial spi 6213-ChineseZodiac(map) 多線程問題 【CF472G】【XSY2112】DesignTutorial壓位 大家都開始C++0x了,我也來湊熱鬧,今天的主題是《調侃rvalue

淺談淺克隆shallow clone 深克隆deep clone

turn ont row 控制臺 cep test 寫入 main supported 區別就在於是否對對象中的引用變量所指向的對象進行拷貝。 1.淺克隆/淺復制/淺拷貝   淺拷貝是指在拷貝對象時,對於基本數據類型的變量會重新復制一份,而對於引用類型的變量只是對引用進行拷

微服務架構 SpringCloudEureka服務註冊服務發現基礎篇

col false -c conf gis 功能 pri desc sch 一:Eureka簡介 Eureka是Spring Cloud Netflix的一個子模塊,也是核心模塊之一。用於雲端服務發現,一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移