JavaScript中的节流和防抖
节流: 在规定时间内,多次触发事件,但是只执行一次
场景:输入框搜索,地图渲染
优化用户体验
/**
* 节流 规定时间内不管触发多少次只执行一次
* @param {Function} fn 实际要执行的业务逻辑函数
* @param {Number} duration 在规定时间段内,业务逻辑函数只能执行一次,单位毫秒
*/
function throttle(fn, duration) {
let prev = Date.now(), timerid = null
return function() {
let now = Date.now()
let args = arguments
clearTimeout(timerid) // 一定要提前清除定时器,因为可以 else 分支执行后,设置了一个定时器,如果第二次触发满足 if 条件,则总共会执行两次
if ((now - prev) >= duration) { // 到了预定时间,执行设定函数
fn.apply(this, args)
prev = now
} else { // 没到预定时机,但是事件被触发了,重新起一个定时器
timerid = setTimeout(() => { // 这里保证了最少执行一次,否则达不到 if 条件,函数一次都不会执行
prev = now
fn.apply(this, args)
}, duration)
}
}
}
防抖:多次触发事件,以最后一次触发时机开始,延迟规定时间执行
场景:浏览器滚动时加载图片,点击提交按钮
优化性能
/**
* 防抖 不管事件触发多少次,以最后一次触发时机为准,延迟设定时间执行
* @param {Function} fn 实际要执行的业务逻辑函数
* @param {Number} duration 在规定时间段后,业务逻辑函数开始执行,单位毫秒
*/
function debounce(fn, duration) {
let timerid = null
return function() {
clearTimeout(timerid) // 每次触发都需要清除定时器,并且重新起一个定时器
timerid = setTimeout(() => {
fn.call(this, arguments)
}, duration)
}
}
有时候节流和防抖可以交替使用,看业务需求,并不是那么死板
JavaScript中的节流和防抖的更多相关文章
- JavaScript 中函数节流和函数去抖的讲解
JavaScript 中函数节流和函数去抖的讲解 我们都知道频繁触发执行一段js逻辑代码对性能会有很大的影响,尤其是在做一些效果实现方面,或者逻辑中需要进行后端请求,更是会导致卡顿,效果失效等结果,所 ...
- JavaScript中函数节流的理解
函数节流的原理 函数节流,就是对会频繁触发的函数事件做一些限制,让这些函数可以在每隔一定的时间或者每次满足一定的条件下再触发.一般我们会给他起一个名字throttle.也就是节流的意思.一般这样的函数 ...
- [JavaScript] 节流(throttle)-防抖(debounce) 不懵圈指北
网易云课堂 > 微专业 > 前端高级开发工程师 01.前端高级-JavaScript进阶 > 3.函数式编程 Underscore源码分析 > 3.4.3 throttle 与 ...
- 来聊聊JavaScript中的防抖和节流
目录 JavaScript防抖和节流 问题还原 防抖 什么是防抖 使用场景 节流 什么是节流 使用场景 JavaScript防抖和节流 问题还原 我们先来通过代码把常见的问题还原: <html& ...
- JavaScript 中的防抖和节流
什么是防抖 函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时.如下图,持续触发 scrol ...
- JavaScript中函数防抖、节流
码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14565642.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...
- javaScript 节流与防抖
首先 我们要知道 节流与防抖可以干什么. 优化网络请求性能——节流 优化页面请求性能——防抖 举两个简单的小例子: 节流: 例如 有些购物页面,会有一些让你抢购的活动,到点的时候,需要你快速的点某个按 ...
- JavaScript节流与防抖函数封装
js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...
- JS节流和防抖
事件的触发权很多时候都属于用户,有些情况下会产生问题: 向后台发送数据,用户频繁触发,对服务器造成压力 一些浏览器事件:window.onresize.window.mousemove等,触发的频率非 ...
随机推荐
- goto和函数调用
goto: 函数调用: 作用域 label在函数内定义,所以函数内 跳转操作 无条件 调用时先保存现场,复制实际参数,然后才是跳转 生存期 由于不是左值,它没有生存期,仅在编译期有意义. ...
- Python内部变量与外部变量
def outer(): x = 'outer x' def inner(): x = 'inner x' print(x) inner() print(x) # 这里的`x`与`x = 'outer ...
- leetcode-168周赛-1298-你能从盒子中获得的最大糖果数
题目描述: 方法一:bfs class Solution: def maxCandies(self, status: List[int], candies: List[int], keys: List ...
- 基础(三):yum(RedHat系列)和apt-get(Debian系列 )用法及区别
文章转载来自:http://blog.csdn.net/chengly0129/article/details/70169760 一般来说著名的linux系统基本上分两大类:1.RedHat系列:Re ...
- Vue2.0源码思维导图-------------Vue 构造函数、原型、静态属性和方法
已经用vue有一段时间了,最近花一些时间去阅读Vue源码,看源码的同时便于理解,会用工具画下结构图. 今天把最近看到总结的结构图分享出来.希望可以帮助和其他同学一起进步.当然里边可能存在一些疏漏的,或 ...
- BZOJ 1303: [CQOI2009]中位数图(思路题)
传送门 解题思路 比较好想的思路题.首先肯定要把原序列转化一下,大于\(k\)的变成\(1\),小于\(k\)的变成\(-1\),然后求一个前缀和,还要用\(cnt[]\)记录一下前缀和每个数出现了几 ...
- windows10安装sqlmap与简单配置
一.获取sqlmap压缩包: 注意:安装sqlmap之前,先确认已有python2.x环境 获取sqlmap压缩包并解压 下载地址:http://sqlmap.org/ 二.将解压缩的文件放在pyth ...
- try-with-resources 让java资源关闭代码更简洁
一.JDK7的资源关闭方式优化 1 try-with-resource语法 在JDK7以前,Java没有自动关闭外部资源的语法特性,直到JDK7中新增了try-with-resource语法,才实现了 ...
- 剑指offer——73股票的最大利润
题目: 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}.如果我们能在价格为5 ...
- JUC源码分析-线程池篇(一):ThreadPoolExecutor
JUC源码分析-线程池篇(一):ThreadPoolExecutor Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池 ...