是什么

防抖和节流两者类似【但并不一样】是用来控制某一函数在特定时间内执行次数的技术点。

什么时候重要

在给Dom绑定事件的时候显得尤为重要,因为相当于在事件函数和Dom之间加了一层控制层

为什么重要

因为有时候我们无法控制DOM事件的触发频率,因为它是变化的。举个例子,scroll事件,当你用触控板,鼠标滚轮,或者拖动滚动条的时候,scroll事件大概每秒会触发30次,或者更多次。但是当你在移动设备上滚动屏幕时,这个事件有可能每秒触发100次 ,甚至更多。

防抖 Debounce

防抖这个技术点允许我们将多个相似的调用分成一组,或者可以理解为多个相同的事件最后只执行一次。

Raw events 原始事件有可能触发多次,Debouce 后的事件,只触发一次。假设你在一个电梯中,电梯门即将关闭,这时突然又有一个人要进来,电梯并没有上升,而是又打开了门,电梯延迟了它上升的这个动作,但是运送了更多的人,这样就相当于优化了资源。

简单实现

//防抖debounce代码:function debounce(fn) {    let timeout = null; // 创建一个标记用来存放定时器的返回值    return function () {        // 每当用户输入的时候把前一个 setTimeout clear 掉        clearTimeout(timeout);         // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数        timeout = setTimeout(() => {            fn.apply(this, arguments);        }, 500);    };}// 处理函数function handle() {    console.log(Math.random());}// 滚动事件window.addEventListener('scroll', debounce(handle));

节流

节流是限制函数在某段时间内只能执行一次,或者说每隔一段时间执行一次。其跟防抖的主要区别在于 保证了函数是有规律的执行,每xx毫秒执行一次。

节流函数的实现原理是,将即将被执行的函数用定时器延时一段时间后执行。如果本次延时执行还没有完成,则忽略调用函数的请求。节流函数接受两个参数,第一个是 需要被延时执行的函数,第二个是需要延迟的时间。

