一個簡單的javascript節流器實現

節流器

javascript的節流器主要用于延緩某些動作的執行,比如ajax請求,如果input框注冊了input事件,那么當用戶輸入時就會持續的觸發這個事件,如果回調函數中持續的通過ajax調用后臺的接口,就會對服務器產生一定壓力。這時就可以考慮采用某種方法來延緩ajax請求,比如可以這么做,當觸發input事件后,延緩0.5s再調用后臺的接口,這樣在一定程度上就可以減輕服務端的壓力。
下面來實現一個簡單的節流器

 1 /**
 2 * 節流器
 3 * @param [function] fn 事件觸發后要調用的函數,也就是要節流的函數
 4 * @param [object]context fn的執行上下文對象,沒有執行對象設為null即可
 5 * @param [number] delay 延緩執行的時間間隔 毫秒
 6 * @param param fn需要的參數
 7 * @return 無
 8 */
 9 function throttle(fn, context, delay, param) {
10   clearTimeout(fn.timeoutId);
11 
12   fn.timeoutId = setTimeout(function () {
13     fn.call(context, param);
14   }, delay);
15 }

?

通過參數注釋和代碼應該能夠大概看明白這個throttle要做的事情:延緩fn的執行,這個通過setTimeout函數來執行即可。
### 使用節流器
使用時也很簡單,將fn、context、delay、params傳入即可:

