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

資訊專欄INFORMATION COLUMN

JS進(jìn)階篇3---函數(shù)“節(jié)流” VS “防抖”

hlcc / 1440人閱讀

摘要:目的都是為了降低回調(diào)函數(shù)執(zhí)行頻率,節(jié)省計(jì)算機(jī)資源,優(yōu)化性能,提升用戶體驗(yàn)。函數(shù)防抖事件頻繁觸發(fā)的情況下,只有經(jīng)過足夠的空閑時(shí)間,才執(zhí)行代碼一次。

“函數(shù)節(jié)流”和“函數(shù)防抖”的對(duì)比分析 一、前言

前端開發(fā)中,“函數(shù)節(jié)流(throttle)” 和 “函數(shù)防抖(debounce)” 作為常用的性能優(yōu)化方法,兩者都是用于優(yōu)化高頻率執(zhí)行 js 代碼的手段,那具體它們有什么異同點(diǎn)呢?有對(duì)這兩個(gè)概念不太了解的小伙伴,可以移步本人之前所寫的 JS進(jìn)階篇1---函數(shù)節(jié)流(throttle) 和 JS進(jìn)階篇2---函數(shù)防抖(debounce)。

二、背景介紹

大家都知道,液晶顯示器的屏幕刷新率通常為 60Hz ,即每秒屏幕內(nèi)容刷新 60 次,那為什么是 60 次,而不是 30 次,或者 90 次呢?這是因?yàn)椋?dāng)液晶顯示器的屏幕刷新率為 60Hz 的時(shí)候(這里只討論液晶顯示器),人肉眼再也不能察覺出屏幕的閃爍現(xiàn)象,低于這個(gè)刷新頻率畫面會(huì)有卡頓現(xiàn)象,而高于這個(gè)頻率的話,又會(huì)造成額外的資源和能源浪費(fèi),因此,液晶顯示器的默認(rèn)屏幕刷新率為 60Hz。

同理,在前端開發(fā)過程中,有一些會(huì)被高頻觸發(fā)的事件,例如 resizescroll、mousemove 等,但有些時(shí)候我們并不希望在事件持續(xù)觸發(fā)的過程中那么頻繁地去執(zhí)行函數(shù),達(dá)到一定頻率就足夠了,因?yàn)槌^這個(gè)頻率之后,無論代碼執(zhí)行多少次,帶來的效果也是一樣,所以倒不如把 js 代碼的執(zhí)行次數(shù)控制在合理的范圍。這樣既可以節(jié)省計(jì)算機(jī)資源,又可以保證瀏覽的流暢性,這就是 “函數(shù)節(jié)流” 和 “函數(shù)防抖” 要解決的問題。

三、異同分析 相同點(diǎn)

實(shí)現(xiàn):都可以通過使用 setTimeout 實(shí)現(xiàn)。

目的:都是為了降低回調(diào)函數(shù)執(zhí)行頻率,節(jié)省計(jì)算機(jī)資源,優(yōu)化性能,提升用戶體驗(yàn)。

本質(zhì):都是通過減少實(shí)際邏輯處理過程的執(zhí)行來提高事件處理函數(shù)運(yùn)行性能的手段,實(shí)質(zhì)上并未減少事件觸發(fā)次數(shù)。

不同點(diǎn)
1、概念不同

函數(shù)節(jié)流:一定時(shí)間內(nèi),控制 js 方法只執(zhí)行一次。(例如:通常每隔一段時(shí)間,如 3s,人就會(huì)眨一次眼睛)。

函數(shù)防抖:事件頻繁觸發(fā)的情況下,只有經(jīng)過足夠的空閑時(shí)間,才執(zhí)行代碼一次。(舉個(gè)栗子:乘坐電梯時(shí),電梯只有檢測(cè)到?jīng)]有人進(jìn)入,并經(jīng)過一段時(shí)間之后(例如 10s),才會(huì)關(guān)閉電梯入口運(yùn)行)。

2、實(shí)現(xiàn)方式不同

函數(shù)節(jié)流:聲明一個(gè)變量當(dāng)標(biāo)志位,記錄當(dāng)前代碼是否在執(zhí)行。如果空閑,則可以正常觸發(fā)方法執(zhí)行。如果代碼正在執(zhí)行,則取消這次方法執(zhí)行,直接 return

函數(shù)防抖:需要一個(gè) setTimeout 來輔助實(shí)現(xiàn),延遲執(zhí)行需要執(zhí)行的代碼。如果方法多次觸發(fā),則把上次記錄的延遲執(zhí)行代碼用 clearTimeout 清掉,重新開始計(jì)時(shí)。如果在計(jì)時(shí)期間事件沒有被重新觸發(fā),才執(zhí)行代碼一次。

3、要點(diǎn)不同

函數(shù)節(jié)流:函數(shù)節(jié)流的要點(diǎn)是,聲明一個(gè)變量當(dāng)標(biāo)志位,記錄當(dāng)前代碼是否在執(zhí)行。

函數(shù)防抖:用 setTimeout 函數(shù)做緩存池,而且可以輕易地清除待執(zhí)行的代碼。

