基础算法

作者: Sue1024 | 来源:发表于2023-02-24 15:45 被阅读0次

    防抖 节流

    高频面试题。
    防抖和节流都是为了提升性能,减少资源浪费,获得性能,资源和用户体验之间的最佳组合。
    他们俩有什么区别呢?
    假设事件A会引发B
    事件A可能在一段时间内以较高频率P触发,比如输入事件,滚动事件,拖动事件。函数B虽然由A导致,但它不需要一直触发(假设函数B的触发频率是P-,甚至只需要出发一次(最后一次)。
    那么当函数B只需要触发最后一次时,比如只需要在输入结束时发送请求(认为两秒内无后继输入则为结束),那么就是防抖。
    当函数B需要以一个较低的频率P-触发时,比如拖动方块,鼠标的位置信息变化时毫秒级的,但不需要这么高频的绘制,只需要100毫秒级的绘制就可以给用户一种丝滑的体验,这就是节流。

    防抖源码

    const debounce = function(func, delay) {
      let timeout = null
      return function() {
        if(timeout) {
          clearTimeout(timeout)
        }
         timeout = setTimeout(() => func.call(this), delay)
      }
    }
    

    节流源码

    const throttle = function(func, delay) {
      let currentTime = Date.now()
      return function() {
        if(Date.now() - currentTime >= time) {
          func.call(this);
          currentTime = Date.now()
        }
      }
    }
    

    数组相关

    Reduce

    Array.prototype.reduce = function(callback, initialVal) {
      const arr = this
      if(typeof callback !== 'function') {
        return
      }
      let result = initialVal!==undefined ? initialVal : arr[0]
      for(let i = 0;i<arr.length; i++) {
        result = callback(result, arr[i], i, arr)
      }
      return result
    }
    

    相关文章

      网友评论

        本文标题:基础算法

        本文链接:https://www.haomeiwen.com/subject/sysxldtx.html