网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月13日漏签0天
上海软件测试吧 关注:240贴子:781
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回上海软件测试吧
>0< 加载中...

Web前端学科总监干货分享|函数防抖和节流

  • 只看楼主
  • 收藏

  • 回复
  • 蜗牛学苑
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
徐超波:蜗牛学院前端学科总监,全栈工程师,四川大学本科。从事IT行业8年有余,积累了丰富的软件开发、项目管理经验。精通Java、前端以及Python技术,H5开发经验丰富。原华为无线部门高级研发工程师,并担任项目SE角色。擅长系统架构、 应用架构以及Web前端技术。曾参与大型互联网项目开发数次,对前后端开发有深入的见解,对高并、高可用、分布式架构设计有着丰富的经验。
“ 防抖和节流是性能优化必问的一块内容,而且在实际应用中遇到的频率相当高,处理不当或者放任不管就容易引起浏览器卡死”
01
—
浏览器性能问题
在网页开发过程中,我们会遇到返回顶部这个功能,一般在移动端当页面滚动到一定的位置后才会出现我们的返回按钮。
比如淘宝H5端页面:

当我们滚动到一定的位置时,在屏幕的右下角就会出现一个回到顶部的按钮,点击按钮后就能回到顶部。
如何实现上面的效果,我们可以给屏幕增加一个滚动事件。

上面这段代码在执行的过程中,效果如下:

根据上面的效果你可以发现,当我在屏幕上进行滚动的时候,scroll事件一直在执行,这无疑会增加浏览器的性能消耗,我们想要在指定的位置才执行滚动事件。
02
—
防抖(debounce)
函数防抖的概念:
函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。
基于上述场景,首先提出第一种思路:在第一次触发事件时,不立即执行函数,而是给出一个期限值比如200ms,然后:
1、如果在200ms内没有再次触发滚动事件,那么就执行函数
2、如果在200ms内再次触发滚动事件,那么当前的计时取消,重新开始计时效果:如果短时间内大量触发同一事件,只会执行一次函数。

防抖代码写好过后,我们就可以调用这个函数来测试效果,以及性能对比:

对于短时间内连续触发的事件(上面的滚动事件),防抖的含义就是让某个时间期限内,事件处理函数只执行一次。
防抖函数的应用场景:
按钮提交场景:防⽌多次提交按钮,只执行最后提交的⼀次
服务端验证场景:表单验证需要服务端配合,只执⾏一段连续的输⼊事件的最后⼀次,还有搜索联想词功能类似⽣存环境请⽤lodash.debounce
03
—
节流(throttle)
函数节流的概念:
函数节流是指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在 scroll 函数的事件监听上,通过事件节流来降低事件调用的频率。

如果一直拖着滚动条进行滚动,那么会以1s的时间间隔,持续输出当前位置和顶部的距离。
节流函数的适用场景:
拖拽场景:固定时间内只执行⼀次,防⽌超⾼频次触发位置变动
缩放场景:监控浏览器resize
动画场景:避免短时间内多次触发动画引起性能问题
面试中常见的一些场景:
1、搜索框input事件,例如要支持输入实时搜索可以使用节流方案(间隔一段时间就必须查询相关内容),或者实现输入间隔大于某个值(如500ms),就当做用户输入完成,然后开始搜索,具体使用哪种方案要看业务需求。
2、页面resize事件,常见于需要做页面适配的时候。需要根据最终呈现的页面情况进行dom渲染(这种情形一般是使用防抖,因为只需要判断最后一次的变化情况)。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回上海软件测试吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示