JS优化常用片断
2024-08-24 04:53:32
防抖debounce装饰器
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
function debounce(func, delay) {
let isCooldown = false;
return function() {
if (isCooldown) return;
func.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, delay);
};
}
节流throttle装饰器
规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
function throttle(func, delay) { let isThrottled = false,
savedArgs,
savedThis; function wrapper() { if (isThrottled) { // (2)
savedArgs = arguments;
savedThis = this;
return;
} func.apply(this, arguments); // (1) isThrottled = true; setTimeout(function() {
isThrottled = false; // (3)
if (savedArgs) {
wrapper.apply(savedThis, savedArgs);
savedArgs = savedThis = null;
}
}, delay);
} return wrapper;
}
2者区别:
- 函数防抖和函数节流都是防止某一时间频繁触发,但是这两兄弟之间的原理却不一样。
- 函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。
应用场景:
- debounce
- search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
- window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次。
- throttle
- 鼠标不断点击触发,mousedown(单位时间内只触发一次)。
- 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。
参考文档:
最新文章
- 关于QImage提取单色通道方法(vector)
- C#软件设计——小话设计模式原则之:单一职责原则SRP
- 定时任务-在spring中配置quartz
- Dynamics Webservice Call with Credential
- Windows驱动开发(中间层)
- spring mvc注解@RequestParam
- uva 10972 RevolC FaeLoN cdoj 方老师和农场
- opencv 边缘羽化,边缘过渡
- 关于pthread_create未定义的引用的奇葩解决
- 20160212.CCPP体系详解(0022天)
- 大数据征信的应用和启示:ZestFinance的基于大数据的信用评估技术
- kettle基础概念的学习
- 自行搭建私有云kodexplorer
- 基于C#的socket编程的TCP异步实现
- Java Base64位加密和解密(包括其他加密参考)
- luogu P4491 [HAOI2018]染色
- vue工具知识
- 【拓扑 字符串还原 + 线段树维护】奇洛金卡达(father)
- 利用LD_PRELOAD hook代码
- 再学Java 之 Integer 包装类缓存
热门文章
- MYSQL --Subquery returns more than 1 row查询结果多于一行
- Python中使用@的理解
- [终极巨坑]golang+vue开发日记【二】,登陆界面制作(一)
- AOP &; 拦截器
- 2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐
- SQL server字符串分割成表-表分割为字符串
- 使用poi调整字体格式、添加单元格注释、自动调整列宽
- igel udc2 config
- in __init__ self._traceback = tf_stack.extract_stack()的一个原因
- python抓取贝壳房源信息