前端要会的节省性能的小技巧!get!!

49 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

本文仅介绍了三个常用的节流小技巧————防抖、节流、图片懒加载,都附赠的代码哦

1. 防抖

防抖 ---> 一段时间内只触发只触发最后一次(搜索框)

防抖流程 :

(1)声明一个全局timeID存储定时器id

(2)每一次触发事件,先清除上一次定时器,以本次触发为准

(3)开启本次定时器

<input type="text" placeholder="请输入文本">
<script>
  let timeID = null
  document.querySelector('input').addEventListener('input',function(){
    clearTimeout(timeID)
    /* 
    fuction函数 : 定时器的this -> window
    箭头函数 : 访问上一级的作用域的this -> input
    */
    timeID = setTimeout(()=>{
        console.log(`用户输入${this.value}`)
    },1000)
  })
</script>

2. 节流

节流 ---> 一段时间内只触发一次(轮播图左右切换,滚动条事件 onscroll,鼠标移动 onmousemove)

节流流程 :

(1) 声明全局变量存储 上一次触发交互时间

(2) 每一次触发事件, 获取当前时间

(3) 判断 当前时间 - 上次触发事件 >= 节流间隔

(4) 存储本次触发事件,用于下一次判断

<style>
  body{
    width: 3000px;
    height: 3000px;
  }        
</style>

<script>
  let lastTime = null
  // 页面滚动条事件
  let i = 1
  window.onscroll = function(){
    let currentTime = Date.now() // (2) 获取当前时间
    // (3) 判断 当前时间 - 上次触发事件 >= 节流间隔
    if(currentTime - lastTime >= 500 ){
      console.log(`第${i++}次触发`)
      lastTime = currentTime
    }
  }
</script>

3. 图片懒加载

是一种常见的性能优化的手段

核心思路: 就是图片不在可视区的时候不给他设置src属性,因为只要给他设置src属性就会发送请求

这里面有个难点就是如何监听图片是否出现在可视区域useIntersectionObserver方法(el,箭头函数) isIntersecting

image-20220804001221044.png