1 var ajaxFun = function() { // 略 };
2 throttle(ajaxFun, null, 500, someParams);

其實上面的節流器代碼還可以再簡化,不過就沒有上面的健壯了。

1 // 節流器
2 function throttle(fn, delay, param) {
3   setTimeout(function () {
4     fn(param);
5   }, delay);
6 }

這篇文章最初發表在我自己折騰的博客站點上:一個簡單的javascript節流器實現,該博客用了一位前輩開源的源碼,基于thinkjs和vuejs開發,歡迎大家來逛逛。

轉載于:https://www.cnblogs.com/yangtoude/p/a-simple-javascript-throttle.html

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

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

相關文章

一些會用到的知識

為什么80%的碼農都做不了架構師?>>> HtmlAgilityPack 用來解析HTML代碼 microsoft.mshtml CsQuery 解析HTML代碼 轉載于:https://my.oschina.net/uwith/blog/813725

eclipse怎么升級到java ee,如何為Java EE開發人員升級Eclipse?

Is there any non-painful way to upgrade an Eclipse installation? I have tried browsing the eclipse site but I cannot find an useful description.解決方案Add the update URL to your available sites:Window > Preferences > Install/Update > Available S…

LeetCode 7 Reverse Integer(反轉數字)

題目來源:https://leetcode.com/problems/reverse-integer/ Reverse digits of an integer. Example1: x 123, return 321Example2: x -123, return -321 解題思路: 其實這道題看起來非常簡單,要實現也是幾行代碼的事。但是有個小問題容易被…

各種蘊含算法思想的DP - 3

內容中包含 base64string 圖片造成字符過多,拒絕顯示轉載于:https://www.cnblogs.com/cmyg/p/9566723.html

python圖像對比_用python實現對比兩張圖片的不同

from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_location): """ 比較圖片,如果有不同則生成展示不同的圖片 參數一: path_one: 第一張圖片的路徑 參數二: path_two: 第二張圖片的路徑 參數三:…

Kafka 分布式環境搭建

這篇文章將介紹如何搭建kafka環境,我們會從單機版開始,然后逐漸往分布式擴展。單機版的搭建官網上就有,比較容易實現,這里我就簡單介紹下即可,而分布式的搭建官網卻沒有描述,我們最終的目的還是用分布式來解…

Docker Machine搭建并加入節點

對于集群服務器來講,要在每臺機器上手動安裝Docker是一件及其痛苦的事情,還好有Docker Machine這一工具,Docker三劍客中的一角. 一、Docker Machine介紹 這個工具已經出了比較久了,Docker Machine官方介紹:https://doc…

ASPNET5的依賴注入

ASP.NET5設計的時候就是以DI為基礎的,它可以利用內建的框架在Startup類的方法中,把依賴注入進去。應用服務也可以被配置的注入。默認的服務容器提供一些基本的功能,它并不打算代替現代主流的DI框架。 1. 什么是Dependency Injection? DI的概…

java 權限控制 demo_Java-訪問控制權限

Java面向對象-訪問控制權限Java中,可以通過一些Java關鍵字,來設置訪問控制權限;主要有 private(私有), package(包訪問權限),protected(子類訪問權限),public(公共訪問權限)privatepackageprotectedpublic同…

《未來世界的幸存者》筆記

https://ruanyf.github.io/survivor/ 這兩天一直在上下班途中,讀阮一峰的這本書 《未來世界的幸存者》。還是有不少感慨的。做一下記錄。 未來人類社會的形態,將發生顛覆性的變化。舊的社會結構已經在崩潰了,但社會底層的機會變得更少了&…

python類中沒有屬性_如何在python語言中在類中刪除屬性和添加屬性

在python語言中的類,可以使用class定義類,調用__init__方法進行初始化;默認傳入self,可以在后面在添加幾個屬性。可以使用setattr()添加屬性,也可以使用delattr()刪除屬性。下面利用幾個實例說明這兩個方法的用法&…

mysql 數據復制停止工作_linux – Mysql GTID復制停止工作

我在主服務器和從服務器之間設置了mysql gtid復制.有趣的是,我發現復制在幾分鐘后停止工作,我必須使用stop slave并啟動slave來重啟mysql復制.誰能告訴我是什么原因導致這個問題?改變奴隸主:mysql> change master to-> master_host master.com,-&…

python學生管理系統gui版好例子網_python圖書管理系統gui 相關實例(示例源碼)下載 - 好例子網...

開發語言:Python | 大小:19.05M | 發布時間:2019-05-27 | 發布人:李易峰 相關標簽: 立即下載 開發語言:Python | 大小:0.21M | 發布時間:2020-08-23 | 發布人:聶嘉輝 相關…

COM組件的運行機制

COM組件的運行機制  構造一個創建COM組件的最小框架結構    IUnknown *pUnkNULL;    IObject *pObjectNULL;    CoInitialize(NULL);    CoCreateInstance(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IID_IUnknown, (void**)&pUnk);    pUnk->Qu…

申請去國外讀博士

必須要做的事情是: 考過GRE和TOEFL 準備推薦信 個人CV 聯系導師一般就是發郵件 轉載于:https://www.cnblogs.com/zhulinmails/p/5078695.html

動態編譯

下面的demo就涵蓋了動態編譯和運行類的過程 package 動態編譯; import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader; import javax.tools.JavaCompiler;import javax.tools.ToolProvider; public class Demo { public static void main(Stri…

python怎么打開spyder_Python開發環境Spyder安裝方法

Spyder(Scientific PYthon Development EnviRonment)是一個強大的交互式 Python 語言開發環境,提供高級的代碼編輯、交互測試、調試等特性,支持包括 Windows、Linux 和 OS X 系統。 本文在只安裝過python2.7的Win7環境下進行安裝Spyder,其他環…

矩陣、向量求導法則

復雜矩陣問題求導方法:可以從小到大,從scalar到vector再到matrix。 x is a column vector, A is a matrix practice: 轉載于:https://www.cnblogs.com/vincentQin/p/5406010.html

java字符函數_java字符串函數用法匯總

替換字符串中的字符例如有如下x的字符串String x "[kllkklk\kk\kllkk]";要將里面的“kk”替換為,可以使用兩種方法得到相同的結果replace(CharSequence target, CharSequence replacement) —— x.replace("kk", "")replaceAll(Stri…

[Vue]Scoped Css與Css Modules的區別

均為解決CSS全局作用域問題&#xff08;樣式沖突&#xff08;污染&#xff09;&#xff09;的一個解決方案。 1.Scoped CSS 當 <style> 標簽有 scoped 屬性時&#xff0c;相當于在元素中添加了一個唯一屬性用來區分。 <style scoped> .example {color: red; } <…