博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript函数的防抖和节流
阅读量:6621 次
发布时间:2019-06-25

本文共 1360 字,大约阅读时间需要 4 分钟。

防抖

防抖防抖 防止手抖

就是在某段时间内触发多次事件,只执行最后一次。

例如百度搜索联想,只会联想最后输入的字符

function resizeEvent (content) {  console.log(`window`+content)}let event = debounce(resizeEvent, 500)function debounce(func, delay) {  let timeOut = null  return (args) => {    if (timeOut !== null) {      // 清除上一次定时器,重新计时      clearTimeout(timeOut)    }    timeOut = setTimeout(() => {      func(args)    }, delay)  }}// 调整浏览器窗口大小时,触发事件addEventListener('resize', ()=>{event(1)})

应用:

1.search联想,在用户不断输入值的时候,节约请求资源,确保联想正确

2.window resize事件,防抖让其只触发一次

节流

在一段时间内触发多次事件,函数在每一个间隔时间后执行一次。

例如 fps游戏中 一直按着鼠标, 冲锋枪子弹按照一定速度连发

function resizeEvent (content) {  console.log(`window`+content)}let event = throttle(resizeEvent, 500)function throttle(func, delay) {  let last = null  let deferTimer = null  return (args) => {    let now = new Date().getTime()    if (last && now < last + delay) {     // 未到间隔时间,清除定时器      clearTimeout(deferTimer)      deferTimer = setTimeout(()=> {      // 重新新建定时器,等待间隔时间以后置位last,执行功能函数        last = now        func(args)      }, delay)    } else {      // 第一次或者已超过间隔时间      last = now      func(args)    }  }}// 调整浏览器窗口大小时,触发事件addEventListener('resize', ()=>{event(1)})

应用:

1.鼠标不断点击触发某功能,mousedown(单位时间内只触发一次)

2.鼠标不断移动触发某功能,mousemove(单位时间内只触发一次)

总结

防抖和节流

相同点都是为了解决短时间内大量触发某函数而导致的性能问题。

不同点是根据不同的业务需求,实现的原理不同。

 

有问题可以一起探讨,欢迎关注公众号 小覃笔记

转载于:https://www.cnblogs.com/BillyQin/p/9615020.html

你可能感兴趣的文章
Linux ln 软、硬链接命令
查看>>
前端的一些基础知识
查看>>
k8s拾遗 - NodePort Range 设置
查看>>
如何学习 Spring ?学习 Spring 前要学习什么?
查看>>
css动画
查看>>
你的小甜甜,一对一交友源码,快来找我吧
查看>>
LeetCode 96——不同的二叉搜索树
查看>>
2019哪里可以进行高层次人才扶持政策申报?
查看>>
搞懂Runnable Callable Future FutureTask 及应用
查看>>
Win10 环境安装RabbitMQ
查看>>
Java NIO(七)Selector
查看>>
死磕 java同步系列之synchronized解析
查看>>
MirrorSwipeLayout:自定义Layout,仿MIUI滑动返回(已开源)
查看>>
前端面试
查看>>
在MAC上查看自定义的ttf字体图标对应的Unicode编码
查看>>
小程序开发总结
查看>>
重绘与回流
查看>>
kettle变量使用
查看>>
win10系统设置webp文件默认用照片查看器打开的两种方法
查看>>
使用阿里云发送邮件
查看>>