4、使用場(chǎng)景不同

“函數(shù)節(jié)流” 使用場(chǎng)景

百度搜索框的輸入聯(lián)想功能

防止高頻點(diǎn)擊提交,防止表單重復(fù)提交

懶加載、加載更多、圖片瀑布流或監(jiān)聽滾動(dòng)條位置

“函數(shù)防抖” 使用場(chǎng)景

用戶名、手機(jī)號(hào)、郵箱輸入驗(yàn)證

搜索框輸入關(guān)鍵字后,只需用戶最后一次輸入完,再發(fā)送請(qǐng)求

改變?yōu)g覽器窗口大小時(shí),只需窗口調(diào)整完成后,再執(zhí)行 resize 事件中的函數(shù),計(jì)算窗口大小,重新排布元素,防止重復(fù)渲染。

心得總結(jié)

  不管是 “函數(shù)節(jié)流” 還是 “函數(shù)防抖”,都是用來進(jìn)行性能優(yōu)化的方式,也都是在項(xiàng)目開發(fā)過程中,為了解決開發(fā)中的實(shí)際問題而慢慢發(fā)展而來的,一定要在合適的場(chǎng)合才用正確的方法使用它們,切忌濫用,不然不僅不會(huì)發(fā)揮它們?cè)撚械淖饔茫€會(huì)影響代碼執(zhí)行的正確性。有疑問或者建議,記得在評(píng)論區(qū)提出哦,歡迎留言!

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

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

相關(guān)文章

  • JS進(jìn)階2---函數(shù)防抖(debounce)

    摘要:函數(shù)防抖的要點(diǎn),是需要一個(gè)來輔助實(shí)現(xiàn),延遲運(yùn)行需要執(zhí)行的代碼。若計(jì)時(shí)期間事件沒有被重新觸發(fā),等延遲時(shí)間計(jì)時(shí)完畢,則執(zhí)行目標(biāo)代碼。而非立即執(zhí)行版指的是觸發(fā)事件后函數(shù)會(huì)立即執(zhí)行,然后秒內(nèi)不觸發(fā)事件才能繼續(xù)執(zhí)行函數(shù)的效果。。 JS中的函數(shù)防抖 一、什么是函數(shù)防抖 概念:函數(shù)防抖(debounce),就是指觸發(fā)事件后,在 n 秒內(nèi)函數(shù)只能執(zhí)行一次,如果觸發(fā)事件后在 n 秒內(nèi)又觸發(fā)了事件,則會(huì)重...

    zhongmeizhi 評(píng)論0 收藏0
  • JavaScript專題系列文章

    摘要:專題系列共計(jì)篇,主要研究日常開發(fā)中一些功能點(diǎn)的實(shí)現(xiàn),比如防抖節(jié)流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點(diǎn)是研究專題之函數(shù)組合專題系列第十六篇,講解函數(shù)組合,并且使用柯里化和函數(shù)組合實(shí)現(xiàn)模式需求我們需要寫一個(gè)函數(shù),輸入,返回。 JavaScript 專題之從零實(shí)現(xiàn) jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實(shí)現(xiàn)一個(gè) jQuery 的 ext...

    Maxiye 評(píng)論0 收藏0
  • 剖析前端開發(fā)中的防抖節(jié)流

    摘要:運(yùn)用防抖和節(jié)流可以有效降低代碼的執(zhí)行頻率,從而解決高頻率事件的頁(yè)面卡頓問題。在階段布局,最終確定顯示的位置和大小。在函數(shù)中,首先定義了一個(gè)空的定時(shí)器變量,用來計(jì)算時(shí)間間隔。還有一點(diǎn)要注意,在中一定要清楚定時(shí)器,不然會(huì)影響的條件判斷。 啥是節(jié)流? 節(jié)流是保證在一段時(shí)間內(nèi),代碼只執(zhí)行了一次。這個(gè)一段時(shí)間內(nèi)指的是不管用戶操作了幾次,最終僅執(zhí)行一次。比如說一個(gè)按鈕,用戶狂點(diǎn)按鈕,但是如果用節(jié)流...

    andong777 評(píng)論0 收藏0
  • 剖析前端開發(fā)中的防抖節(jié)流

    摘要:運(yùn)用防抖和節(jié)流可以有效降低代碼的執(zhí)行頻率,從而解決高頻率事件的頁(yè)面卡頓問題。在階段布局,最終確定顯示的位置和大小。在函數(shù)中,首先定義了一個(gè)空的定時(shí)器變量,用來計(jì)算時(shí)間間隔。還有一點(diǎn)要注意,在中一定要清楚定時(shí)器,不然會(huì)影響的條件判斷。 啥是節(jié)流? 節(jié)流是保證在一段時(shí)間內(nèi),代碼只執(zhí)行了一次。這個(gè)一段時(shí)間內(nèi)指的是不管用戶操作了幾次,最終僅執(zhí)行一次。比如說一個(gè)按鈕,用戶狂點(diǎn)按鈕,但是如果用節(jié)流...

    LeexMuller 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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