前端性能优化之:函数防抖与函数节流

论坛 期权论坛 期权     
胡哥有话说   2019-7-28 10:11   1604   0
[h1]前言[/h1]
  1. 函数防抖
复制代码
  1. 函数节流
复制代码
是在前端性能优化中老生常谈的话题,也是各位前端的童鞋必须要掌握的性能优化手段。今天胡哥为大家分享函数防抖和函数节流的相关原理以及具体实践场景,希望能够给各位小伙伴在工作中提供相应业务场景的解决方案。
[h1]一、函数防抖[/h1][h2]概念:[/h2]如在窗口resize、input输入、textarea输入等操作时,为避免性能浪费,额外无意义执行相关函数处理,需检测用户是否已操作完毕。
[h2]规则:[/h2]
  • 未完成操作时不执行相关函数处理
  • 用户完成操作后,执行相关函数处理

[h2]案例:百度搜索推荐-根据用户的输入推荐相关搜索建议[/h2][h3]一般思路:[/h3]监听input的input事件,用户输入数据即立刻执行查询查询
  1.   
复制代码
  1.   let searchInput = document.querySelector('#searchInput')  searchInput.oninput = function () {    // 获取搜索值后,执行搜索推荐请求    console.log(this.value)  }
复制代码
[h3]缺点:[/h3]如果用户是想搜索abc,在输入时相当于执行了3次搜索(a/ab/abc三次),最终得到结果,那么前两次的请求相当于浪费了...
[h2]性能优化方案:[/h2]判断用户是否已经输入完毕,输入完毕后执行搜索推荐。那如何判断用户是否已经输入完毕,约定如果用户在1000ms无新输入时,则视为输入完毕。
  1. let searchInput = document.querySelector('#searchInput')  let searchTimersearchInput.oninput = function () {// 如果在用户输入的范围内已经存在一个定时器,就将此定时器关闭,启动新定时器if (searchTimer) {  clearTimeout(searchTimer)}// 启动定时器searchTimer = setTimeout(() => {  console.log(this.value)}, 1000)}
复制代码
此时,用户再连续输入abc时,只会执行一次查询,完美~
[h1]二、函数节流[/h1][h2]概念:[/h2]我们在移动端开发时经常会遇到页面触底加载更多数据,射击类游戏中子弹固定间隔发射的需求,这需要我们去判断是否已经触底,是否已经可以发射子弹了。为避免频繁性的执行判断操作,引入函数节流,在固定的周期内执行一次逻辑判断,减少无意义的多次判断,同时不影响用户体验。
[h2]规则[/h2]
  • 在约定周期内,虽触发多次,只执行1次判断操作
  • 周期内的逻辑判断标志如果存在,则执行停止程序的执行

[h2]案例:页面滚动时,判断是否已触底,进行加载更多数据操作[/h2][h3]一般思路:[/h3]监听页面的scroll滚动事件,判断是否已经触底 规则:文档高度 -滚动条
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP