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 DOM学习第八章 表单错误提示
Feb 19 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
js open() 与showModalDialog()方法使用介绍
Sep 10 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
简单了解JavaScript操作XPath的一些基本方法
Jun 03 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
VUE安装使用教程详解
Jun 03 Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
Apr 27 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
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
基于header的一些常用指令详解
2013/06/06 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
javascript 数组的方法集合
2008/06/05 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python实现无证书加密解密实例
2014/10/27 Python
详解Python的单元测试
2015/04/28 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Python 下载及安装详细步骤
2019/11/04 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
售后服务承诺书模板
2014/05/21 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
幼儿园感谢信
2015/01/21 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android