92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

詳談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.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

日歷

鏈接

個人資料

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

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
久久久久久久影院| 亚洲国产精品va在线| 国产精品第三页| 亚洲女人被黑人巨大进入al| 久久久精品在线| 国产一区二区三区四区福利| 成人乱色短篇合集| 久久伊人精品天天| 一区二区三区国产在线观看| 午夜精品理论片| 久久成人18免费网站| 欧美夫妻性生活xx| 国产香蕉精品视频一区二区三区| 欧美日韩高清区| 性色av一区二区咪爱| 色综合久久天天综线观看| 国产精品免费一区二区三区都可以| 久久久97精品| 亚洲精品www久久久久久广东| 亚洲成人精品视频在线观看| 国内精品美女av在线播放| 91久久久久久国产精品| 97久久久免费福利网址| 国产一区二区三区四区福利| 国产69精品99久久久久久宅男| 欧美主播福利视频| 亚洲国产欧美久久| 亚洲精品aⅴ中文字幕乱码| 自拍偷拍亚洲精品| 红桃视频成人在线观看| 国产精品视频免费在线观看| 国产精品成人国产乱一区| 亚洲成人av中文字幕| 国产视频福利一区| 欧美视频专区一二在线观看| 国产精品高潮粉嫩av| 91午夜在线播放| 国产亚洲一级高清| 一区二区三欧美| 在线观看欧美成人| 日韩在线观看免费高清完整版| 性欧美在线看片a免费观看| 久久艹在线视频| 精品国产精品三级精品av网址| 日韩一级裸体免费视频| 亚洲综合自拍一区| 日韩av片电影专区| 亚洲专区在线视频| 夜夜躁日日躁狠狠久久88av| 国产日韩欧美夫妻视频在线观看| 欧美有码在线视频| 欧美丝袜一区二区三区| 国产精品一区专区欧美日韩| 精品成人在线视频| 欧美激情综合亚洲一二区| 国产日产久久高清欧美一区| 2023亚洲男人天堂| 国产欧美日韩精品丝袜高跟鞋| 按摩亚洲人久久| 91成人福利在线| 国产精品羞羞答答| 国产精品男女猛烈高潮激情| 国产精品免费久久久久影院| 欧美人与性动交| 欧美精品久久久久久久久久| 欧美大片大片在线播放| 国产成人精品视频在线观看| 国产美女91呻吟求| 国内免费久久久久久久久久久| 国产精品欧美激情在线播放| 久久精品在线视频| 热久久免费视频精品| 久久久影视精品| 亚洲曰本av电影| 午夜精品一区二区三区视频免费看| 亚洲va欧美va国产综合久久| 992tv成人免费影院| 91精品视频网站| 欧洲成人性视频| 久久久久久国产免费| 福利视频第一区| 美女久久久久久久| 国产97色在线|日韩| 欧美xxxx综合视频| 精品免费在线视频| 国产精品爽爽ⅴa在线观看| 国产精品久久久久久久久粉嫩av| 久久这里只有精品视频首页| 久久久国产精彩视频美女艺术照福利| 欧美成人免费大片| 日韩在线欧美在线| 亚洲激情在线观看| 日本精品久久久久久久| 国产视频精品va久久久久久| 法国裸体一区二区| 在线观看亚洲视频| 91亚洲午夜在线| 欧美午夜www高清视频| 97人人爽人人喊人人模波多| 欧美日韩国产精品一区二区不卡中文| 国内精品一区二区三区四区| 美日韩精品免费视频| 亚洲国内精品视频| 日韩欧美999| 国产精品久久国产精品99gif| 久久久久一本一区二区青青蜜月| 久久久久久这里只有精品| 亚洲欧洲美洲在线综合| 欧美国产亚洲精品久久久8v| 亚洲码在线观看| 欧美老女人性生活| 黑人狂躁日本妞一区二区三区| 一本大道亚洲视频| 成人中文字幕+乱码+中文字幕| 亚洲人成网站色ww在线| 国产精品1区2区在线观看| 久久伊人免费视频| 国产91对白在线播放| 日韩av免费在线观看| 国产91精品久久久久久| 97在线免费观看| 影音先锋欧美在线资源| 中文字幕亚洲精品| 韩国三级电影久久久久久| 欧美最顶级的aⅴ艳星| 欧美理论在线观看| 色爱精品视频一区| 国内精品伊人久久| 91av免费观看91av精品在线| 国产成人亚洲精品| 狠狠色狠色综合曰曰| 亚洲午夜未满十八勿入免费观看全集| 亚洲级视频在线观看免费1级| 在线丨暗呦小u女国产精品| 成人久久久久久久| 欧美性猛交xxxx乱大交| 中文字幕在线观看日韩| 亚洲伊人久久综合| 欧美中文字幕在线视频| 国产精品高潮呻吟久久av黑人| 尤物99国产成人精品视频| 欧美与黑人午夜性猛交久久久| 久久久人成影片一区二区三区观看| 国产精品欧美一区二区| 精品久久久久久久久国产字幕| 日韩大片免费观看视频播放| 久久亚洲国产精品成人av秋霞| 日韩久久免费视频| 性金发美女69hd大尺寸| 亚洲国产成人精品久久| 欧美综合国产精品久久丁香| 国产亚洲精品综合一区91| 91免费综合在线| 欧美成人午夜激情在线| 亚洲国产欧美日韩精品| 欧美一区二区三区精品电影| 国产精品欧美一区二区三区奶水| 日韩中文字幕在线看| 国产精品久久久久久久天堂| 国产精品对白刺激| 国产成一区二区| 久久精品国产成人精品| 日本一区二区在线播放| 日韩电影中文字幕一区|