基礎(chǔ)算法

防抖 節(jié)流

高頻面試題。
防抖和節(jié)流都是為了提升性能,減少資源浪費(fèi),獲得性能,資源和用戶體驗(yàn)之間的最佳組合。
他們倆有什么區(qū)別呢?
假設(shè)事件A會(huì)引發(fā)B
事件A可能在一段時(shí)間內(nèi)以較高頻率P觸發(fā),比如輸入事件,滾動(dòng)事件,拖動(dòng)事件。函數(shù)B雖然由A導(dǎo)致,但它不需要一直觸發(fā)(假設(shè)函數(shù)B的觸發(fā)頻率是P-,甚至只需要出發(fā)一次(最后一次)。
那么當(dāng)函數(shù)B只需要觸發(fā)最后一次時(shí),比如只需要在輸入結(jié)束時(shí)發(fā)送請(qǐng)求(認(rèn)為兩秒內(nèi)無后繼輸入則為結(jié)束),那么就是防抖。
當(dāng)函數(shù)B需要以一個(gè)較低的頻率P-觸發(fā)時(shí),比如拖動(dòng)方塊,鼠標(biāo)的位置信息變化時(shí)毫秒級(jí)的,但不需要這么高頻的繪制,只需要100毫秒級(jí)的繪制就可以給用戶一種絲滑的體驗(yàn),這就是節(jié)流。

防抖源碼

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

節(jié)流源碼

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

數(shù)組相關(guān)

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
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)防抖與節(jié)流 為什么要對(duì)函數(shù)進(jìn)行防抖與節(jié)流? 在進(jìn)行窗口的resize、scroll、mousemove,輸入框...
    296b871d5cd0閱讀 359評(píng)論 0 3
  • lodash工具庫(kù)里有實(shí)現(xiàn)防抖和節(jié)流的函數(shù) 防抖和節(jié)流嚴(yán)格算起來應(yīng)該屬于性能優(yōu)化的知識(shí),但實(shí)際上遇到的頻率相當(dāng)高,...
    coderfl閱讀 259評(píng)論 0 0
  • 概念 所謂函數(shù)的防抖和函數(shù)的節(jié)流,是一種優(yōu)化程序性能的技術(shù)。主要應(yīng)用于事件處理程序中 什么情況下需要使用防抖和節(jié)流...
    小呆呆008閱讀 255評(píng)論 0 0
  • 防抖和節(jié)流嚴(yán)格算起來應(yīng)該屬于性能優(yōu)化的知識(shí),但實(shí)際上遇到的頻率相當(dāng)高,處理不當(dāng)或者放任不管就容易引起瀏覽器卡死。所...
    TurnHug閱讀 787評(píng)論 0 2
  • 什么是函數(shù)的防抖和節(jié)流? 它是優(yōu)化處理高頻率代碼執(zhí)行的一種手段;比如我們監(jiān)聽resize窗口的變化、scroll滾...
    幸宇閱讀 411評(píng)論 0 0

友情鏈接更多精彩內(nèi)容