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 相关文章推荐
从sohu弄下来的flash中展示图片的代码
Apr 27 Javascript
Javascript计算时间差的函数分享
Jul 04 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
在Python中使用glob模块查找文件路径的方法
Jun 17 Javascript
jqGrid中文文档之选项设置
Dec 02 Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 Javascript
Bootstrap按钮组简单实现代码
Mar 06 Javascript
ES6之模版字符串的具体使用
May 17 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 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语法(5)
2006/10/09 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
js 小贴士一星期合集
2010/04/07 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
商业项目策划方案
2014/06/05 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
运动会横幅标语
2014/06/17 职场文书
2015政治思想表现评语
2015/03/25 职场文书
学历证明样本
2015/06/16 职场文书
Redis+AOP+自定义注解实现限流
2022/06/28 Redis