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 相关文章推荐
javascript内存管理详细解析
Nov 11 Javascript
JS、CSS加载中的小问题探讨
Nov 26 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
Apr 29 Javascript
jQuery中的$.ajax()方法应用
May 06 Javascript
Node.js中的缓冲与流模块详细介绍
Feb 11 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
jQuery内容筛选选择器实例代码
Feb 06 Javascript
微信小程序实现打卡日历功能
Sep 21 Javascript
vue中img src 动态加载本地json的图片路径写法
Apr 25 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
JavaScript实现拖拽盒子效果
Feb 06 Javascript
JavaScript语句错误throw、try及catch实例解析
Aug 18 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
php设计模式小结
2013/02/15 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
javascript 得到变量类型的函数
2010/05/19 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python批量同步web服务器代码核心程序
2014/09/01 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
优秀员工推荐信
2014/05/10 职场文书
新教师培训心得体会
2014/09/02 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
MySQL 数据类型详情
2021/11/11 MySQL
方法汇总:Python 安装第三方库常用
2022/04/26 Python