色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

前端性能優(yōu)化:防抖與節(jié)流的核心差異、工程實現(xiàn)與場景選型

前端性能優(yōu)化:防抖與節(jié)流的核心差異、工程實現(xiàn)與場景選型 做前端這些年被問得最多的一類問題不是框架怎么選而是“這個滾動監(jiān)聽卡得要死怎么辦”“輸入框每敲一個字就發(fā)一次請求后端同事快盯上我了”。這類問題的答案基本都落在防抖Debounce和節(jié)流Throttle這兩個詞上而它們又恰恰是前端性能優(yōu)化里投入產(chǎn)出比最高的兩個小工具。這兩個概念人人都聽過面試也能背出定義但真正在業(yè)務里寫對、用對、調對的人并不多——我見過太多把防抖寫成節(jié)流、把節(jié)流寫成“限流”、甚至在組件卸載之后還留著定時器默默執(zhí)行的代碼。這篇就把這兩個高頻回調控制手段徹底拆開講它們各自解決什么問題實現(xiàn)上有哪些坑等待參數(shù)該怎么算在搜索聯(lián)想、滾動加載、按鈕防連點、埋點上報這些真實場景里怎么落地以及怎么和請求競態(tài)、組件生命周期配合起來。無論你是剛入門還是已經(jīng)寫了兩三年業(yè)務代碼看完至少能做到一件事拿到一個高頻觸發(fā)的場景幾秒鐘判斷出該用哪個并且能徒手寫出來不用翻文檔。1. 先把這兩個概念釘死在場景里1.1 高頻回調為什么會把頁面拖垮瀏覽器的主線程只有一個JS 執(zhí)行、樣式計算、布局、繪制全都排在它后面。一個mousemove在高刷新率設備上一秒能觸發(fā)一百多次一次scroll在慣性滾動里也能輕松跑到六十次以上input事件更是每敲一個字符就來一次?;卣{本身不貴貴的是回調里通常干的事讀scrollTop、讀offsetHeight、改 DOM、發(fā)請求。這里有個很多人不知道的細節(jié)在同一個任務里先寫 DOM 樣式、緊接著讀布局屬性瀏覽器為了給你正確的值會被迫立刻做一次同步布局計算。你寫十次讀十次就是十次強制重排。滾動監(jiān)聽里那種“讀位置—改樣式—再讀位置”的寫法掉幀就是這么來的?;卣{頻率越高這種強制同步布局發(fā)生得越密集最終表現(xiàn)就是滾動條拖不動、手指劃下去畫面發(fā)黏。請求風暴是另一個后果。搜索框如果不做控制用戶輸入“性能優(yōu)化”四個字會發(fā)出四次請求而且這四次請求的返回順序完全不保證——第一字的結果可能最后才回來把正確結果覆蓋掉用戶看到的聯(lián)想詞永遠慢半拍。埋點上報更典型滾動一次上報一次一篇文章從頭滑到尾能給你刷出幾百條日志服務端和客戶端兩邊都難受。所以這類優(yōu)化的核心思路從來不是“讓回調跑得更快”而是降低回調的執(zhí)行次數(shù)同時不破壞用戶感知的連續(xù)性。這就是防抖和節(jié)流要解決的問題兩者都在做“降頻”但降頻的規(guī)則完全不同。1.2 防抖與節(jié)流的本質差異等安靜 vs 按節(jié)拍我習慣用一個生活場景來講這個區(qū)別。防抖像電梯門只要還有人往里走門就一直重新計時直到徹底沒人了才關上。節(jié)流像地鐵班次不管站臺上擠了多少人車都是按固定間隔發(fā)一班人再多也不會連發(fā)三趟。落到代碼上防抖關注的是“事件停止后的那一刻”它把一串密集觸發(fā)合并成最后一次或第一次執(zhí)行節(jié)流關注的是“固定時間窗口內(nèi)的第一次”它保證在一段時間內(nèi)最多執(zhí)行一次中間密集的觸發(fā)直接被丟掉。這個差異決定了它們的適用面維度防抖 Debounce節(jié)流 Throttle觸發(fā)時機停止觸發(fā) wait 毫秒后執(zhí)行每隔 wait 毫秒最多執(zhí)行一次中間觸發(fā)不斷重置計時全部丟棄窗口內(nèi)的觸發(fā)被丟棄窗口末尾恢復執(zhí)行次數(shù)一整串操作通常只執(zhí)行 1 次與持續(xù)時長成正比持續(xù)越久執(zhí)行越多典型場景搜索聯(lián)想、表單校驗、窗口 resize 結束、自動保存滾動加載、滾動視差、拖拽跟隨、埋點上報、按鈕防連點用戶感知有“等一下才響應”的延遲感響應是連續(xù)的只是頻率被壓低了判斷標準其實一句話就夠了你關心的是“最終結果”還是“過程中的連續(xù)反饋”搜索框里用戶敲完才是最終結果用防抖滾動視差每挪一段就要更新一次位置用節(jié)流。搞混這兩個代碼不一定報錯但體驗會很別扭——比如把滾動加載寫成防抖用戶必須停下來不動才會觸發(fā)加載滑到底部一直滑就一直不加載這個 bug 我見過不止一次。2. 防抖從“最后一次才執(zhí)行”到可配置的工程實現(xiàn)2.1 最小可用版本與它的三個致命缺陷網(wǎng)上流傳最廣的防抖實現(xiàn)大概長這樣function debounce(fn, wait) { let timer null; return function (...args) { clearTimeout(timer); timer setTimeout(() fn.apply(this, args), wait); }; }十行不到日常用也確實能跑。但它有三個問題在真實項目里遲早會咬你一口。第一個是this指向。注意上面內(nèi)層用的是箭頭函數(shù)箭頭函數(shù)沒有自己的this它捕獲的是debounce執(zhí)行時的外層this。如果你把返回的函數(shù)掛到某個對象上或者用在類方法里this就丟了。穩(wěn)妥的寫法是內(nèi)層用普通函數(shù)同時在入口處把this存下來const ctx this;然后fn.apply(ctx, args)。第二個是返回值。有些場景需要拿到被包裝函數(shù)的返回值比如表單校驗函數(shù)返回布爾值防抖之后返回值直接變成undefined調用方拿到就懵了。這個得靠debounced.flush()或者閉包里緩存result來解決。第三個最要命沒法取消。組件卸載了、路由切走了、彈窗關閉了那個setTimeout還在隊列里時間一到照樣執(zhí)行執(zhí)行時訪問的 DOM 早就沒了輕則報Cannot read properties of null重則往已經(jīng)銷毀的 store 里寫臟數(shù)據(jù)。所以一個能上生產(chǎn)的防抖必須帶cancel。注意定時器句柄一定要在外層閉包里聲明成let不要掛到返回函數(shù)的屬性上也不要用全局變量。每個防抖實例的定時器是獨立的混用會出現(xiàn)“A 的輸入把 B 的計時清掉”這種極其難查的串擾。2.2 立即執(zhí)行、取消與返回值把核心邏輯拆開下面這版是我在項目里用了很久的實現(xiàn)支持首次立即執(zhí)行l(wèi)eading、末次執(zhí)行trailing、手動取消cancel和立即結算flushfunction debounce(fn, wait 300, options {}) { let timer null; let lastArgs null; let lastThis null; let result; const { leading false, trailing true } options; function invoke() { if (!lastArgs) return result; result fn.apply(lastThis, lastArgs); lastArgs null; lastThis null; return result; } function debounced(...args) { lastArgs args; lastThis this; // 判斷這次是不是“新一串事件”的第一次 const callNow leading !timer; if (timer) clearTimeout(timer); timer setTimeout(() { timer null; if (trailing) invoke(); }, wait); if (callNow) invoke(); return result; } debounced.cancel function () { if (timer) clearTimeout(timer); timer null; lastArgs null; lastThis null; }; debounced.flush function () { if (timer) { clearTimeout(timer); timer null; invoke(); } return result; }; return debounced; }關鍵點拆一下。callNow的判斷依據(jù)是!timer而不是別的標志位——因為在一次完整的靜默周期內(nèi)timer從setTimeout開始一直到回調里置空這段時間它都是真值只有靜默wait毫秒之后才會變回null。用timer本身當狀態(tài)能避免引入額外變量導致的時序錯亂。invoke里做了if (!lastArgs) return result;的空判斷。這是因為flush()和定時器回調都可能調用invoke如果上一次已經(jīng)執(zhí)行完把lastArgs清空了再進來就會用空參數(shù)調用一次原函數(shù)典型的“在控制臺看到一條參數(shù)為 undefined 的多余日志”。加了這個判斷flush在已經(jīng)執(zhí)行過的情況下就只返回緩存結果不會重復觸發(fā)。leading: true的場景很具體按鈕防連點。用戶點第一下要立刻有反饋不能等 300 毫秒后面連續(xù)的狂點全部丟掉同時trailing: false避免最后一次點擊又補一個請求導致用戶只點了一次卻發(fā)了兩個請求。而搜索聯(lián)想恰恰相反要leading: false, trailing: true等用戶停手再發(fā)。這兩個組合別搞反。2.3 參數(shù)計算wait 到底該給多少wait給多少沒有標準答案但有幾個錨點可以參照。前端有個公認的感知閾值100 毫秒以內(nèi)的延遲用戶基本無感超過 200 毫秒開始有“卡了一下”的感覺超過 1 秒就是明確的等待。所以防抖參數(shù)要在這個區(qū)間里找平衡。搜索聯(lián)想這類場景我一般給250 到 350 毫秒。低于 200 毫秒打字快的人還是會連發(fā)兩三個請求起不到合并效果高于 400 毫秒用戶敲完字會明顯感覺聯(lián)想詞“慢半拍”尤其是千兆寬帶下請求本身只要 30 毫秒返回延遲全壓在防抖上了。300 是個能兼顧兩邊的中間值。表單實時校驗、自動保存草稿這類可以放寬到500 到 800 毫秒。這些操作用戶本來就不期待即時反饋而且頻繁請求后端做唯一性校驗服務壓力更敏感。窗口resize結束時重排圖表給150 到 200 毫秒就夠因為反復拖拽瀏覽器窗口邊框時觸發(fā)間隔本來就比較松散。這里還有個更容易被忽略的點輸入法組合輸入。用中文拼音打字input事件會在輸入拼音字母階段就觸發(fā)比如敲“xingneng”會連續(xù)觸發(fā)七八次但此時輸入框里的值是拼音串而不是漢字。如果只做防抖不做保護用戶拼音還沒選完就可能發(fā)出去一個?qxing的請求。解決辦法一行就夠let composing false; input.addEventListener(compositionstart, () { composing true; }); input.addEventListener(compositionend, (e) { composing false; handleInput(e.target.value); // 組合結束后立刻走一次 }); input.addEventListener(input, (e) { if (composing) return; // 組合期間直接忽略 handleInput(e.target.value); });handleInput本身就是防抖過的函數(shù)compositionend那一腳相當于提前結算把拼音階段攢下的等待直接兌現(xiàn)用戶選完字的瞬間就能看到聯(lián)想結果體驗比純防抖更順。3. 節(jié)流時間戳與定時器兩條路的取舍3.1 兩種基礎寫法差在哪節(jié)流的基礎實現(xiàn)有兩條路差異全在“首次”和“末次”上很多人背了代碼卻沒搞清楚這個差異用錯了才發(fā)現(xiàn)問題。時間戳版本function throttleByTimestamp(fn, wait) { let last 0; return function (...args) { const now Date.now(); if (now - last wait) { last now; fn.apply(this, args); } }; }它的特點是last初始為0第一次調用時now - last是一個巨大的正數(shù)必然滿足條件所以首次立即執(zhí)行但最后一次觸發(fā)如果落在當前時間窗口內(nèi)就會被丟棄末次不執(zhí)行。滾動視差用這個沒問題頁面停下來時位置本身就是對的。但如果是“滾動到底部加載更多”末次不執(zhí)行就意味著用戶正好停在一個卡在閾值附近的臨界位置永遠不觸發(fā)加載得再動一下手指才行。定時器版本function throttleByTimer(fn, wait) { let timer null; return function (...args) { if (timer) return; timer setTimeout(() { timer null; fn.apply(this, args); }, wait); }; }它反過來首次要等wait毫秒才執(zhí)行首延遲但最后一次一定會執(zhí)行末次必觸發(fā)。寬表格橫向滾動同步表頭、拖拽結束后保存位置這類場景末次觸發(fā)很關鍵否則最后一下拖拽就丟了。3.2 組合版首尾都要觸發(fā)實際業(yè)務里最常需要的是“首次立即給反饋 末次補齊”把兩條路縫起來function throttle(fn, wait 200) { let lastTime 0; let timer null; function throttled(...args) { const now Date.now(); const remaining wait - (now - lastTime); if (remaining 0) { // 時間窗口已過立刻執(zhí)行并清掉可能存在的補丁定時器 if (timer) { clearTimeout(timer); timer null; } lastTime now; fn.apply(this, args); return; } // 窗口內(nèi)不再執(zhí)行但保證末次一定被補上 if (!timer) { timer setTimeout(() { timer null; lastTime Date.now(); fn.apply(this, args); }, remaining); } } throttled.cancel function () { if (timer) clearTimeout(timer); timer null; lastTime 0; }; return throttled; }代碼里有三個細節(jié)值得說。remaining 0那個分支除了執(zhí)行函數(shù)還必須清掉已有的timer——因為窗口已經(jīng)過了手動執(zhí)行完如果再讓老定時器到期補一發(fā)就變成執(zhí)行兩次了。if (!timer)這個守衛(wèi)保證一個窗口內(nèi)最多只掛一個補丁定時器不會越積越多。lastTime在補丁定時器里要重新賦值否則下一輪判斷的基準還是舊的窗口會算短。cancel里把lastTime重置成0是個小技巧。如果組件銷毀后又被復用比如彈窗關了再打開重置時間基準能讓第一次觸發(fā)立刻執(zhí)行而不是被上次遺留的時間戳卡住半個窗口。3.3 交給渲染節(jié)奏的 rAF 型節(jié)流如果節(jié)流的回調里要改樣式、做動畫、算位置那又有一層更貼合瀏覽器的選擇用requestAnimationFrame代替定時器。原因很簡單瀏覽器一幀是 16.7 毫秒60Hz 屏幕你用setTimeout(fn, 10)去做滾動動畫觸發(fā)點可能落在兩幀之間瀏覽器得把這次的樣式變更攢到下一幀才渲染反而多一次無效計算。rAF 會保證回調在渲染之前的那一幀執(zhí)行改動和繪制對齊function rafThrottle(fn) { let ticking false; return function (...args) { if (ticking) return; ticking true; const ctx this; requestAnimationFrame(() { fn.apply(ctx, args); ticking false; }); }; }它的“節(jié)拍”不再是固定毫秒數(shù)而是跟著顯示器刷新率走60Hz 屏幕相當于 16.7 毫秒一次120Hz 屏幕就是 8.3 毫秒一次。滾動監(jiān)聽里讀位置算聯(lián)動、吸頂頭部切換、視差位移我基本都用這版。有個坑要避開頁面切到后臺標簽頁時 rAF 會被暫停ticking會一直卡在true回來之后所有觸發(fā)都被吞掉。所以如果這東西用在長生命周期的全局監(jiān)聽上最好在visibilitychange里重置一下狀態(tài)或者在頁面重新可見時手動跑一次。4. 落地到真實業(yè)務三個高頻場景的完整方案4.1 搜索聯(lián)想防抖只是第一步競態(tài)才是真問題搜索框是防抖最常見的落地場景但只加防抖是半成品。真實情況是用戶先輸入“性能”請求 A 發(fā)出300 毫秒后又輸入“性能優(yōu)化”請求 B 發(fā)出。A 在路上堵了一下B 先回來了頁面渲染 B 的結果兩秒后 A 回來了把頁面覆蓋成“性能”的聯(lián)想詞。用戶看著輸入框里明晃晃的“性能優(yōu)化”四個字下面顯示的是“性能”的結果體驗直接崩掉。處理方案是在防抖之外加一層請求序號校驗let seq 0; const fetchSuggest debounce(async (keyword) { if (!keyword.trim()) { renderSuggest([]); return; } const current seq; try { const res await fetch(/api/suggest?q${encodeURIComponent(keyword)}); const data await res.json(); // 回來的時候如果序號已經(jīng)變了說明這是個過期請求直接丟棄 if (current ! seq) return; renderSuggest(data.list); } catch (err) { if (current ! seq) return; renderSuggest([]); } }, 300);seq是個單調遞增的計數(shù)器每次發(fā)請求前自增并記下當前值回來時對比。這個思路比AbortController取消請求更省事因為用戶手速快的時候可能一瞬間發(fā)出好幾個請求挨個取消反而麻煩序號校驗的好處是請求照發(fā)只是結果按最新的一版渲染。當然如果你更在意省流量用AbortController把上一個請求掐掉也行注意abort會拋出一個AbortError得在 catch 里把它單獨過濾掉別讓它進全局錯誤上報。還有個體驗細節(jié)請求發(fā)出到回來這段時間最好給輸入框一個pending狀態(tài)比如輸入框右側轉個圈。否則用戶敲完字之后 300 毫秒防抖 200 毫秒接口耗時加起來半秒多沒反應會以為頁面卡了。4.2 滾動加載與埋點上報節(jié)流 單調時鐘滾動加載更多的判斷邏輯本身不復雜核心是算距離底部的距離const onScroll throttle(() { const doc document.documentElement; const distanceToBottom doc.scrollHeight - window.innerHeight - window.scrollY; if (distanceToBottom 300 !loading hasMore) { loadNextPage(); } }, 200); window.addEventListener(scroll, onScroll, { passive: true });這里有兩個容易被忽略的點。一是{ passive: true }它告訴瀏覽器這個監(jiān)聽器不會調用preventDefault()瀏覽器就不用等回調執(zhí)行完再滾動滾動流暢度能明顯提升。滾動、觸摸移動這類高頻事件都該加上不加的話控制臺會給你一條“consider marking your touch and wheel event listeners as passive”的提示。二是閾值別給太小。distanceToBottom 300意思是距離底部還有 300 像素就開始加載這個余量是為了讓下一頁在用戶真正滑到底之前就準備好。如果你只有一個可滾動容器比如固定高度overflow: auto的列表window.scrollY就用錯了得換成容器的scrollTopinnerHeight換成clientHeightscrollHeight換成容器的scrollHeight。這種混用是滾動加載不觸發(fā)的頭號原因我在好幾個項目里都遇到過。埋點上報的場景對時鐘更敏感。用Date.now()計算時間差有個隱患用戶在系統(tǒng)設置里手動改了時間或者設備自動校時跳了一下Date.now()會出現(xiàn)跳變可能算出一個負的間隔導致節(jié)流失效now - lastTime變成負數(shù)永遠滿足條件或者長時間不觸發(fā)。穩(wěn)妥做法是用單調時鐘performance.now()const report throttle(() { const payload { page: currentPath, depth: Math.round((window.scrollY / document.body.scrollHeight) * 100), ts: Date.now() // 上報時用真實時間戳用于統(tǒng)計 }; navigator.sendBeacon(/api/track, JSON.stringify(payload)); }, 800);注意分工控制頻率用performance.now()業(yè)務時間戳用Date.now()。兩者各司其職別混著用。另外上報優(yōu)先用navigator.sendBeacon它在頁面卸載時也能把數(shù)據(jù)遞出去比在unload里發(fā)同步請求靠譜得多。4.3 按鈕防連點與框架里的清理按鈕防連點用leading: true, trailing: false的防抖最合適const handleSubmit debounce(async (formData) { submitting.value true; try { await api.submit(formData); toast.success(提交成功); } finally { submitting.value false; } }, 800, { leading: true, trailing: false });wait給 800 毫秒是為了覆蓋一次接口往返。這里有個前提防抖只能攔住“快速連點”攔不住“網(wǎng)絡慢導致的重復提交”。如果接口要跑 3 秒用戶在 800 毫秒后再點一次照樣能發(fā)出去第二個請求。所以服務端冪等唯一請求號和按鈕禁用狀態(tài)這兩層還是得有防抖只是第一道最廉價的防線別指望它解決全部問題??蚣芾镒铌P鍵的一步是清理。防抖和節(jié)流返回的函數(shù)都持有閉包和定時器組件卸載時必須調cancel否則定時器到期執(zhí)行時訪問的響應式變量、DOM 引用都已經(jīng)失效。React 里的封裝function useDebouncedCallback(fn, wait, deps []) { const fnRef useRef(fn); fnRef.current fn; const debounced useMemo( () debounce((...args) fnRef.current(...args), wait), [wait] ); useEffect(() () debounced.cancel(), [debounced]); return debounced; }fnRef這層是關鍵。如果把fn直接塞進useMemo的依賴里父組件每次重渲染傳進來的新函數(shù)都會讓防抖實例重建定時器全部作廢防抖直接失效——這是 React 里防抖“看起來沒生效”的最常見原因。用 ref 存最新的函數(shù)、useMemo只依賴wait實例就穩(wěn)定了。Vue 3 里思路一致用onUnmounted收拾import { onUnmounted } from vue; export function useThrottle(fn, wait 200) { const throttled throttle(fn, wait); onUnmounted(() throttled.cancel()); return throttled; }順帶提一句全局監(jiān)聽的問題。如果監(jiān)聽器掛在window上組件卸載時不僅要removeEventListener還要先cancel掉包裝函數(shù)。因為addEventListener存的是包裝后的引用你remove的時候必須傳同一個引用很多人重新寫了一遍throttle(fn)去移除函數(shù)引用不同根本刪不掉監(jiān)聽器就這么一直掛著內(nèi)存和 CPU 一起漏。5. 選型、排查與踩坑速查5.1 一張決策表把選型問題關掉每次有人問我“這個該用防抖還是節(jié)流”我基本按下面這張表回答實測覆蓋了九成場景場景選擇建議參數(shù)關鍵配置搜索框聯(lián)想防抖250-350mstrailing: true配合請求序號表單實時校驗防抖400-600ms監(jiān)聽compositionstart/end自動保存草稿防抖800-1500ms卸載前flush一次窗口 resize 重排防抖150-200ms圖表類可配合ResizeObserver滾動加載更多節(jié)流150-250mspassive: true注意容器內(nèi)滾動的取值埋點曝光上報節(jié)流500-1000ms用performance.now()計時拖拽跟隨、視差rAF 節(jié)流跟幀走后臺切回時重置狀態(tài)按鈕防連點防抖500-800msleading: true, trailing: false輸入框字符數(shù)統(tǒng)計不處理—純計算本身開銷可忽略最后一行值得單獨說。不是所有高頻事件都需要包裝像字符數(shù)統(tǒng)計、簡單的class切換開銷就是幾微秒硬套一層防抖反而增加復雜度還可能引入時序 bug。優(yōu)化的第一步永遠是先測量performance面板跑一遍看看到底是哪個函數(shù)吃掉了時間別憑感覺上工具。5.2 常見問題排查表下面這些是我和同事在真實項目里踩過的、并且反復出現(xiàn)在代碼評審里的問題按現(xiàn)象整理成速查表現(xiàn)象大概率原因處理方式防抖“完全沒生效”每次觸發(fā)都執(zhí)行包裝函數(shù)在每次渲染時被重建React 用useMemo固定實例Vue 放setup頂層報Cannot read properties of null組件卸載后定時器仍執(zhí)行卸載時調用cancel()節(jié)流第一次不觸發(fā)用了定時器版本首延遲換組合版或把lastTime初始化為-Infinity節(jié)流最后一次不觸發(fā)用了時間戳版本加補丁定時器或改組合版中文輸入發(fā)了一堆拼音請求沒處理組合輸入compositionstart/end攔截聯(lián)想詞和輸入框內(nèi)容對不上請求競態(tài)序號校驗或AbortController滾動加載在某個位置永遠不觸發(fā)只判斷了一次或取值對象用錯換容器滾動取值加distanceToBottom打印摘除監(jiān)聽后仍在執(zhí)行移除的引用和添加的不一致保存包裝函數(shù)引用先cancel再remove頁面切后臺回來動畫不同步rAF 暫停導致ticking卡死visibilitychange里重置5.3 我踩過的三個坑第一個坑是防抖和節(jié)流混著用。早年做一個橫滑表頭的表格我給scroll套了防抖本意是等用戶停下滑動再同步表頭位置。結果用戶習慣一路滑到底全程表頭紋絲不動停下來的瞬間“啪”地跳過去觀感極差。后來換成 rAF 節(jié)流滾動過程中表頭平滑跟隨問題當場就沒了。這件事讓我記住凡是需要過程連續(xù)反饋的一律節(jié)流只有需要等最終結果的才用防抖。第二個坑是參數(shù)給得太激進。有個項目的搜索聯(lián)想防抖給了 500 毫秒測試環(huán)境一切正常上了生產(chǎn)用戶反饋“輸入框像死了一樣”。排查半天發(fā)現(xiàn)接口在弱網(wǎng)下平均要 400 毫秒才返回500 400 將近一秒用戶早就不耐煩了。后來把防抖降到 250 毫秒同時在輸入框里加了個 loading 指示觀感立刻好轉。防抖的延遲和接口耗時是疊加的不是取最大值算參數(shù)時必須把這段一起算進去。第三個坑是過度包裝。有個列表頁給每一行的一個小圖標都套了獨立的節(jié)流函數(shù)五百行就是五百個閉包加五百個定時器句柄頁面一進去內(nèi)存就蹭蹭漲。這種情況正確的做法是把包裝函數(shù)提到列表外面所有行共享一個節(jié)流實例靠event.target或者行索引區(qū)分數(shù)據(jù)來源。包裝函數(shù)是有成本的別在循環(huán)或者列表項里現(xiàn)造。后續(xù)如果還想往深里走可以看看這兩個方向一是把防抖節(jié)流和IntersectionObserver、ResizeObserver結合起來能用觀察者解決的問題就不用監(jiān)聽事件瀏覽器原生幫你算比 JS 里反復讀布局便宜得多二是去翻一翻成熟工具庫的源碼實現(xiàn)對比一下它們在leading/trailing邊界、maxWait這類擴展參數(shù)上的處理方式會發(fā)現(xiàn)自己手寫版本里漏掉的很多邊角情況。我個人在實際操作中的體會是這兩個函數(shù)加起來不到五十行但真正吃透它帶來的收益遠超五十行代碼本身——它訓練的是對“事件頻率、執(zhí)行時機、生命周期”這三件事的敏感度這種敏感度放到任何性能優(yōu)化場景里都用得上。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
超碰在线1234区| 大但人体久久久久| 91伊人久| 啊啊在线| 亚拍在线| 天天综合网~91入口| 国产亚洲综合欧美一区| 欧美日韩性爱电影在线| 骚女天天综合网| 欧美成人综合| 亚州色图狠狠干| 天天干,夜夜爽| 都市久久精品激情亚洲| 久久色精品视频在线| 97精品久久久久中文字幕| 亚洲麻豆精品二区三区| 人人操人人摸人| 操啊国产| 大香蕉伊人网| 中韩中文字幕在线观看| 97天天在线| 日韩内射视频| 韩国久久97| 亚洲第一成人影院色播| 在线播放一级无码视频| 人妻9117c| 91搡老女人老妇女老熟女歌词翻译| 日本东京热大香蕉a片| 久久久网站| 天天躁日日躁xxxxx| 啪啪视频免费在线观看| 久久性生大片免费观看性| 天天夜夜rb| 在线免费试看60秒| 综合网97| 91美女視頻| 久久AV无码1区2区3区| 国产成人亚洲精品自产在线 | 久久青青草在线视频| 啊啊啊不要嗯嗯在线观看| 久久精品免费| 蜜桃久久久久久| 成人五月香网在线| 情色五月天久久久| A啊啊在线观看| 97内射偷拍| 欧美性爱97超碰| 啊视频在线| 一区三区啪啪| 久久精品人体AV| 丁香五月婷婷基地| 激情四射婷婷四五月天| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 精品在线78| 日本性一区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产女人操逼视频| 国产精品自在线发布| 欧美顶级黄色大片免费| 99激情视频| 日韩精品一二三四| 国产天美欧美| 9999久久久久| 国产深喉视频一区二区| 美国一区二区三区视频| 91粉嫩萝控精品福利网站_精品影音先锋国 | 狠肏骚人妻| 91丝袜激情在线| 色www精品视频在线观看| 亚洲丝袜99| 亚洲精品91| 自拍偷拍 日韩欧美| 日操粉逼逼| 秋霞一级视频在线观看免费| 欧美日韩国产在线| 禁十八久久| 风月影院男女十八禁| 亚洲久草AV色图| 综合网91| 午夜爽爽爽在线观看永久入口姬片| 在线观看中文av字幕| 桃色五月天| 一本正道久久熟女| 亚洲中文字幕av| 亚洲一区二区在线观看91| 国产91精品福利在线| 人妻AV在线| 欧美天堂日韩三级国产传媒| 超碰在线1234区| 国产精品福利视频| 免费操逼视频下载| 尤物网站91| 逼逼逼逼操操操操操操操操操午夜剧场| 久久精品国产免费观看99| 97超碰国产精品| 97碰碰日本乱偷人妻中文的| 一级乱伦网站| 超碰97起碰| 人妻色情天天操| 综合久久久久久久久91| 婷婷丁香六月天| 欧美久久久15P| 亚洲午夜精品久久久中文影院| 亚洲黑人在线| 大奶啊啊好爽| 蜜桃午夜视频一区二区 | 天堂69亚洲精品中文字| 天天射影院| 亚洲天堂电影网| 99re免费| 色噜噜综合网| 97欧美色| 极品尤物在线观看| 中文字幕第7页| 日本熟女不卡视频| 熟女自慰久久久| 屁股久久久久久| 丁香五月自拍| 夜夜春夜夜操| 乱伦日本色图AⅤ| 蜜桃久久精品一区二区三区| 久久的免费性爱视频| 99久re热视频精品98| 国产亚洲精品美女| 日韩精品 视频一区二区| 欧美三级免费伊人| 黄色免费一级在线毛片| 欧亚乱色熟一区二区三四区| 在线视频亚洲无码| 日本精品免费一区二区三区四区| 韩国三级一线观看久| 久久久久骚| 日本成人在线不卡一区二区三区 | 亚洲图片偷拍视频区| 九九九九九九九九九九九九九九九女| 久久精品国产AV一区二区三区| 久久a久久| 欧美色女人| 欧美九九爱| 97视频在线看| 性性欧美| 狠狠色婷婷777| 超碰97资源网亚洲| 99re6国产精品99re在线| 欧美美女视频| 97久久精品亚洲中六字幕| 夜草网站| 精品久久艹| 中文自拍欧美影视| 日比av无码| 中日无幕一二三四区| 富女玩鸭子一级毛片| 东北老女人的激情视频| 在线无码操| 久久有码视频| 亚洲欧美日韩国产丝袜自拍中文| 亚洲中文字母在线播放| 97干97色| 欧美国产成人在线| 伊人成人中文字幕久久网| 啊啊嗯嗯好爽| 美女诱惑在线一区| 亚洲天堂,男人| 双插性欧美一二三区| 色婷婷一区二区三区久久午夜成人不| 91蜜臀熟女| 九九精品99| 另类老少妇| 国产少妇肉丝在线观看| 国产精品宅男免费| 亚洲AV麻豆Aⅴ无码电影一 | 日本高清有码网址视频| 欧美一级特黄淫片在线观看| 老熟女91视频| 婷婷探花久久精品一区| 久久伊人在线五区| 九九热在线视频| 呦呦影院| 天天伊人| 加勒比性爱成人在线| 欧美激情亚洲色图| 超碰九色| 97在线观看播放视频| 精品午夜福利| 嫩草91| 超碰人人妻| 欧美日韩国产三级黄色| 曰韩人妻中文字幕在线| 久操电影| 97国产|免费| 天天干天天中出av| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 中文字幕一区二区三区蜜桃视频| 大香蕉伊人亚洲| 国产精品免费美女视频| 26uuu欧美日韩| www.av家庭乱伦| 国产suv精品一区二六| 免费网站观看www在线观| 亚洲国产精品久久久久婷婷青年| 色婷婷综合网| 亚洲国产欧美中文永久| aaa一级黄片| 亚洲第2页| 日韩免费在线观看不卡| 丰满人妻一区二区三区色-百度| 老司机午夜精品福利视频一区二区| 国产蜜臀精品一区免费尤物| 日韩性色b| 久久婷婷影院| 99少妇精品视频| 日韩AV熟女乱伦| 精品人妻av在线播放| 久久久精品中文字幕爱豆| 黄骗免费网站| 9999久久久| 国产999精品久久久| 女人18精品一区二区三区| 99精品久久久久久| 超碰97日韩| 加勒比无码毛片| 欧美第五页| 久久久久久裸体| 伊人96在线| 国产精品色| 人妻大香蕉| 极品出轨视频网站| 操一操摸一摸| 可以免费看黄片的视频| 操B在线观看| 被体育老师抱着c到高潮| 亚洲性爱无码乱伦av| 亚洲色图欧美视频| 免费看污网站| 丰满人妻一区二区中文| 天堂亚洲精品| 18禁美女裸体无遮挡啪啪| 国产一级作爱毛片| 久久av色| 黄站在线免费观看| 亚洲天堂男人的天堂| 女人天堂av在线播放| 亚洲啪啪视频免费| 综合久久中文字幕综合日韩精品 | nuu12国产麻豆精品| 在线看污网站| 婷婷干黄色| 国产午夜无码片在线观看影视| 免费操逼视频下载| 欲色影视综合吧| 日本黄页视频在线观看| 亚洲色人| aaa一级黄片| 亚洲综合春色| 欧美骚少妇| 精品久| 国产对白刺激视频| 狼人综合婷婷激情四射 | 欧美天堂亚洲电影院一区在线播放| 色在线69堂| 久久超碰网| 精品亚洲国产成人精品| 91狠狠综合久久久久久| 久夜视频| 99精品成人免费看| 色综合20p| 丝袜足交视频| 国产尤物AV尤物在线观看不卡| 日本色色网| 欧美韩国你懂得在线 | 久久国产精品m码| 18禁在线视频| 天天操夜夜操| 欧洲亚洲人妻无码高清久久三区四区| av在线免费一区二区| 欧美美女啪啪视频| 久久久久夜夜夜夜| 五月开心网| 欧美乱妇狂野欧美在线视频| 中文字幕在线观| 色色色色网站| Julia Annxxxxx| 男女做爰猛烈动高潮A片免费应用| 久久一区二区三区入口| 蜜臀va69| 五月丁香激情啪啪| 精品无人区麻豆乱码1区2区图片| 99国产精品视频尤物| 黄色AV影视| 欧美日韩亚洲电影| 九月丁香婷婷色| 青青青国产| 天美麻豆一区二区三区| 丁香五月激情综合国产| 中文字幕一品色图| 亚洲蜜桃V妇女| 亚洲在线欧美| 丰满人妻无码一区二区三区| 黄色片一区二区三区四区五区| 精品视频久久久久九九九九9999 | 香蕉99秘 一区精品蜜桃臀| 秋霞蝌科网日本一区| 大香蕉在线免| 国产精品国产自产高清AV| 久视频在线观看| 一区二区三区麻豆| 大香蕉手机视频| 97视频新免费| 熟女字幕| 97久久久网站| 九九热精品视频在线观看| 加勒比综合在线| 一级免费啪啪片| 风间由美日韩欧美久久| 欧美一区二区亚洲天堂| 91丝袜人妻| 综合久久婷婷| 色欲av国内精品久久久久久| 91在线免费观看处女| 人人操人人摸avav| 色综合99999| 日本视频在线观看污污污| 综合一区二区影视| 99综合网| 视频国产成人精品日本亚洲18| 欧美曰韩国产精品| 香蕉久久国产AV一区二区| 91在线观看,天天综合| 欧美日韩m| 国产东北女人在线视频| 人妻色情天天操| 黑操B| 极品综合| 日韩av在线播放不卡| 久久久久久人| 亚洲男人的天堂一区二区| 中文字幕日韩电影人妻| chaopen97久久| 欧美国产日韩清纯唯美| 国产精品嫩草久久久久| 男生通女生屁股| 久久国产99精品72福利| 色婷婷视频| 久久久不卡| 97se综合网| 欧美亚洲色图另类国产| 午夜九九九九九九| 青青欧洲黑| 91黑丝露脚| 欧美性爱日韩性爱| 蜜桃久久一区二区| 欧美高潮| 高树玛利亚无码流出| 一级久久久久久久久久久| 欧美人体性爱互联网第一页婷婷日本| 乱色老一区二区三区的观看方式| 亚洲综合另类欧美久久久| 中国乱伦一区二区| 亚洲伊人久久综合97| 色综合1991| 色情亚洲日本成人| www.97在线| 久久肏大逼| 欧美的性爱网站免费| 亚洲天堂2020| 久久风骚城市人| 5252色欧美在线| 日韩欧美视频青青| 亚洲色诱惑| 伊人久久综合精品欧美| 国产精品久久aV| 秘书高跟黑色丝袜国产91在线| 国产久久日| 亚洲国产一区二区三区在线 | 射 色综合| 留下AⅤ黄色片| AA级电影三区| a片久久久久久久久久久久 | 国产综合网站在线播放| 中文字幕乱码人妻二区三区| 人人搞人人插人人操| 91精品人妻一区二区三区蜜臀| 中文一区二区| 东京热大香焦| 97欧美色| 日日摸日日碰夜夜爽视频| 韩国毛片一区二区三区| 国产久久男人天堂| 日本熟妇精品九九| 大乔未久88一区| 9999亚洲电影| 蜜臀久久99精品| 天天摸天天碰天天添青青| 色呦呦、国产精品| 国产农村妇女精品一| 午夜呻吟欧美| 男人天堂久久日韩| 伊人伊人LD| 亚洲男人的天堂网| 青青草好吊| 欧美最婬乱婬爆婬牲视频| 2020中文字幕在线| 欧美色图99| 欧美综合1性辶| 亚洲熟女人妻中文字幕一区二区| 麻豆久久精品亚洲精品88| 三上悠亚在线毛片91| 超碰日韩人妻| 人妻天天操天天爽视频免费| 精品女人999| 国产精品天美传媒| 最新精品久久蜜桃 | 国产无遮挡| 夜夜综合| 精品国产乱子伦一区二区三区,精品一| 99999国产精品| 日韩欧美日韩| 韩国黄片aaaa| 狠狠操天天干| 性爱AV天堂| 九九热只有精品| 久久精品人妻一区| 中国一区二区亚洲人妻| 校园春色之综合网| 人妻内射一区二区在线视频| 婷婷国产精品一区二区| 亚洲欧美精品国产一区二区| 欧美日韩国产色图在线| 一区二区三区国产精产| 少妇蹲下买菜露大唇0| 资源新线在线天堂| 国产精品久久久久无码A√| 色牛牛AV| 在线视频一区二区传媒| 九九五月天| 国产呦精品系列在线观看| 操逼片国产| 久久小视频| 99蜜桃臀久久久欧美精品网站| 99re这里只有精品2| 日本成人免费一区二区三区| 超碰人人干| 九九九九日本 | 超碰调教97| 婷婷精品国产欧美精品亚洲人人爽| 九久9精品| 播播亚洲小说亚洲| 午夜后入| 手机看片日韩人妻| 亚洲日本加勒比在线| 欧美亚洲宗合色性图| aa片毛片| 亚洲精品男人的天堂| 欧洲精品久久| 黄色av网站在线播放| 久久久com| 欧美伊人电影| 亚洲精品a人片在线观看视| 久久久久久久久久黄色网| 清纯唯美亚洲综合| www久久久| 亚洲AV色图一区| 欧美激情另类一区二区| 亚洲色香| 欧美偷拍区| 美女淫穴| 秋霞一集毛片观看| 人妻出轨一区二区三区| 亚洲图片另类| 碰碰在线视频| 国产成人久久久精品免费AV| 国产情色第一第二页在线观看| 亚洲AV无码乱码| 91在线美女| 激情五月天中文字幕色| 人妻天天爽夜夜爽精品2| 亚洲欧美不卡线| 亚洲综合色男人网| 高潮精品| 久久久久久久久久久久久久久乱码| 激情欧美97| 国产按摩一区二区三区| 亚洲无992tv| 日韩三级网址| 中文人妻av高清一区| 蜜臀久久久| 亚洲国产一区二区入口| 日韩人人精品| 日本大片日本一区二区免费高清| 日本精品五区| 久久蜜桃综合网| 久久欲| 精品乱码久久久久| 思思热免费视频观看| 久久久无码精品人妻二区| 九九性视频| 亚州综合| 裸体1区| 一级A啪啪啪啪| 男同专区一区二区三区在线| 一品道视频一区二区三区| 蜜臀视频网站| 大香蕉综合在线| 久久精品国产亚洲AV成人直播| 另类图片五月天| 九九成人| 福利操逼| 一二三区视频在线观看| 国产久久视频| wwwcaobibi| 91色拍| 亚洲情色一区二区三区| 日本99视频| 操逼视频国产无套| 亚洲精品97p| 国产欧美一区二区| 中文字幕成人理论在线| 少妇久久久久久久| 日本高清加勒比| 人妻啊啊人妻啊啊| 国产 丝袜 欧美中文 另类| 91色图| 国产AB视频| 九九久久久九九| 在线性黄高清免费视频| 欧美爱三级日韩久久| 久草电影网| 狠狠夜色午夜久久综合在线| 防屏蔽在线视频| 日本操大逼| 丰满人妻aA一区二区三区| 欧美日韩97在线| 区一在线观看| 99这里有精品视频| 日本性爱不卡视频| 涩涩涩综合| 久久9久| 亚洲区 欧美区| 国产日韩欧美| 内射黑人| 中文字暮97| 91丨九色丨国产打屁股| 韩国三级理论在线| 国产亚洲精品美女久久久| 超碰91在线| 上床啊啊啊| 尤物AV免费网站| 国产熟女二区| 亚洲视频一二区| 91扒丝袜综合在线| 久久久亚洲精品电影免费看| 中文字幕在线24| 国产精品免费视频不卡| 国产CHASE男男GAYGA 毛多色婷婷| 国产亚洲精品精AV.| 曰韩人妻中文字幕在线| 日韩人妻丝袜中文字幕| 人人妻人人爽| 欧美性夜| 亚洲精品久久久久久久蜜桃臀| 少妇的嫩逼图片| 日韩在线观看AV| 亚洲,欧美,综合网| 欧美日韩不卡传媒| 精品无码少妇| 超碰欧美97| 精品熟女呻吟久久91| 美女久久久久久久久久久| www欧美91| 亚洲情色 欧美| 热热色中文无码| 欧美综合91| 亚洲欧洲激情卡通另类文学四射小说网站 | 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 夜夜高潮夜夜爽夜夜爱爱一区 | 欧美另类精品xxxx| 97人人操人人摸| 91人妻做a观看视频| 日韩欧美中文| 看一级黄色视频| 大香蕉手机视频| 国产欧美第五页| 婷婷伊人一区| 成人熟女区| 区自美91| 欧洲综合色| 97超碰超碰| 久久成人国产精品| 熟妇操花| 91精品国产综合久久久蜜臀| 69精品人人人人| 九九九精品色乱九九九| 亚洲男人天堂网站| 极品销魂美女一区二区| 日本午夜操逼| 殴美牲| 99青青草国产视频| 天天综合站| 91青青草| 人妻日日干| 熟妇熟女视频一区二区三区| 99热导航| 99999国产| 亚洲国产成人精品999| 日逼国产| 美女人妻色网站| 欧美玖玖爱免费玖玖| 久久高潮妇女视频| 午夜一区二区三区国产| 五月天激情视频| av麻豆啪啪| 97在线免费视频观看| 国产亚洲欧美每日在线| 超碰精品在线| 97bbn| 91无遮挡| 天天干天天狼在线视频| 中文字幕加勒比海高清无码免费视频| 精品无码产区一区二| 日韩av无码网站| 日韩成人大片在线观看| 97在线欧洲| 天天综合色图| 欧美极度丰满熟妇hd| 美女97超碰| 青娱乐91| 337p大胆噜噜噜噜噜91Av| 国厂麻豆77q4| 久久性爱视频免费看| 五月丁香综合啪啪| 天欧美在线| 免费啪啪av| 九九视品黄色| 欧美 亚洲| 国产超碰| 国产熟女自拍| 国产成年免费大片黄在线观看| 婷婷月色| 78m啪啪啪| 久久av一级av少妇av高潮| 99久久婷婷国产综合精品草原| 天天色怡春院| 日本1区2区不卡视频| 成人贴图日韩欧美| 99re视频这里只有精品| 狠狠色婷婷| 欧美色91| 操美女高潮抽搐白浆| 国产中文字幕在线| 免费操逼视频下载| 欧美激情亚洲情色| 网页导航五月天免费一二三区| 噜噜噜久久亚洲精品色情| 粉嫩av平台| 香蕉一区二区三区在线视频| 亚洲无码com| 男人天堂.AB| 人人搞人人插人人操| 天天操av懂色| 超碰精品日韩欧美国产| 午夜成人福利影视| 亚洲国产欧美一区二区潘金莲| 大香蕉伊人网WWWn0n| 国产兽交视频在线播放| 国产综合久久久鬼色| 国内毛片国产欧美拍| 91色图片| 被男人添B超爽视频| 久9久精品视频| 八人操人人摸人人看| 大香蕉色欲AV| 91超级碰碰碰| 久久久96| 久久久久久中文版| 3d成人精品一区二区| 国产午夜福利合集| 九九热最新| 久久一区二区三区四区五区| 97一区二区蜜臀| 青草草免费网站av| www.acm成人黄色毛片| 丁香色婷婷| 人人模人人看| 亚洲日韩熟女人妻高清在线| 91人妻PORNY九色大屁股| 日日爱99| 青女在线| 欧美国产日韩高清在线| 秋霞午夜成人福利片片| 亚洲区限制级| 成人日韩欧美| 亚洲AV成人精品网站在AV| 久久久久921| 香蕉在线一区二区三区| 囯戸精品高潮呻吟旡码| 熟妇人妻一二三区免费| 内射中出日韩在线观看视频| 国产精品呦一区二区三区| 亚州欧美在线| 69人妻精品丰满熟女区| 欧美 亚洲 偷拍自拍| 人妻精品视频一区二区三区| 性九九九九九九| 2001天天操| 人人摸人人添人人操| 射综合网| 岛国小电影| 91精品人妻偷情| 亚洲男人天堂视频| 日日天天久久啊啊aaa| 国产一区二区欧美日本| 上特色A在线| 久久精品夜色国产亚洲AV| 国产精品一二三免费网站| 中国zzijzzijzzwww精品| 超碰97COm中文| 91美女視頻| 色月天AV导航| 亚洲成人碰碰| 立川理惠无码一区二区| 欧美激情性爱视频网站| 99re在线| 黄色成年| 国产天天噜一噜久久久| 青青草乱入乱欲视频在线观看| 东京日日夜夜| 欧美日韩性爱视屏免费看了| 久久黄色视频一区二区三区| 日韩性爱小视频| 9丨久久九九九 | 波多野结衣先锋影音| 亚洲 欧美 日韩 国产一区二区| 91天天美女| 九九九九九精品十六| 欧美日韩免费专区在线| 综合色图,成人综合网| 日韩成人综合网| aaaa黄片| 中文字幕狠狠玩| 无码人妻精品一区二区中文| 性无码专区2020| 99re免费| 搡老女人老熟女91| 极品少妇久久久| 亚洲做性| 色69大色97香蕉| 97综合久第一页| 欧美综合传媒| 欧美色图片欧美色图| 97精品97久久| 欧美第一页| 91欧美丝袜| 亚欧操逼片在线观看 | 91操人| 五月丁香久久| 午夜免费视频1000| 免费看毛片操穴| 久久黄黄| 亚洲AV资源| 天天日天天舔东京热| 美女97超碰| 青青草啪啪网| 人妻免费观看| 狠狠爱夜夜干| 日韩精品人妻中文字幕不卡乱码| 国产日韩美女小穴视频网站不卡| 校园激情狠狠四射| 亚洲国产综合图区中文字幕| 热思思免费视频| 成人av福利在线观看| 亚洲h片在线免费观看| 国产中文精品一区二区在线观看| 国产综合网站在线播放| 婷婷综合激情| 禁片 高清 在线观看视频网站| 国产精品小视频一区二区三区| 一区麻豆 高清中文字幕| 四虎免费看黄| 精品大全99999| 好爽免费视频| 交换娇妻呻吟声不停中文字幕| 2018天天干在线视频| 男女一级A片大黄,一进一出| 91 亚洲 欧洲| 神马久久久久久久久久久久| 欧美高潮| 一区二区中文| 黑人嘿嘿嘿超爽免费视频| 色99在线| 欧亚久久偷拍视频| 久久久久女教师免费一区| 日韩无码人妻| 伊人网综合在线视频| 免费精品99| 97欧美色资源| 密臀在线一区尤物| 亚洲性爱免费电影| 夜夜爽33333| 久久少妇人妻| 97精| 欧美十八禁在线看| 91美女视频| 蜜乳性色无码专日粉嫩骚逼AV| 免费a级毛片av无码久久精品中文字幕| 精品国产一区探花在线观看| а√天堂资源官网在线资源| 亚洲AV无码AV吞精久久久久| 91精品少妇搡搡搡| 色吧91| 333kkkk·亚洲com久久| 大香蕉手机在线视频| 亚洲天天精品| 欧美18 在线观看| 99热精品在线观看| 午夜精品人妻二区三区| 在线a亚洲视频播放在线| 国产伦精品一区二区三区在线观| 人人妻人人色| 精品99999| 9久久精品| 在线亚洲丝袜视频网站| 91P0RNY大屁股人妻| 天天综合网站| 男人天堂免费| 国产成人自拍视频视频| 天天干一区二区| 欧美丝袜亚洲| 综合免费无码中文| 秋霞午夜视频一区二区| 污色区网站| 蜜臀av一区二区三区免费观看| 国产成人啪一区二区| 芊芊操逼视频无码| 超碰精品| 少妇熟女1区2区3区| 亚洲影视综合网| 亚洲色电影在线| 亚洲成人久久美女| 亚洲女人毛茸茸91| 无码抄逼网| 91亚洲丝袜熟女| 91天堂色男人的天堂| 麻豆天美在线喷水AV| 国产 日韩 欧美高清| 欧美久久婷婷| 日韩无码a片| 欧美色日本| 91成人久久| 国产99999久久精品| 懂色AV蜜臀无码精品APP| 日本免费一区二区不卡| 午夜久久无码1000合集| 欧美一区二区三区成人性生活| 国产A v无码专区| 亚洲色图欧美另类在线| 亚洲导航深夜福利| 日日干夜夜欢| 精品国产肉丝袜在线拍国语| 蜜臀99久久精品久久久久久| 97色碰| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 国产第25页在线观看| 欧美人妻另类在线| 日本污ww视频网站| 黑人性欧美| 超91综合网| 熟妇综合一区二区三区| 久久大线蕉一区| 国产一区在线观看无码AV| 久久精品人妻一区二区| 国产版a级片直播在线| 国产成人五月天丁香花| 大稥蕉免费视频这里只有精品| 亚洲中文字幕熟女| 欧日韩在线观看| 黄色av片三级三级三级免费看| 另类图片五月天| 日韩AV电影网站| {男男暴菊gay无套网站| 夜夜夜夜爽| 激情综合五月| 国产高清精品一区二区三区毛片| 国产成人精品午夜福利| 欧美性爱另类综合| 一级黄色性爱裸体视频| 麻豆福利视频导航| 性爱av网站| 亚洲91色| Julia Annxxxxx| h在线看免费版在线看| 免费日韩黄片| 久久久无码精品人妻二区| 久久一区无码| 家庭乱伦网站国产| 精品人妻一二三| 日韩精品国模| 18一区二区三区| 亚洲αv一区二区三区| 91九九| 风月影院男女十八禁| 综合久草| 久久草在线综合视频| 色视频蜜乳| 国产精品农村妇女精品| 久久伊人青青草| 色激情五月天| 99久久久er直播网址| 五月婷亚洲精品天堂| 涩亚洲欧洲| 四虎884a| 欧亚乱色熟一区二区三四区| 国产欧美一区激情交| 91av一区二区在线观看| 欧美色宗合| 91精品91久久久久77777| 殴洲老熟女| JULIA人妻风俗店中出电影| 国产又爽又黄| 高清无码 国产精品| 综合av社区| 9丨久久九九九| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 中文字暮97| 六月婷婷综合| 欧美人妻精品一区二区| 日韩av不卡在线看| 亚洲国产美女久久久久| 丝袜AV一区二区三区| 久久久精品九| 精人妻无码一区二区三区伊人直播 | AV九九| 精品性爱一区二区| 国产无马视频| 欧美另类精品xxxx| 中文字幕乱码人妻二区三区| JIZZJIZZ亚洲女人被躁| 久久超碰网| 91 丝袜在线播放| 后入人妻无码| 亚洲综合伊人无码久久| 东京男人天堂| 97操B| 中韩中文字幕在线观看| 国产在线激情| 国产精品久久久亚洲第一牛牛_在线观看 | 久久久久久久9999| 加勒比99999| 97亚洲综合在线| 麻豆av一区二区| 精品对白久久不卡| 久久久久99999| 天美传媒精品一区二区| 91色图| 成人无码在线视频网站| 日韩中文字幕国产| 岛国网址国产 | 日本中文字幕熟妇| 男人天堂免费| 91精品久久久久| 九九九九精品九九九九| 色哟哟 日韩精品| 国产精品点击进入在线影院| 欧美综合97www| 99re在线观看| 色老久久| 超碰导航97| 资源新线在线天堂| 亚洲男人综合| 中文字幕日韩人妻视频一区二区三区| 黄色免费网页无码| 九九色热| 久久久久骚| 嗯嗯,好大,好爽,好骚| 色九九综合AV| 男人的天堂com| 国产 日韩,欧美 自拍| 不卡一区二区日本视频| 国产伦精品一区二区三区在线观| 日韩有码一区三区| 久久久久久九九九九-美女久久久久久久-成人AV | 国产精品久久发布| 亚洲综合九| 无码二级三级| 亚洲日韩精品久久久久一区壹牛 | 大香蕉青青9| 欧美性性性| 中文字幕日韩精品久久| 亚洲Av无码成人精品国产| 久久久久久久极品香蕉视频| 东京热精品97综合网| 国产suv精品一区| 沈阳熟女高潮对白视频| 婷婷午夜成人色中色| 日韩三级一区 | 久久精品成人| 成人精品无码| 国产 丝袜 欧美中文 另类| 久久天天摸| 少妇丝袜在线观看AV| 精品视频在线观看| 在线观看精品国产免费| 人妻在线臀日韩| 亚洲色图 91| 亚洲欧洲av影音| 国产亚洲99久久精品| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 偷窥自拍亚洲天堂网爆| 五月天伊人| 精品无av| 免费观看国产不卡av| 天天影视综合网欧美精品| 亚洲怡春院| 人人弄人人摸| 九九热精品视频在线观看| 国产女人9999| 欧美性爱精品七区| 98色网| 午夜操操操| 丰满人妻一区二区三区四区| 天天日日舔舔| 国产白丝网站| 无码免费精品高清| 欧美 传媒 麻豆 日韩 偷拍| 777超碰| 激情久久久| 熟女网站最新| 欧美日韩大香蕉| 天天摸,夜夜摸| 就去色综合| 久操视频资源站公开| 一区二区三区四区久久视1| 97超碰护士| 2010男人的天堂| 97在线视频免费看| www.色操逼| 肉丝中文无码高清| 丰满人妻无码一区二区三区| 无码视频一区二区| 久操91视频| 日韩紧密久久| 日本成人在线不卡一区二区三区| 九九热超碰| 蜜臀Av一区二区三区| 日韩一级片在线看| 欧美综合自拍亚洲综合图| 亚洲一区二区性爱电影| 乱色老一区二区三区的观看方式| 操逼操逼逼操操逼91| 日日做夜狠狠爱欧美黑人| 日本东京热加勒比久久| 亚洲精品97中文字幕| 日韩国产在线观看av| 风骚少妇视频中文字幕| 亚洲色图日韩精品| 俺去啦自拍| 国产精品一区二区黄片| 欧美激情 一区| 国产女人高潮视频| 97天堂| 很黄很污的免费网站| 五月天我淫我色av| 人妻人人澡人人爽人人| 在线国产福利网址导航| 91少妇通奸网站| 亚洲AV无码乱码在线观看性色| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 夜夜免费视频| 蜜乳av首页| 日本久久超碰| 精品无码久久久| WWW啪啪的com| 中文字幕免费看| 综合啪啪| 永久电影三级在线观看| 屌妞视频久久久久久久| AV无码久久久精品| 久9精品| 色老汉色| 中国女人内射6XXXXX| 色婷婷日韩精品一区二区三区| 日韩一区二区精品视频| 国内毛片热久久思思热| 久久一本大香蕉 | 日韩精品中文字幕人妻| 一本久久精品中文字| 97最新在线播放视频| 色婷婷一区二区三区久久| 亚洲视频,小说| 国产一区二区啪啪视频| 久久神马| 激情人妻另类| 欧美极品女人的天堂| av天堂精品久久| 欧美日韩人妻精品系列一区二区三区| 久久色激情一区二区三区| 狼狼色丁香久久婷婷综合五月| 欲香欲色综合天天伊人| 伊人久久大香线综合无码| 日本精品第一视频在'| 亚洲天堂久久久久久粉红视频| 久久亚洲中文字幕视频| 91九色丰满高潮| 久久色激情一区二区三区| 一级久久久久久久久久久| 欧美激情激情xxxx欧美专区| 中文欧丝袜诱惑| 五月天黄色av| 999岛国大片| 操操吧亚洲乱伦视频| 校园春色AV天堂| 精品美女少妇一区二区三区| 激情五月天综合网| 夜嗨影院| 伊人网青青| 九九九九九精品视频| 另类专区加勒比| 国产亚卅97| 亚洲一区深夜| 国产 三级自拍| 婷婷色婷婷| 超碰九7| 嗯嗯啊啊的视频| 啊啊啊啊啊操我视频| 精品婷婷| 亚洲精品天堂久久A∨51成人漫| 九九九久久久| 91制服丝袜| 久久人妻一区二区三区高清| 一区二区三区四区姦女| a久久| 久久精品色欧美aⅴ一区二区| 国产午夜福利电影免费在线观看| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 综合少妇网| 天美一区在线| 91在线丝袜视频| 安徽熟妇视频| 偷拍亚洲高清图片| 91人妻超碰| 长长久久免费视频| 五月花婷婷| 久久婷五月天| 日韩精品一区的| 乱老女人一区二区视频| 亚洲一区二区三区四区视频| 国产精品免费日韩| 岛国大片在线观看网站入口| 久久久久久亚洲Av无码精| 色哟哟 日韩精品| 成人五月天丁香激情综合| 超碰色综合| 国产无码成人无码| 精品蜜乳AV免费观看| 偷拍亚洲| 亚洲中文字幕在线视频一区二区| 可免费观看的av毛片中日美韩| 97超碰人妻| 日韩欧美亚洲自拍偷拍| 18禁看网站一区| 岛国在线国产|