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 相关文章推荐
如何实现浏览器上的右键菜单
Jul 10 Javascript
JavaScript prototype属性使用说明
May 13 Javascript
利用jquery操作select下拉列表框的代码
Jun 04 Javascript
Google的跟踪代码 动态加载js代码方法应用
Nov 12 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 Javascript
JS计算网页停留时间代码
Apr 28 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
Bootstrap Table使用整理(五)之分页组合查询
Jun 09 Javascript
ajax请求+vue.js渲染+页面加载的示例
Feb 11 Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 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 URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
基于Python实现的微信好友数据分析
2018/02/26 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
护理自我鉴定范文
2013/10/06 职场文书
二年级体育教学反思
2014/01/15 职场文书
产品质量承诺书
2014/03/27 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
火锅店的活动方案
2014/08/15 职场文书
英文演讲稿开场白
2014/08/25 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
七一活动主持词
2015/06/29 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
logback 实现给变量指定默认值
2021/08/30 Java/Android