Javascript Throttle & Debounce应用介绍


Posted in Javascript onMarch 19, 2013

Throttle
无视一定时间内所有的调用,适合在发生频度比较高的,处理比较重的时候使用。

var throttle = function (func, threshold, alt) { 
var last = Date.now(); 
threshold = threshold || 100; 
return function () { 
var now = Date.now(); 
if (now - last < threshold) { 
if (alt) { 
alt.apply(this, arguments); 
} 
return; 
} 
last = now; 
func.apply(this, arguments); 
}; 
};

Debounce
一定间隔内没有调用时,才开始执行被调用方法。
var debounce = function (func, threshold, execASAP) { 
var timeout = null; 
threshold = threshold || 100; 
return function () { 
var self = this; 
var args = arguments; 
var delayed = function () { 
if (!execASAP) { 
func.apply(self, args); 
} 
timeout = null; 
}; 
if (timeout) { 
clearTimeout(timeout); 
} else if (execASAP) { 
func.apply(self, args); 
} 
timeout = setTimeout(delayed, threshold); 
}; 
};

Test
var test = function (wrapper, threshold) { 
var log = function () { 
console.log(Date.now() - start); 
}; 
var wrapperedFunc = wrapper(log, threshold); 
var start = Date.now(); 
var arr = []; 
for (var i = 0; i < 10; i++) { 
arr.push(wrapperedFunc); 
} 
while(i > 0) { 
var random = Math.random() * 1000; 
console.log('index: ' + i); 
console.log('random: ' + random); 
setTimeout(arr[--i], random); 
} 
}; 
test(debounce, 1000); 
test(throttle, 1000);
Javascript 相关文章推荐
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 Javascript
JavaScript 反科里化 this [译]
Sep 20 Javascript
JS如何判断json是否为空
Jul 06 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
基于JavaScript实现的希尔排序算法分析
Apr 14 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
vue axios 二次封装的示例代码
Dec 08 Javascript
浅析Vue项目中使用keep-Alive步骤
Jul 27 Javascript
JS函数进阶之继承用法实例分析
Jan 15 Javascript
JS猜数字游戏实例讲解
Jun 30 Javascript
JS跨浏览器解析XML应用过程详解
Oct 16 Javascript
JS 实现获取打开一个界面中输入的值
Mar 19 #Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
Mar 18 #Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
Mar 18 #Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
Mar 18 #Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
Mar 18 #Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
Mar 18 #Javascript
JQuery的read函数与js的onload不同方式实现
Mar 18 #Javascript
You might like
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
初学Javascript的一些总结
2008/11/03 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
十一个高级MySql面试题
2014/10/06 面试题
运动会开幕式邀请函
2014/01/22 职场文书
迟到检讨书大全
2014/01/25 职场文书
爱情保证书大全
2014/04/29 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
客户答谢会致辞
2015/01/20 职场文书
商场收银员岗位职责
2015/04/07 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL