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 相关文章推荐
nicejforms——美化表单不用愁
Feb 20 Javascript
给Function做的OOP扩展
May 07 Javascript
jQuery中:radio选择器用法实例
Jan 03 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
轻松搞定js表单验证
Oct 13 Javascript
js原生之焦点图转换加定时器实例
Dec 12 Javascript
JavaScript模块化之使用requireJS按需加载
Apr 12 Javascript
vue-cli 组件的导入与使用教程详解
Apr 11 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 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
3.从实例开始
2006/10/09 PHP
php中OR与|| AND与&amp;&amp;的区别总结
2013/10/26 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
python3连接MySQL数据库实例详解
2018/05/24 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
施工材料员岗位职责
2014/02/12 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
《绝招》教学反思
2016/02/20 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
Javascript设计模式之原型模式详细
2021/10/05 Javascript