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 相关文章推荐
用js实现控制内容的向上向下滚动效果
Jun 26 Javascript
javascript判断用户浏览器插件安装情况的代码
Jan 01 Javascript
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
Nov 01 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 Javascript
vue项目常用组件和框架结构介绍
Dec 24 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
vue实现路由监听和参数监听
Oct 29 Javascript
vue+AI智能机器人回复功能实现
Jul 16 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 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
PHP parse_url 一个好用的函数
2009/10/03 PHP
php之curl设置超时实例
2014/11/03 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
js查找父节点的简单方法
2008/06/28 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
js实现点击生成随机div
2020/01/16 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
python查询mysql,返回json的实例
2018/03/26 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
Python中print函数简单使用总结
2019/08/05 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python