vue防抖和节流是什么_防抖和节流为什么重要!!!
是什么
防抖和节流两者类似【但并不一样】是用来控制某一函数在特定时间内执行次数的技术点。
什么时候重要
在给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防抖和节流是什么_防抖和节流为什么重要!!!相关推荐
- 防抖 节流_防抖节流与前端性能优化
在我们日常的开发中经常会用到一些容易被反复触发的事件.比如:scroll.resize.鼠标事件(mousemove,mouseover等).键盘事件(keyup.keydown). 频繁触发回调导致 ...
- eis电子防抖好还是光学防抖好_“快板声”带来的科普 手机镜头防抖模组有哪些...
近期智能手机摄像头 "打快板"在微博上火了起来.事情的缘由是某旗舰手机晃动手机后会出现"哒哒哒"的声音,而这种声音被同行戏称为"快板声",这 ...
- eis电子防抖好还是光学防抖好_万物皆可OTA?魅族17 Pro视频防抖测试对比iPhone 11 Pro Max...
5G时代让短视频大火,短视频的魔力就在于分享故事,而好的故事除了构思外,拍摄道具的重要性不言而喻,这也是2020年各家手机厂商在相机视频防抖上发力的原因. 5月8日,魅族17系列发布,其中定位最高端的 ...
- eis电子防抖好还是光学防抖好_微云台:全新机载防抖解决方案?
前言: 从5月21日vivo X50发布会开始,微云台再一次步入人们的视野,其实早在三个月前的APEX 2020概念机上已经出现. 这一次正式商用,又带给我们哪些惊喜呢?我们一起来看看. 再啰嗦一句: ...
- 前端_网页编程 节流
文章目录 前言 1.什么是节流 2.节流的应用场景 3 节流案例 - 鼠标跟随效果 3.1 渲染UI结构并美化样式 3.2 不使用节流实现鼠标跟随效果 3.3 节流阀的概念 3.4 使用节流阀实现鼠标 ...
- vue防抖和节流是什么_前端节流和防抖的区别
在监听某类事件时,如监听元素滚动或表单input事件时,处理函数在短时间内被频繁调用. 如果处理函数还需要调用后台接口,那么可能上次还没有响应,下一次请求又来了.这样无意中增加了服务器的压力,而且对用 ...
- vue防抖和节流是什么_JavaScript防抖与节流,你知道多少?
JavaScript 的节流和防抖已经是老生畅谈的问题了,对于前端行业技术大牛来讲不过是小菜一碟,而对于绝大多数前端小白或初级工程师,绝对是必备的知识,值得学习. 接下来小郭就带大家一起学习" ...
- 手把手教你在vue中使用自定义指令全局封装防抖节流函数
第一步在src下创建utils文件夹并创建common.js文件 //'@/utils/common.js' 文件function throttle(bindObj, fn, delay) {bind ...
- 什么是防抖和节流?如何实现防抖和节流?
防抖(Debounce)和节流(Throttle)都是用来控制某个函数在一定时间内触发次数,两者都是为了减少触发频率,以便提高性能或者说避免资源浪费.毕竟JS操作DOM对象的代价还是十分昂贵的. 应用 ...
最新文章
- Xamarin Anroid开发教程之下载安装Xamarin
- 如何从代码层面优化系统性能
- C++list常用接口总结
- Spring ListFactoryBean实例
- Flask 系列之 Blueprint
- phpstorm+xdebug配置分享
- centos arm linux gcc,CentOS安装arm-linux-gcc交叉编译器
- 递归、os.walk、内置函数、lambda、hashlib模块、md5加密、python安装第三方模块、操作mysql数据库...
- 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
- java贪吃蛇源代码_java贪吃蛇源代码详解
- 计算机文件图标怎么一致大小,电脑图标大小设置的几种方法
- react native与夜神模拟器结合使用运行安卓平台
- word中的表格复制到html代码,怎样将Word中的表格复制到Excel中还保持原有内容和格式?...
- Win10系统内置杀毒软件Windows Defender卸载方法
- Android HAL原理实现 GPS HAL实现
- 美团四年,字节三年这七年测试之路希望能让正在迷茫的你少走弯路
- textarea右下角有字数计算
- 原码,反码,补码详解及原理
- 在同一台电脑上使用内网和外网
- Memcached哈希性能优化(八)——总结报告
热门文章
- 添加商品php,php – 为首次购买者添加商品到购物车
- java hasfocus_Android·Focus机制解析和常见问题
- java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
- SDK 和 API 的区别是什么
- 皮一皮:流散国外的珍宝。。。
- 皮一皮:谁还不是个孩子...
- 聊一聊:拿到年终奖后马上辞职,厚道吗?
- 皮一皮:这几天最容易搞错的事情...
- 知乎高赞:iOS 为什么感觉比 Android 流畅?
- 赠书:一本书揭开 Spring Boot 技术内幕