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之软键盘实现(js源码)
Jan 30 Javascript
js 返回时间戳所对应的具体时间
Jul 20 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
Jan 25 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
js运动应用实例解析
Dec 28 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
node.js-v6新版安装具体步骤(分享)
Sep 06 Javascript
React Native预设占位placeholder的使用
Sep 28 Javascript
Vuejs+vue-router打包+Nginx配置的实例
Sep 20 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
Aug 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中PDO的错误处理
2011/09/04 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
解决vue 表格table列求和的问题
2019/11/06 Javascript
线程和进程的区别及Python代码实例
2015/02/04 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
python tkinter窗口最大化的实现
2019/07/15 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
大宝sod蜜广告词
2014/03/21 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
三人合伙协议书范本
2014/10/29 职场文书
国际贸易实训报告
2014/11/05 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python