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 相关文章推荐
List Installed Hot Fixes
Jun 12 Javascript
借用Google的Javascript API Loader来加速你的网站
Jan 28 Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 Javascript
JS判断是否360安全浏览器极速内核的方法
Jan 29 Javascript
jquery读取xml文件实现省市县三级联动的方法
May 29 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
Aug 03 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
Aug 06 Javascript
js+css实现select的美化效果
Mar 24 Javascript
jQuery事件绑定用法详解
Sep 08 Javascript
获取JavaScript异步函数的返回值
Dec 21 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
JavaScript 接口原理与用法实例详解
May 12 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中上传大体积文件时需要的设置
2006/10/09 PHP
一些常用的php函数
2006/12/06 PHP
php adodb连接mssql解决乱码问题
2009/06/12 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
PHP Cookie学习笔记
2016/08/23 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python编程之属性和方法实例详解
2015/05/19 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python实现员工管理系统
2018/01/11 Python
python2.7实现爬虫网页数据
2018/05/25 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
教学器材管理制度
2014/01/26 职场文书
工程招投标邀请书
2014/01/30 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
高中运动会广播稿
2015/08/19 职场文书
Android Rxjava3 使用场景详解
2022/04/07 Java/Android