嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

詳談js防抖和節流

2021-5-8    前端達人

本文由小芭樂發表

0. 引入

首先舉一個例子:

模擬在輸入框輸入后做ajax查詢請求,沒有加入防抖和節流的效果,這里附上完整可執行代碼:

<!DOCTYPE html> <html lang="en">  <head> <meta charset="UTF-8"> <title>沒有防抖</title> <style type="text/css"></style> <script type="text/javascript"> window.onload = function () { //模擬ajax請求  function ajax(content) { console.log('ajax request ' + content) } let inputNormal = document.getElementById('normal');  inputNormal.addEventListener('keyup', function (e) { ajax(e.target.value) }) } </script> </head>  <body> <div> 1.沒有防抖的輸入 <input type="text" name="normal" id="normal"> </div> </body>  </html> 

效果:在輸入框里輸入一個,就會觸發一次“ajax請求”(此處是console)。


沒有防抖和節流

缺點:浪費請求資源,可以加入防抖和節流來優化一下。

本文會分別介紹什么是防抖和節流,它們的應用場景,和實現方式。防抖和節流都是為了解決短時間內大量觸發某函數而導致的性能問題,比如觸發頻率過高導致的響應速度跟不上觸發頻率,出現延遲,假死或卡頓的現象。但二者應對的業務需求不一樣,所以實現的原理也不一樣,下面具體來看看吧。

1. 防抖(debounce)

1.1 什么是防抖

在事件被觸發n秒后再執行回調函數,如果在這n秒內又被觸發,則重新計時。

1.2 應用場景

(1) 用戶在輸入框中連續輸入一串字符后,只會在輸入完后去執行最后一次的查詢ajax請求,這樣可以有效減少請求次數,節約請求資源;

(2) window的resize、scroll事件,不斷地調整瀏覽器的窗口大小、或者滾動時會觸發對應事件,防抖讓其只觸發一次;

1.3 實現

還是上述列子,這里加入防抖來優化一下,完整代碼如下:

<!DOCTYPE html> <html lang="en">  <head> <meta charset="UTF-8"> <title>加入防抖</title> <style type="text/css"></style> <script type="text/javascript"> window.onload = function () { //模擬ajax請求  function ajax(content) { console.log('ajax request ' + content) } function debounce(fun, delay) { return function (args) { //獲取函數的作用域和變量  let that = this let _args = args //每次事件被觸發,都會清除當前的timeer,然后重寫設置超時調用  clearTimeout(fun.id) fun.id = setTimeout(function () { fun.call(that, _args) }, delay) } } let inputDebounce = document.getElementById('debounce') let debounceAjax = debounce(ajax, 500) inputDebounce.addEventListener('keyup', function (e) { debounceAjax(e.target.value) }) } </script> </head>  <body> <div> 2.加入防抖后的輸入 <input type="text" name="debounce" id="debounce"> </div> </body>  </html> 

代碼說明:

1.每一次事件被觸發,都會清除當前的 timer 然后重新設置超時調用,即重新計時。 這就會導致每一次高頻事件都會取消前一次的超時調用,導致事件處理程序不能被觸發;

2.只有當高頻事件停止,最后一次事件觸發的超時調用才能在delay時間后執行;

效果:

加入防抖后,當持續在輸入框里輸入時,并不會發送請求,只有當在指定時間間隔內沒有再輸入時,才會發送請求。如果先停止輸入,但是在指定間隔內又輸入,會重新觸發計時。


加入防抖

2.節流(throttle)

2.1 什么是節流

規定一個單位時間,在這個單位時間內,只能有一次觸發事件的回調函數執行,如果在同一個單位時間內某事件被觸發多次,只有一次能生效。

2.2 應用場景

(1)鼠標連續不斷地觸發某事件(如點擊),只在單位時間內只觸發一次;

(2)在頁面的無限加載場景下,需要用戶在滾動頁面時,每隔一段時間發一次 ajax 請求,而不是在用戶停下滾動頁面操作時才去請求數據;

(3)監聽滾動事件,比如是否滑到底部自動加載更多,用throttle來判斷;

2.3 實現

還是上述列子,這里加入節流來優化一下,完整代碼如下:

<!DOCTYPE html> <html lang="en">  <head> <meta charset="UTF-8"> <title>加入節流</title> <style type="text/css"></style> <script type="text/javascript"> window.onload = function () { //模擬ajax請求  function ajax(content) { console.log('ajax request ' + content) }  function throttle(fun, delay) { let last, deferTimer return function (args) { let that = this; let _args = arguments;  let now = +new Date(); if (last && now < last + delay) { clearTimeout(deferTimer); deferTimer = setTimeout(function () { last = now; fun.apply(that, _args); }, delay) } else { last = now; fun.apply(that, _args); } } } let throttleAjax = throttle(ajax, 1000) let inputThrottle = document.getElementById('throttle') inputThrottle.addEventListener('keyup', function (e) { throttleAjax(e.target.value) }) } </script> </head>  <body> <div> 3.加入節流后的輸入 <input type="text" name="throttle" id="throttle"> </div> </body>  </html> 

效果:實驗可發現在持續輸入時,會安裝代碼中的設定,每1秒執行一次ajax請求


加入節流

3. 小結

總結下防抖和節流的區別:

-- 效果:

函數防抖是某一段時間內只執行一次;而函數節流是間隔時間執行,不管事件觸發有多頻繁,都會保證在規定時間內一定會執行一次真正的事件處理函數。

-- 原理:

防抖是維護一個計時器,規定在delay時間后觸發函數,但是在delay時間內再次觸發的話,都會清除當前的 timer 然后重新設置超時調用,即重新計時。這樣一來,只有最后一次操作能被觸發。

節流是通過判斷是否到達一定時間來觸發函數,若沒到規定時間則使用計時器延后,而下一次事件則會重新設定計時器。

如有問題,歡迎指正。


轉自知乎  原文鏈接:https://zhuanlan.zhihu.com/p/51608574



藍藍設計www.sdgs6788.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.sdgs6788.com

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 亚洲国产婷婷综合在线精品| 欧美在线看片a免费观看| 免费日韩成人| 久久精品国产一区二区三区免费看| 亚洲精品国久久99热| 久久久久久久精| 久久久综合网站| 免费观看不卡av| 欧美黄色影院| 99国产精品私拍| 亚洲伊人伊色伊影伊综合网| 欧美一区二区三区在线观看视频 | 日韩午夜剧场| 中国日韩欧美久久久久久久久| 亚洲新中文字幕| 久久av一区二区三区漫画| 鲁鲁狠狠狠7777一区二区| 欧美mv日韩mv亚洲| 欧美三级电影大全| 狠狠入ady亚洲精品| 亚洲日韩欧美一区二区在线| 亚洲一级二级| 狂野欧美激情性xxxx| 亚洲日本在线视频观看| 午夜精品久久久久影视| 免费观看成人网| 欧美在线观看视频一区二区| 久久九九全国免费精品观看| 91久久久久| 亚洲性人人天天夜夜摸| 午夜在线电影亚洲一区| 欧美一区高清| 亚洲高清视频一区| 一本久道久久综合中文字幕| 99国产精品久久| 中文久久精品| 久久久一本精品99久久精品66| 久久尤物电影视频在线观看| 欧美日韩 国产精品| 一区二区三区无毛| 亚洲女人天堂av| 亚洲国产三级网| 久久久国产一区二区三区| 欧美先锋影音| 欧美岛国激情| 欧美激情第一页xxx| 国产亚洲精品一区二555| 欧美中文字幕视频| 欧美日韩一区免费| 亚洲激情成人| 欧美成人免费播放| 久久久精品五月天| 国产麻豆精品久久一二三| 99在线|亚洲一区二区| 欧美成人一区二区在线 | 裸体一区二区| 一本久道综合久久精品| 欧美激情一区二区三区蜜桃视频| 在线观看视频一区| 久久久www成人免费毛片麻豆| 在线亚洲一区观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 一本色道久久综合亚洲精品小说| 久久爱www.| 亚洲一级特黄| 国产精品久久久久影院亚瑟| 亚洲夜间福利| 亚洲欧美国产不卡| 国产精品www色诱视频| 亚洲黄页一区| 欧美日韩国产欧| 久久综合免费视频影院| 亚洲香蕉在线观看| 欧美日韩在线免费| 老司机午夜精品视频| 久久成人国产精品| 亚洲一区图片| 国产一区二区三区在线观看免费| 久久久91精品国产一区二区精品| 欧美在线视频观看| 国语自产精品视频在线看一大j8 | 亚洲视频每日更新| 国产欧美在线| 久久久欧美精品sm网站| 久久福利视频导航| 亚洲激情综合| 日韩视频免费在线| 国产乱码精品一区二区三区不卡| 欧美在线关看| 久久美女性网| 一区二区三区欧美激情| 亚洲图片欧美日产| 国产网站欧美日韩免费精品在线观看| 久久久精品免费视频| 免费久久99精品国产自在现线| 亚洲美女视频网| 亚洲免费在线播放| 亚洲二区免费| 亚洲视频在线观看免费| 国产综合欧美| 日韩小视频在线观看专区| 国产精品嫩草影院av蜜臀| 欧美国产日韩一区二区在线观看 | 久久一区中文字幕| 欧美在线视频观看| 欧美一区二区精品在线| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩国内| 久久综合久久综合久久综合| 欧美黑人国产人伦爽爽爽| 性xx色xx综合久久久xx| 欧美凹凸一区二区三区视频| 亚洲一区二区免费在线| 久久婷婷国产综合国色天香| 中文欧美在线视频| 欧美成人在线网站| 久久婷婷国产综合尤物精品| 免费在线看一区| 欧美在线资源| 欧美婷婷久久| 亚洲精品黄网在线观看| 伊大人香蕉综合8在线视| 久久国产精品99精品国产| 亚洲精品小视频在线观看| 亚洲免费视频观看| 久久久夜色精品亚洲| 欧美日韩一区二区免费视频| 久久另类ts人妖一区二区| 欧美成人一区二区| 日韩一区二区精品视频| 一区二区三区**美女毛片| 免费成人性网站| 亚洲欧美制服另类日韩| 欧美日韩理论| 亚洲国产高清自拍| 亚洲国产综合91精品麻豆| 亚洲综合日韩在线| 亚洲少妇中出一区| 国产精品chinese| 久久精品一区二区三区四区| aⅴ色国产欧美| 一区二区三区鲁丝不卡| 亚洲免费影院| 91久久综合亚洲鲁鲁五月天| 国产伦精品免费视频| 国产精品久久久久久久免费软件| 欧美日韩中文精品| 久久视频这里只有精品| 欧美精品久久久久久| 免费不卡视频| 中文国产一区| 亚洲卡通欧美制服中文| 亚洲国产一区二区三区a毛片| 亚洲精品一区二区三区婷婷月| 99精品视频一区| 久久精品国产久精国产思思| 国产精品最新自拍| 亚洲欧美中文日韩v在线观看| 欧美一区二区三区播放老司机 | 免费高清在线一区| 一区在线观看| 欧美精选午夜久久久乱码6080| 亚洲精品日韩综合观看成人91| 亚洲一区二区三区三| 国产亚洲欧美一级| 欧美一级理论性理论a| 亚洲午夜视频在线观看| 欧美成熟视频| 亚洲欧美国产日韩中文字幕| 麻豆国产va免费精品高清在线| 影音先锋成人资源站| 免费看成人av| 一本大道久久a久久精品综合| 欧美一区二区私人影院日本 | 欧美日韩国产美女| 午夜精品在线观看| 欧美高清在线视频观看不卡| 亚洲无线视频| 原创国产精品91| 国产精品成人午夜| 久久婷婷麻豆| 在线视频欧美一区| 欧美激情一区二区三区| 性感少妇一区| 一本色道久久综合| 韩国成人理伦片免费播放| 欧美日韩一区二区三区在线看 | 欧美一级片久久久久久久| 亚洲国产精品一区| 久久久精品五月天| 99视频精品全部免费在线| 一区在线免费观看| 国产日产亚洲精品| 欧美色视频一区| 欧美jizzhd精品欧美巨大免费| 欧美一区二区在线看| 一片黄亚洲嫩模| 欧美国产日本在线| 美女被久久久| 欧美在线播放高清精品|