• vue性能优化之函数防抖


    一、背景

    上一篇文章中,我们介绍了如何实现城市列表随导航条滚动的功能
    当用户不断拖动导航条的时候,会频繁地触发功能函数
    这样会造成资源的浪费、降低页面运行的速度
    因此,我们需要通过函数防抖(debounce)来解决这个问题

    二、函数防抖的概念

    函数防抖,即限制一个函数在一定时间内只能执行1次
    实现方法之一,就是设置 timer+setTimeout 定时器
    假设某事件将会触发某函数的执行:
    当事件被触发时,通过setTimeout让这个函数延迟一会再执行,
    如果在这个时间间隔内又触发了事件,就通过clearTimeout清除原来的定时器,并且再设置一个新的定时器

    三、具体的代码实现

    了解函数防抖的概念之后,我们就可以对上一篇文章中的拖动功能进行修改

    handleTouchMove (event) {
      if (this.touchStatus) {
          // 如果timer正在计时,就清除它
          if (this.timer) {
            clearTimeout(this.timer)
          }
          // 延迟8ms执行箭头函数
          this.timer = setTimeout(() => {
          const startY = this.$refs['A'][0].offsetTop
          const touchY = event.touches[0].clientY          
          const index = Math.floor((touchY - 79 - this.startY) / 20)         
          if (index >= 0 && index < this.letters.length) {
            this.$emit('change', this.letters[index])
          }
        }, 8)
      }
    }
    

    当监听到用户拖动导航条时,延迟8ms再执行功能函数
    若在这8ms内用户继续拖动导航条,则从0开始继续延迟8ms
    这样就能在一定程度上优化用户体验,节省资源

  • 相关阅读:
    平衡二叉树(AVL Tree)
    算法分析
    稳定匹配
    Python读取不同文件夹下的图片并且分类放到新创建的训练文件夹和标签文件夹
    java构造函数也可以用private开头
    基于slf4j的log4j实战
    javascript权威指南第6版学习笔记
    hadoop之wordCount程序理解
    java 基本类型和包装类的比较
    设计模式之工厂模式,单例模式,门面模式
  • 原文地址:https://www.cnblogs.com/baebae996/p/13355670.html
Copyright © 2020-2023  润新知