前端性能系列-防抖和节流

简介: 在前端项目中,函数的防抖和节流应该算是身为一名合格的前端工程师必须掌握的知识了。

网络异常,图片无法展示
|

前言


在前端项目中,函数的防抖和节流应该算是身为一名合格的前端工程师必须掌握的知识了。

函数的防抖和节流的是什么

  • 函数的防抖:事件完成某段固定的时长后执行相应的函数
  • 函数的节流:事件执行期间每隔一段时间执行相应的函数
  • 函数的防抖与节流的区别在我看来有点类似生活中快递和外卖的区别: 快递:一天中任何时间下的单一般都是晚上发货(固定时长) 外卖:下单后饭做好后(每隔一段时间)立即送餐

为什么要掌握防抖和节流

函数节流(throttle)与函数防抖(debounce)都是可以限制函数的执行频次,根据不同的场景来对执行频率进行限制,避免了函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。

函数的防抖和节流应用实例与实现

  • 防抖的应用
    1.防抖一般我们在搜索过滤功能中应用较多,如果只是监听搜索框的变化来搜索那搜索的频率会过高,导致页面抖动。因此我们需要限制搜索次数,等到输入最后一次(也可能是中间暂停的某次)间隔0.5秒后在执行搜索,这样就能控制搜索的频率了。
    2.表单重复提交
    3.滚动刷新 实例代码1:
var timer = null
   function debounce(fn,time){
        //触发频率小于500ms是则清除上次未执行的
        clearTimeout(timer)
        timer = setTimeout(function(){
            console.log('====执行=====')
            fn()
        },time)
   }
   //监听搜索input change事件
   element.addEventListener("input", function(event) {
    debounce(searchFunc,500)
   })
   //搜索
   searchFunc(){
       console.log('====serch=====')
   }

实例代码2-闭包实现:

//待完善
  • 节流的应用
    1.canvas画笔功能
    2.页面元素的拖拽
    实例代码1:
var startTime = 0
function throttle(fn,time){
    let nowTime = (new Date()).valueOf()
    if(nowTime-startTime > time){
        fn()
        startTime = nowTime
    }
}
document.addEventListener("mousemove",function(){
  //每隔1秒执行一次drag
   throttle(drag(),1000)
});
function drag(){
   console.log('=====执行=====')
}
  • 实例代码2-闭包实现:
//待完善

总结


在页面负载比较大的情况下,如何减少对浏览器内存的消耗是前端优化的必须要考虑到的。而防抖与节流的概念可以让我们极大的节约对浏览器内存的消耗,所以掌握防抖与节流是前端必备技能之一。

相关文章
|
4月前
|
前端开发 UED 开发者
颠覆你的前端知识:防抖与节流的区别及实战解析!
【8月更文挑战第23天】在Web前端开发中,处理用户界面交互产生的事件可能会影响性能。为此,我们有两种优化方法:防抖(debounce)和节流(throttle)。防抖确保函数仅在事件停止触发一段时间后执行一次,适用于如搜索自动补全场景。而节流则确保函数按固定时间间隔执行,不管用户操作频率如何。本篇技术博客将深入解析两者差异并提供示例代码,帮助开发者更好地理解和应用这些技巧以提升应用性能和用户体验。
90 0
|
2月前
|
前端开发
前端常用方法防抖(debounce)和节流(throttle)的示例演示及应用场景说明
前端常用方法防抖(debounce)和节流(throttle)的示例演示及应用场景说明
37 0
|
3月前
|
缓存 边缘计算 前端开发
关于前端性能优化问题,认识网页加载过程和防抖节流
该文章详细探讨了前端性能优化的方法,包括理解网页加载过程、实施防抖和节流技术来提升用户体验和性能。
|
5月前
|
缓存 开发框架 前端开发
前端性能优化【前端必备】(含懒加载,手写防抖、节流等)
前端性能优化【前端必备】(含懒加载,手写防抖、节流等)
79 4
|
7月前
|
前端开发 JavaScript UED
【专栏】前端开发中,为解决用户操作引发的性能问题,常使用debounce(防抖)和throttle(节流)技术
【4月更文挑战第29天】前端开发中,为解决用户操作引发的性能问题,常使用debounce(防抖)和throttle(节流)技术。Debounce确保在一段时间内只执行最后一次事件触发的操作,减少不必要的执行,但有滞后性,适合搜索框实时搜索。Throttle则保证一定时间间隔内函数执行一次,保持固定频率,适用于滚动事件处理和窗口大小调整。两者可借助JavaScript或第三方库实现,需根据场景和需求选择并调整。正确使用能提升应用性能和用户体验。
56 1
|
7月前
|
前端开发 JavaScript UED
【前端面经】快手二面:节流和防抖知道吗?
【前端面经】快手二面:节流和防抖知道吗?
54 0
|
7月前
|
前端开发 UED
【Web 前端】防抖与节流的区别
【4月更文挑战第22天】【Web 前端】防抖与节流的区别
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
183 2
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
49 0
|
2月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
下一篇
DataWorks