概念

防抖(debounce)

当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时

节流(throttle)

当持续触发事件时,保证在一定时间内只调用一次事件处理函数,意思就是说,假设一个用户一直触发这个函数,且每次触发小于既定值,函数节流会每隔这个时间调用一次

区别

防抖是将多次执行变为最后一次执行
节流是将多次执行变为每隔一段时间执行

Java实现

防抖(debounce)

public class DebounceTask {private Timer timer;private Long delay;private Runnable runnable;public DebounceTask(Runnable runnable,  Long delay) {this.runnable = runnable;this.delay = delay;}public static DebounceTask build(Runnable runnable, Long delay){return new DebounceTask(runnable, delay);}public void run(){if(timer!=null){timer.cancel();}timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {timer=null;runnable.run();}}, delay);}
}

节流(throttle)

public class ThrottleTask {private Timer timer;private Long delay;private Runnable runnable;private boolean needWait=false;public ThrottleTask(Runnable runnable,  Long delay) {this.runnable = runnable;this.delay = delay;this.timer = new Timer();}public static ThrottleTask build(Runnable runnable, Long delay){return new ThrottleTask(runnable, delay);}public void run(){if(!needWait){needWait=true;timer.schedule(new TimerTask() {@Overridepublic void run() {needWait=false;runnable.run();}}, delay);}}
}

测试

防抖(debounce)

DebounceTask task = DebounceTask.build(new Runnable() {@Overridepublic void run() {System.out.println("do task: "+System.currentTimeMillis());}
},1000L);
long delay = 100;
while (true){System.out.println("call task: "+System.currentTimeMillis());task.run();delay+=100;try {Thread.sleep(delay);} catch (InterruptedException e) {e.printStackTrace();}
}

节流(throttle)

ThrottleTask task = ThrottleTask.build(new Runnable() {@Overridepublic void run() {System.out.println("do task: "+System.currentTimeMillis());}
},1000L);
while (true){System.out.println("call task: "+System.currentTimeMillis());task.run();try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}
}

Java版的防抖(debounce)和节流(throttle)相关推荐

  1. 防抖debounce和节流throttle

    大纲 一.出现缘由 二.什么是防抖debounce和节流throttle 三.应用场景 3.1防抖 3.2节流 一.出现缘由 前端开发中,有一部分用户行为会频繁触发事件,而对于DOM操作,资源加载等耗 ...

  2. 函数防抖(debounce)和节流(throttle)在H5编辑器项目中的应用

    函数防抖(debounce)和节流(throttle)在H5编辑器项目中的应用 文章目录 函数防抖(debounce)和节流(throttle)在H5编辑器项目中的应用 1. 为什么要防抖节流 1.1 ...

  3. 探究防抖(debounce)和节流(throttle)

    本文来自我的博客,欢迎大家去GitHub上star我的博客 本文从防抖和节流出发,分析它们的特性,并拓展一种特殊的节流方式requestAnimationFrame,最后对lodash中的deboun ...

  4. 函数防抖(debounce)和节流(throttle)以及lodash的debounce源码赏析

    函数节流和去抖的出现场景,一般都伴随着客户端 DOM 的事件监听.比如scroll resize等事件,这些事件在某些场景触发非常频繁. 比如,实现一个原生的拖拽功能(不能用 H5 Drag& ...

  5. 手写防抖(debounce)和节流(throttle)

    目录 测试代码 防抖(debounce) 基本功能实现 添加参数及this指向功能 第一次立即执行功能 取消功能 节流(throttle) 基本功能实现 增加this执向 最后一次在禁止时间段内是否执 ...

  6. 函数防抖debounce和节流throttle

    debounce 函数防抖 1.什么是函数防抖 函数防抖是优化高频率执行 js 代码的一种手段 可以让被调用的函数在一次连续的高频率操作过程中只被调用一次 2.函数防抖的作用 减少代码执行次数,提升网 ...

  7. 防抖(debounce)和节流(throttle)

    针对一些会频繁触发的事件如scroll.resize,如果正常绑定事件处理函数的话,有可能在很短的时间内多次连续触发事件,十分影响性能.防抖和节流就是针对响应跟不上触发频率这类问题的两种解决方案 因此 ...

  8. 防抖(debounce) 和 节流(throttling)

    防抖和节流是针对响应跟不上触发频率这类问题的两种解决方案. 在给DOM绑定事件时,有些事件我们是无法控制触发频率的. 如鼠标移动事件onmousemove, 滚动滚动条事件onscroll,窗口大小改 ...

  9. 防抖(debounce) 和 节流(throttling)的封装使用-最终发布npm

    函数的防抖节流 前言 防抖函数 防抖函数(雏形) 防抖函数1.0(使用了闭包) 防抖函数2.0(此版本开始才称得上是封装) 防抖函数3.0(希望第一次点击就立即触发) 防抖函数4.0(解决this指向 ...

最新文章

  1. Azure SQL Database (19) Stretch Database 概览
  2. python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了...
  3. 常见的误解:这会创建多少个对象?
  4. 中小企业文件、打印解决方案
  5. 甘肃省事业单位公考招聘考试权威复习资料---GIS专业综合复习题(一)
  6. getParameterValues和getParameter的区别
  7. 禁用驱动数字签名验证
  8. 什么软件能测试显卡功耗,测试方案及测试平台
  9. 《按自己的意愿过一生》读书笔记
  10. 计算机的配件知识,最基本的入门知识:电脑由哪些部件组成?
  11. Linux Shell脚本中压缩包解压到目标目录下
  12. itext7读取pdf 中文_itext7史上最全实战总结
  13. uos操作系统安装mysql
  14. 纵即逝的烟花蓄势于纸
  15. Python开发, 恶意病毒扫描
  16. thunderbird 雷鸟中文版下载,安装
  17. c语言源码什么意思,请问C语言源代码什么意思?
  18. 网站关键词排名怎么才能提高?
  19. 使用jstack(jstack是用于调试线程间的关系,解决阻塞,锁等问题)定位由死循环引起的cpu负载飙高或者死锁
  20. JAVA导入大量数据的Excel,如何分块读取并避免内存溢出?

热门文章

  1. conda环境下如何升级python?
  2. R语言实战应用精讲50篇(二十五)-时空数据统计模型:确定性预测模型
  3. Python数据可视化实战应用万字长文从入门到高端(建议收藏)
  4. 对梯度下降法的简单理解
  5. Cracer渗透视频课程学习笔记——基础知识(1)
  6. 机器学习业务实践之路-李博-专题视频课程
  7. 带你看android的内心世界
  8. 消灭 Java 代码的“坏味道”【转】
  9. java如何实现python的urllib.quote(str,safe='/')
  10. 关于架构的优化和设计,架构师必须悟透的事情