成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

有個(gè)叫函數(shù)節(jié)流的東西

wuyangnju / 1916人閱讀

摘要:為了解決這個(gè)問題,我們只能通過減少執(zhí)行函數(shù)的次數(shù)來提高響應(yīng)速度。時(shí)間間隔內(nèi)若再次觸發(fā)事件,則重新計(jì)時(shí),直到停止時(shí)間大于或等于才執(zhí)行函數(shù)。

某些場景下,比如響應(yīng)鼠標(biāo)移動(dòng)或者窗口大小調(diào)整的事件,觸發(fā)頻率比較高。若處理函數(shù)稍微復(fù)雜,需要較多的運(yùn)算執(zhí)行時(shí)間,響應(yīng)速度跟不上觸發(fā)頻率,往往會出現(xiàn)延遲,導(dǎo)致假死或者卡頓感。

為了解決這個(gè)問題,我們只能通過減少執(zhí)行函數(shù)的次數(shù)來提高響應(yīng)速度。

throttledebounce 是解決請求和響應(yīng)速度不匹配問題的兩個(gè)方案。二者的差異在于選擇不同的策略。

throttle 等時(shí)間間隔執(zhí)行函數(shù)。

debounce 時(shí)間間隔 t 內(nèi)若再次觸發(fā)事件,則重新計(jì)時(shí),直到停止時(shí)間大于或等于 t 才執(zhí)行函數(shù)。

throttle
/**
*
* @param fn {Function}   實(shí)際要執(zhí)行的函數(shù)
* @param delay {Number}  執(zhí)行間隔,單位是毫秒(ms)
*
* @return {Function}     返回一個(gè)“節(jié)流”函數(shù)
*/
function throttle(fn, threshhold) {
  // 記錄上次執(zhí)行的時(shí)間
  var last
  // 定時(shí)器
  var timer
  // 默認(rèn)間隔為 250ms
  threshhold || (threshhold = 250)
  // 返回的函數(shù),每過 threshhold 毫秒就執(zhí)行一次 fn 函數(shù)
  return function () {
    // 保存函數(shù)調(diào)用時(shí)的上下文和參數(shù),傳遞給 fn
    var context = this
    var args = arguments
    var now = +new Date()
    // 如果距離上次執(zhí)行 fn 函數(shù)的時(shí)間小于 threshhold,那么就放棄
    // 執(zhí)行 fn,并重新計(jì)時(shí)
    if (last && now < last + threshhold) {
      clearTimeout(timer)
      // 保證在當(dāng)前時(shí)間區(qū)間結(jié)束后,再執(zhí)行一次 fn
      timer = setTimeout(function () {
        last = now
        fn.apply(context, args)
      }, threshhold)
    // 在時(shí)間區(qū)間的最開始和到達(dá)指定間隔的時(shí)候執(zhí)行一次 fn
    } else {
      last = now
      fn.apply(context, args)
    }
  }
}

調(diào)用方法

$("body").on("mousemove", throttle(function (event) {
  console.log("tick");
}, 1000));
debounce
function debounce(fn, delay) {
  var timer = null;
  return function () {
    var context = this, args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(context, args);
    }, delay);
  };
}

調(diào)用方法

$("input.username").keypress(debounce(function (event) {
  // do the Ajax request
}, 250));

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85644.html

相關(guān)文章

  • 聊聊Tomcat架構(gòu)設(shè)計(jì)

    摘要:本篇文章主要是跟大家聊聊的內(nèi)部架構(gòu)體系,讓大家對有個(gè)整體的認(rèn)知。方法會創(chuàng)建一個(gè)對象,調(diào)用它的方法將字節(jié)流封裝成對象,在創(chuàng)建組件時(shí),會將組件添加到組件中組件而組件在連接器初始化時(shí)就已經(jīng)創(chuàng)建好了目前為止,只有一個(gè)實(shí)現(xiàn)類,就是。 微信公眾號「后端進(jìn)階」,專注后端技術(shù)分享:Java、Golang、WEB框架、分布式中間件、服務(wù)治理等等。 老司機(jī)傾囊相授,帶你一路進(jìn)階,來不及解釋了快上車! T...

    cnio 評論0 收藏0
  • 來!我們一起來從頭開始構(gòu)建自己JavaScript模塊化工具

    摘要:能達(dá)到一個(gè)積木塊模塊的要求。接下來我們將改進(jìn)它。結(jié)尾到此,我們自己構(gòu)建了一個(gè)很實(shí)用的模塊化工具,項(xiàng)目的源碼在這里,喜歡的話,給個(gè)。 前言 希望編寫程序能像玩積木一樣,首先規(guī)劃要產(chǎn)出怎樣的作品,然后在積木堆中挑選合適的積木塊,最后一組合就完工了。 于是JavaScript需要類似這樣模塊化,每個(gè)模塊都隱藏內(nèi)部細(xì)節(jié)并且對外暴露接口,再處理好模塊之間的依賴關(guān)系,就可以達(dá)到玩積木的效果了。 雖...

    AaronYuan 評論0 收藏0
  • Javascript事件代理の真理

    摘要:參考資料事件代理很久很久以來,總感覺事件發(fā)生與事件代理到之間沒什么鳥區(qū)別。要搞清楚什么是事件代理,就需要先搞清楚什么是代理。,怎么從字面來理解事件代理一詞的含義后文有講。于是,看了事件代理的資料。這一過程被稱為事件冒泡。 參考資料:js-事件代理 很久很久以來,總感覺事件發(fā)生與事件代理到之間沒什么鳥區(qū)別。 最近,又看了一下,感覺區(qū)別其實(shí)真不大!看怎么理解吧。 要搞清楚什么是事件代理,就...

    lijy91 評論0 收藏0
  • 用Vue開發(fā)仿旅游站webapp項(xiàng)目總結(jié) (上)

    摘要:寫著寫著發(fā)現(xiàn)會寫不少內(nèi)容全部寫在一篇文章里感覺太多了不方便看,所以分為上下篇吧下篇寫完啦,感興趣的朋友可以繼續(xù)關(guān)注開發(fā)仿旅游站項(xiàng)目總結(jié)下溫馨提示此文章,僅是做完項(xiàng)目后的個(gè)人覺得可以總結(jié)下來的操作思路,接觸不久的朋友應(yīng)該會有收獲。 寫著寫著發(fā)現(xiàn)會寫不少內(nèi)容... 全部寫在一篇文章里感覺太多了不方便看,所以分為上下篇吧...下篇寫完啦,感興趣的朋友可以繼續(xù)關(guān)注 => Vue開發(fā)仿旅游站we...

    church 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<