var throttle = function(fn,interval){  var __self = fn,timer,firstTime=true;  return function(){    var args = arguments,        __me = this;        // 如果是第一次执行,则无需延迟       if(firstTime){          __self.apply(__me,args); // 执行函数fn          return firstTime = false;      //  设置firstTime = false                           }       if(timer){  // 如果定时器还在,说明前一次延迟执行还没有完成         return false;       }       timer = setTimeout(function(){         clearTimeout(timer);         timer = null;         __self.apply(__me,args);       },interval || 500)  }}window.onresize = throttle(function(){  console.log('test')},1000);

一个可以区分两者的场景  

无限滚动加载

当页面滚动到底部的时候,需要取判断页面距离底部的距离去判断是否需要发送请求获取数据。这个时候用防抖(debounce)就不合适了,因为它只在停止滚动的时候触发。这个时候使用节流(throttle)就可以随时的获取页面距离底部的距离,来判断是否需要发送请求,获取更多的数据。

相关库

  • lodash

  • underscore

除了这两个之外,还有一个方法实现类似的技术点 requestAnimationFrame

以上是关于防抖,节流的知识点,欢迎关注,点赞,转发,评论。。。

关注我 一起回忆 《javaScript高级程序设计》《javaScript设计模式中》你没注意过的细节  重要的是一起成长

vue防抖和节流是什么_防抖和节流为什么重要!!!相关推荐

  1. 防抖 节流_防抖节流与前端性能优化

    在我们日常的开发中经常会用到一些容易被反复触发的事件.比如:scroll.resize.鼠标事件(mousemove,mouseover等).键盘事件(keyup.keydown). 频繁触发回调导致 ...

  2. eis电子防抖好还是光学防抖好_“快板声”带来的科普 手机镜头防抖模组有哪些...

    近期智能手机摄像头 "打快板"在微博上火了起来.事情的缘由是某旗舰手机晃动手机后会出现"哒哒哒"的声音,而这种声音被同行戏称为"快板声",这 ...

  3. eis电子防抖好还是光学防抖好_万物皆可OTA?魅族17 Pro视频防抖测试对比iPhone 11 Pro Max...

    5G时代让短视频大火,短视频的魔力就在于分享故事,而好的故事除了构思外,拍摄道具的重要性不言而喻,这也是2020年各家手机厂商在相机视频防抖上发力的原因. 5月8日,魅族17系列发布,其中定位最高端的 ...

  4. eis电子防抖好还是光学防抖好_微云台:全新机载防抖解决方案?

    前言: 从5月21日vivo X50发布会开始,微云台再一次步入人们的视野,其实早在三个月前的APEX 2020概念机上已经出现. 这一次正式商用,又带给我们哪些惊喜呢?我们一起来看看. 再啰嗦一句: ...

  5. 前端_网页编程 节流

    文章目录 前言 1.什么是节流 2.节流的应用场景 3 节流案例 - 鼠标跟随效果 3.1 渲染UI结构并美化样式 3.2 不使用节流实现鼠标跟随效果 3.3 节流阀的概念 3.4 使用节流阀实现鼠标 ...

  6. vue防抖和节流是什么_前端节流和防抖的区别

    在监听某类事件时,如监听元素滚动或表单input事件时,处理函数在短时间内被频繁调用. 如果处理函数还需要调用后台接口,那么可能上次还没有响应,下一次请求又来了.这样无意中增加了服务器的压力,而且对用 ...

  7. vue防抖和节流是什么_JavaScript防抖与节流,你知道多少?

    JavaScript 的节流和防抖已经是老生畅谈的问题了,对于前端行业技术大牛来讲不过是小菜一碟,而对于绝大多数前端小白或初级工程师,绝对是必备的知识,值得学习. 接下来小郭就带大家一起学习" ...

  8. 手把手教你在vue中使用自定义指令全局封装防抖节流函数

    第一步在src下创建utils文件夹并创建common.js文件 //'@/utils/common.js' 文件function throttle(bindObj, fn, delay) {bind ...

  9. 什么是防抖和节流?如何实现防抖和节流?

    防抖(Debounce)和节流(Throttle)都是用来控制某个函数在一定时间内触发次数,两者都是为了减少触发频率,以便提高性能或者说避免资源浪费.毕竟JS操作DOM对象的代价还是十分昂贵的. 应用 ...

最新文章

  1. Xamarin Anroid开发教程之下载安装Xamarin
  2. 如何从代码层面优化系统性能
  3. C++list常用接口总结
  4. Spring ListFactoryBean实例
  5. Flask 系列之 Blueprint
  6. phpstorm+xdebug配置分享
  7. centos arm linux gcc,CentOS安装arm-linux-gcc交叉编译器
  8. 递归、os.walk、内置函数、lambda、hashlib模块、md5加密、python安装第三方模块、操作mysql数据库...
  9. 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
  10. java贪吃蛇源代码_java贪吃蛇源代码详解
  11. 计算机文件图标怎么一致大小,电脑图标大小设置的几种方法
  12. react native与夜神模拟器结合使用运行安卓平台
  13. word中的表格复制到html代码,怎样将Word中的表格复制到Excel中还保持原有内容和格式?...
  14. Win10系统内置杀毒软件Windows Defender卸载方法
  15. Android HAL原理实现 GPS HAL实现
  16. 美团四年,字节三年这七年测试之路希望能让正在迷茫的你少走弯路
  17. textarea右下角有字数计算
  18. 原码,反码,补码详解及原理
  19. 在同一台电脑上使用内网和外网
  20. Memcached哈希性能优化(八)——总结报告

热门文章

  1. 添加商品php,php – 为首次购买者添加商品到购物车
  2. java hasfocus_Android·Focus机制解析和常见问题
  3. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
  4. SDK 和 API 的区别是什么
  5. 皮一皮:流散国外的珍宝。。。
  6. 皮一皮:谁还不是个孩子...
  7. 聊一聊:拿到年终奖后马上辞职,厚道吗?
  8. 皮一皮:这几天最容易搞错的事情...
  9. 知乎高赞:iOS 为什么感觉比 Android 流畅?
  10. 赠书:一本书揭开 Spring Boot 技术内幕