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 相关文章推荐
jquery聚焦文本框与扩展文本框聚焦方法
Oct 12 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
Jan 23 Javascript
详解JavaScript中的坐标和距离
May 27 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 Javascript
微信小程序实现吸顶特效
Jan 08 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
Jul 24 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 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 中的str_replace 函数总结
2007/04/27 PHP
php中session定期自动清理的方法
2015/11/12 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
python 生成不重复的随机数的代码
2011/05/15 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
利用Python爬取可用的代理IP
2016/08/18 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
python中for in的用法详解
2020/04/17 Python
python3.5的包存放的具体路径
2020/08/16 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
进修护士自我鉴定
2013/10/14 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
授权委托书
2014/09/17 职场文书
银行贷款委托书范本
2014/10/11 职场文书
青年联谊会致辞
2015/07/31 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL