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 获取span标签中的值的代码 支持ie与firefox
Aug 24 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
javascript模拟实现C# String.format函数功能代码
Nov 25 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
Dec 07 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
在vue-cli中组件通信的方法
Dec 16 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
Jul 20 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
php5新改动之短标记启用方法
2008/09/11 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
python使用锁访问共享变量实例解析
2018/02/08 Python
图解Python变量与赋值
2018/04/03 Python
Python subprocess模块常见用法分析
2018/06/12 Python
python 文件查找及内容匹配方法
2018/10/25 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
java判断三位数的实例讲解
2019/06/10 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
韩语专业本科生求职信
2013/10/01 职场文书
承办会议欢迎词
2014/01/17 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
三孔导游词
2015/02/05 职场文书
冰雪公主观后感
2015/06/16 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
mysql幻读详解实例以及解决办法
2022/06/16 MySQL