国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(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è)務(wù)里寫對、用對、調(diào)對的人并不多——我見過太多把防抖寫成節(jié)流、把節(jié)流寫成“限流”、甚至在組件卸載之后還留著定時器默默執(zhí)行的代碼。這篇就把這兩個高頻回調(diào)控制手段徹底拆開講它們各自解決什么問題實現(xiàn)上有哪些坑等待參數(shù)該怎么算在搜索聯(lián)想、滾動加載、按鈕防連點、埋點上報這些真實場景里怎么落地以及怎么和請求競態(tài)、組件生命周期配合起來。無論你是剛?cè)腴T還是已經(jīng)寫了兩三年業(yè)務(wù)代碼看完至少能做到一件事拿到一個高頻觸發(fā)的場景幾秒鐘判斷出該用哪個并且能徒手寫出來不用翻文檔。1. 先把這兩個概念釘死在場景里1.1 高頻回調(diào)為什么會把頁面拖垮瀏覽器的主線程只有一個JS 執(zhí)行、樣式計算、布局、繪制全都排在它后面。一個mousemove在高刷新率設(shè)備上一秒能觸發(fā)一百多次一次scroll在慣性滾動里也能輕松跑到六十次以上input事件更是每敲一個字符就來一次?;卣{(diào)本身不貴貴的是回調(diào)里通常干的事讀scrollTop、讀offsetHeight、改 DOM、發(fā)請求。這里有個很多人不知道的細節(jié)在同一個任務(wù)里先寫 DOM 樣式、緊接著讀布局屬性瀏覽器為了給你正確的值會被迫立刻做一次同步布局計算。你寫十次讀十次就是十次強制重排。滾動監(jiān)聽里那種“讀位置—改樣式—再讀位置”的寫法掉幀就是這么來的。回調(diào)頻率越高這種強制同步布局發(fā)生得越密集最終表現(xiàn)就是滾動條拖不動、手指劃下去畫面發(fā)黏。請求風(fēng)暴是另一個后果。搜索框如果不做控制用戶輸入“性能優(yōu)化”四個字會發(fā)出四次請求而且這四次請求的返回順序完全不保證——第一字的結(jié)果可能最后才回來把正確結(jié)果覆蓋掉用戶看到的聯(lián)想詞永遠慢半拍。埋點上報更典型滾動一次上報一次一篇文章從頭滑到尾能給你刷出幾百條日志服務(wù)端和客戶端兩邊都難受。所以這類優(yōu)化的核心思路從來不是“讓回調(diào)跑得更快”而是降低回調(diào)的執(zhí)行次數(shù)同時不破壞用戶感知的連續(xù)性。這就是防抖和節(jié)流要解決的問題兩者都在做“降頻”但降頻的規(guī)則完全不同。1.2 防抖與節(jié)流的本質(zhì)差異等安靜 vs 按節(jié)拍我習(xí)慣用一個生活場景來講這個區(qū)別。防抖像電梯門只要還有人往里走門就一直重新計時直到徹底沒人了才關(guān)上。節(jié)流像地鐵班次不管站臺上擠了多少人車都是按固定間隔發(fā)一班人再多也不會連發(fā)三趟。落到代碼上防抖關(guān)注的是“事件停止后的那一刻”它把一串密集觸發(fā)合并成最后一次或第一次執(zhí)行節(jié)流關(guān)注的是“固定時間窗口內(nèi)的第一次”它保證在一段時間內(nèi)最多執(zhí)行一次中間密集的觸發(fā)直接被丟掉。這個差異決定了它們的適用面維度防抖 Debounce節(jié)流 Throttle觸發(fā)時機停止觸發(fā) wait 毫秒后執(zhí)行每隔 wait 毫秒最多執(zhí)行一次中間觸發(fā)不斷重置計時全部丟棄窗口內(nèi)的觸發(fā)被丟棄窗口末尾恢復(fù)執(zhí)行次數(shù)一整串操作通常只執(zhí)行 1 次與持續(xù)時長成正比持續(xù)越久執(zhí)行越多典型場景搜索聯(lián)想、表單校驗、窗口 resize 結(jié)束、自動保存滾動加載、滾動視差、拖拽跟隨、埋點上報、按鈕防連點用戶感知有“等一下才響應(yīng)”的延遲感響應(yīng)是連續(xù)的只是頻率被壓低了判斷標(biāo)準(zhǔn)其實一句話就夠了你關(guān)心的是“最終結(jié)果”還是“過程中的連續(xù)反饋”搜索框里用戶敲完才是最終結(jié)果用防抖滾動視差每挪一段就要更新一次位置用節(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調(diào)用方拿到就懵了。這個得靠debounced.flush()或者閉包里緩存result來解決。第三個最要命沒法取消。組件卸載了、路由切走了、彈窗關(guān)閉了那個setTimeout還在隊列里時間一到照樣執(zhí)行執(zhí)行時訪問的 DOM 早就沒了輕則報Cannot read properties of null重則往已經(jīng)銷毀的 store 里寫臟數(shù)據(jù)。所以一個能上生產(chǎn)的防抖必須帶cancel。注意定時器句柄一定要在外層閉包里聲明成let不要掛到返回函數(shù)的屬性上也不要用全局變量。每個防抖實例的定時器是獨立的混用會出現(xiàn)“A 的輸入把 B 的計時清掉”這種極其難查的串?dāng)_。2.2 立即執(zhí)行、取消與返回值把核心邏輯拆開下面這版是我在項目里用了很久的實現(xiàn)支持首次立即執(zhí)行l(wèi)eading、末次執(zhí)行trailing、手動取消cancel和立即結(jié)算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; }關(guān)鍵點拆一下。callNow的判斷依據(jù)是!timer而不是別的標(biāo)志位——因為在一次完整的靜默周期內(nèi)timer從setTimeout開始一直到回調(diào)里置空這段時間它都是真值只有靜默wait毫秒之后才會變回null。用timer本身當(dāng)狀態(tài)能避免引入額外變量導(dǎo)致的時序錯亂。invoke里做了if (!lastArgs) return result;的空判斷。這是因為flush()和定時器回調(diào)都可能調(diào)用invoke如果上一次已經(jīng)執(zhí)行完把lastArgs清空了再進來就會用空參數(shù)調(diào)用一次原函數(shù)典型的“在控制臺看到一條參數(shù)為 undefined 的多余日志”。加了這個判斷flush在已經(jīng)執(zhí)行過的情況下就只返回緩存結(jié)果不會重復(fù)觸發(fā)。leading: true的場景很具體按鈕防連點。用戶點第一下要立刻有反饋不能等 300 毫秒后面連續(xù)的狂點全部丟掉同時trailing: false避免最后一次點擊又補一個請求導(dǎo)致用戶只點了一次卻發(fā)了兩個請求。而搜索聯(lián)想恰恰相反要leading: false, trailing: true等用戶停手再發(fā)。這兩個組合別搞反。2.3 參數(shù)計算wait 到底該給多少wait給多少沒有標(biāo)準(zhǔn)答案但有幾個錨點可以參照。前端有個公認的感知閾值100 毫秒以內(nèi)的延遲用戶基本無感超過 200 毫秒開始有“卡了一下”的感覺超過 1 秒就是明確的等待。所以防抖參數(shù)要在這個區(qū)間里找平衡。搜索聯(lián)想這類場景我一般給250 到 350 毫秒。低于 200 毫秒打字快的人還是會連發(fā)兩三個請求起不到合并效果高于 400 毫秒用戶敲完字會明顯感覺聯(lián)想詞“慢半拍”尤其是千兆寬帶下請求本身只要 30 毫秒返回延遲全壓在防抖上了。300 是個能兼顧兩邊的中間值。表單實時校驗、自動保存草稿這類可以放寬到500 到 800 毫秒。這些操作用戶本來就不期待即時反饋而且頻繁請求后端做唯一性校驗服務(wù)壓力更敏感。窗口resize結(jié)束時重排圖表給150 到 200 毫秒就夠因為反復(fù)拖拽瀏覽器窗口邊框時觸發(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); // 組合結(jié)束后立刻走一次 }); input.addEventListener(input, (e) { if (composing) return; // 組合期間直接忽略 handleInput(e.target.value); });handleInput本身就是防抖過的函數(shù)compositionend那一腳相當(dāng)于提前結(jié)算把拼音階段攢下的等待直接兌現(xiàn)用戶選完字的瞬間就能看到聯(lián)想結(jié)果體驗比純防抖更順。3. 節(jié)流時間戳與定時器兩條路的取舍3.1 兩種基礎(chǔ)寫法差在哪節(jié)流的基礎(chǔ)實現(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第一次調(diào)用時now - last是一個巨大的正數(shù)必然滿足條件所以首次立即執(zhí)行但最后一次觸發(fā)如果落在當(dāng)前時間窗口內(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ā)。寬表格橫向滾動同步表頭、拖拽結(jié)束后保存位置這類場景末次觸發(fā)很關(guān)鍵否則最后一下拖拽就丟了。3.2 組合版首尾都要觸發(fā)實際業(yè)務(wù)里最常需要的是“首次立即給反饋 末次補齊”把兩條路縫起來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在補丁定時器里要重新賦值否則下一輪判斷的基準(zhǔn)還是舊的窗口會算短。cancel里把lastTime重置成0是個小技巧。如果組件銷毀后又被復(fù)用比如彈窗關(guān)了再打開重置時間基準(zhǔn)能讓第一次觸發(fā)立刻執(zhí)行而不是被上次遺留的時間戳卡住半個窗口。3.3 交給渲染節(jié)奏的 rAF 型節(jié)流如果節(jié)流的回調(diào)里要改樣式、做動畫、算位置那又有一層更貼合瀏覽器的選擇用requestAnimationFrame代替定時器。原因很簡單瀏覽器一幀是 16.7 毫秒60Hz 屏幕你用setTimeout(fn, 10)去做滾動動畫觸發(fā)點可能落在兩幀之間瀏覽器得把這次的樣式變更攢到下一幀才渲染反而多一次無效計算。rAF 會保證回調(diào)在渲染之前的那一幀執(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 屏幕相當(dāng)于 16.7 毫秒一次120Hz 屏幕就是 8.3 毫秒一次。滾動監(jiān)聽里讀位置算聯(lián)動、吸頂頭部切換、視差位移我基本都用這版。有個坑要避開頁面切到后臺標(biāo)簽頁時 rAF 會被暫停ticking會一直卡在true回來之后所有觸發(fā)都被吞掉。所以如果這東西用在長生命周期的全局監(jiān)聽上最好在visibilitychange里重置一下狀態(tài)或者在頁面重新可見時手動跑一次。4. 落地到真實業(yè)務(wù)三個高頻場景的完整方案4.1 搜索聯(lián)想防抖只是第一步競態(tài)才是真問題搜索框是防抖最常見的落地場景但只加防抖是半成品。真實情況是用戶先輸入“性能”請求 A 發(fā)出300 毫秒后又輸入“性能優(yōu)化”請求 B 發(fā)出。A 在路上堵了一下B 先回來了頁面渲染 B 的結(jié)果兩秒后 A 回來了把頁面覆蓋成“性能”的聯(lián)想詞。用戶看著輸入框里明晃晃的“性能優(yōu)化”四個字下面顯示的是“性能”的結(jié)果體驗直接崩掉。處理方案是在防抖之外加一層請求序號校驗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是個單調(diào)遞增的計數(shù)器每次發(fā)請求前自增并記下當(dāng)前值回來時對比。這個思路比AbortController取消請求更省事因為用戶手速快的時候可能一瞬間發(fā)出好幾個請求挨個取消反而麻煩序號校驗的好處是請求照發(fā)只是結(jié)果按最新的一版渲染。當(dāng)然如果你更在意省流量用AbortController把上一個請求掐掉也行注意abort會拋出一個AbortError得在 catch 里把它單獨過濾掉別讓它進全局錯誤上報。還有個體驗細節(jié)請求發(fā)出到回來這段時間最好給輸入框一個pending狀態(tài)比如輸入框右側(cè)轉(zhuǎn)個圈。否則用戶敲完字之后 300 毫秒防抖 200 毫秒接口耗時加起來半秒多沒反應(yīng)會以為頁面卡了。4.2 滾動加載與埋點上報節(jié)流 單調(diào)時鐘滾動加載更多的判斷邏輯本身不復(fù)雜核心是算距離底部的距離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)聽器不會調(diào)用preventDefault()瀏覽器就不用等回調(diào)執(zhí)行完再滾動滾動流暢度能明顯提升。滾動、觸摸移動這類高頻事件都該加上不加的話控制臺會給你一條“consider marking your touch and wheel event listeners as passive”的提示。二是閾值別給太小。distanceToBottom 300意思是距離底部還有 300 像素就開始加載這個余量是為了讓下一頁在用戶真正滑到底之前就準(zhǔn)備好。如果你只有一個可滾動容器比如固定高度overflow: auto的列表window.scrollY就用錯了得換成容器的scrollTopinnerHeight換成clientHeightscrollHeight換成容器的scrollHeight。這種混用是滾動加載不觸發(fā)的頭號原因我在好幾個項目里都遇到過。埋點上報的場景對時鐘更敏感。用Date.now()計算時間差有個隱患用戶在系統(tǒng)設(shè)置里手動改了時間或者設(shè)備自動校時跳了一下Date.now()會出現(xiàn)跳變可能算出一個負的間隔導(dǎo)致節(jié)流失效now - lastTime變成負數(shù)永遠滿足條件或者長時間不觸發(fā)。穩(wěn)妥做法是用單調(diào)時鐘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è)務(wù)時間戳用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)絡(luò)慢導(dǎo)致的重復(fù)提交”。如果接口要跑 3 秒用戶在 800 毫秒后再點一次照樣能發(fā)出去第二個請求。所以服務(wù)端冪等唯一請求號和按鈕禁用狀態(tài)這兩層還是得有防抖只是第一道最廉價的防線別指望它解決全部問題??蚣芾镒铌P(guān)鍵的一步是清理。防抖和節(jié)流返回的函數(shù)都持有閉包和定時器組件卸載時必須調(diào)cancel否則定時器到期執(zhí)行時訪問的響應(yīng)式變量、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這層是關(guān)鍵。如果把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 一張決策表把選型問題關(guān)掉每次有人問我“這個該用防抖還是節(jié)流”我基本按下面這張表回答實測覆蓋了九成場景場景選擇建議參數(shù)關(guān)鍵配置搜索框聯(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切換開銷就是幾微秒硬套一層防抖反而增加復(fù)雜度還可能引入時序 bug。優(yōu)化的第一步永遠是先測量performance面板跑一遍看看到底是哪個函數(shù)吃掉了時間別憑感覺上工具。5.2 常見問題排查表下面這些是我和同事在真實項目里踩過的、并且反復(fù)出現(xiàn)在代碼評審里的問題按現(xiàn)象整理成速查表現(xiàn)象大概率原因處理方式防抖“完全沒生效”每次觸發(fā)都執(zhí)行包裝函數(shù)在每次渲染時被重建React 用useMemo固定實例Vue 放setup頂層報Cannot read properties of null組件卸載后定時器仍執(zhí)行卸載時調(diào)用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 暫停導(dǎo)致ticking卡死visibilitychange里重置5.3 我踩過的三個坑第一個坑是防抖和節(jié)流混著用。早年做一個橫滑表頭的表格我給scroll套了防抖本意是等用戶停下滑動再同步表頭位置。結(jié)果用戶習(xí)慣一路滑到底全程表頭紋絲不動停下來的瞬間“啪”地跳過去觀感極差。后來換成 rAF 節(jié)流滾動過程中表頭平滑跟隨問題當(dāng)場就沒了。這件事讓我記住凡是需要過程連續(xù)反饋的一律節(jié)流只有需要等最終結(jié)果的才用防抖。第二個坑是參數(shù)給得太激進。有個項目的搜索聯(lián)想防抖給了 500 毫秒測試環(huán)境一切正常上了生產(chǎn)用戶反饋“輸入框像死了一樣”。排查半天發(fā)現(xiàn)接口在弱網(wǎng)下平均要 400 毫秒才返回500 400 將近一秒用戶早就不耐煩了。后來把防抖降到 250 毫秒同時在輸入框里加了個 loading 指示觀感立刻好轉(zhuǎn)。防抖的延遲和接口耗時是疊加的不是取最大值算參數(shù)時必須把這段一起算進去。第三個坑是過度包裝。有個列表頁給每一行的一個小圖標(biāo)都套了獨立的節(jié)流函數(shù)五百行就是五百個閉包加五百個定時器句柄頁面一進去內(nèi)存就蹭蹭漲。這種情況正確的做法是把包裝函數(shù)提到列表外面所有行共享一個節(jié)流實例靠event.target或者行索引區(qū)分數(shù)據(jù)來源。包裝函數(shù)是有成本的別在循環(huán)或者列表項里現(xiàn)造。后續(xù)如果還想往深里走可以看看這兩個方向一是把防抖節(jié)流和IntersectionObserver、ResizeObserver結(jié)合起來能用觀察者解決的問題就不用監(jiān)聽事件瀏覽器原生幫你算比 JS 里反復(fù)讀布局便宜得多二是去翻一翻成熟工具庫的源碼實現(xiàn)對比一下它們在leading/trailing邊界、maxWait這類擴展參數(shù)上的處理方式會發(fā)現(xiàn)自己手寫版本里漏掉的很多邊角情況。我個人在實際操作中的體會是這兩個函數(shù)加起來不到五十行但真正吃透它帶來的收益遠超五十行代碼本身——它訓(xùn)練的是對“事件頻率、執(zhí)行時機、生命周期”這三件事的敏感度這種敏感度放到任何性能優(yōu)化場景里都用得上。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩卡一卡二卡三在线| 亚洲欧美激情小说| 麻豆国产97在线| 欧美精品双插| 色情综合网| 一区二区三区高清| 欧美色图 人妻| 激情深爱五月天| 精品久久久久久中文字幕视频免费| 97蜜桃综合| 国产精品自在线发布| 欧色网址| 青草视频人妻在线观看| 色嘟嘟人妻天堂网| 逼逼逼逼操操操操操操操操操午夜剧场 | 国产三级中文有码在线视频| 一级性爱视频免费在线| 日夜伊人网| 2020中文字幕在线| 国内97干免费看| 欧美日韩国产传媒在线精品| 国产精品一二三在线看| 久久超碰国产一区二区三区| 久久大香蕉97| 开心六月色| 婷婷色婷婷| Av手机版天堂网| 亚洲av资源| 99精品久久久久久| 欧亚第一综合网| 在线啊v一区| 国产精品99精品视频网站| 国产成人五月天丁香花| 九九热av| 蜜臀无码一区二区| 亚洲Av无码成人精品国产| 天美传媒精品久久视频| 美国三级日本三级久久99| 东京热AV男人的天堂| 97操B| 国产AV天美| 久综合网| 婷婷激情四射| 五月天婷婷久久| 日产操逼| 精品国产AV一区天美传媒| 人人操超碰在线| 综合色播| 日韩国产不卡在线视频| 国产操逼视频在线观看| 边做饭边操逼逼| 亚洲天堂男| 97在线观看视频| 啊啊啊啊啊啊啊啊啊在线观看| 久久有碼| 国产怡红院在线| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 国产日韩欧美| 人人乐大香蕉| 中文字暮97| 无码91| 黑人美精品 A片| 台湾一区国产高清在线| 91成人精品在线播放| 日婷婷| 视频国产精品未满十八禁止在线观看| 日本操逼二区| 欧美日本一区二区a人| 欧美日韩国产高清在线一二三区 | 自拍偷拍 日韩无码| 中文无码一二三区| 激情亚洲天堂| 日本孕妇孕交| 九九九九九精品| 成人97人人超碰人人| 操逼片国产| 熟女六十路| 国产精品宅男免费| 亚洲色天堂日韩中| 日韩精彩视频| 激情综合网激情综合| 无码精品久久| 精品久久久久,69国产成人精| 激情综合五月婷婷| www五月| 欧美黄色图片| 亚洲一区中文字幕| 久久久97| 色性综合| 91精品国| 少妇高潮对白在线观看| 国产suv精品一区二区四| 青青草色插素人| 国产尤物AV尤物在线观看不卡| 久久久久久裸体| 福利风月五月天影院| 性性久久| 91综合网站| 久久久久亚洲Aⅴ无码| 久热久一区二区三区| 九九九九一级| 日韩性爱1级片视频| 影音先锋乱| 69AV女优男人的天堂| 91高潮| 国产亚洲精品美女久久久久久2021| 超碰538| 九九九九九九亚洲| 亚洲影视第一页| 欧美性爱第一页久久| 日美免费黄片| 亚洲自拍一区夜夜操| 熟女精品一区二区在线观看| 日本久久女同性恋视频| 永久免费发布性爱网| 久草久热| 国产久久久久久| av绯色| 久久天天性久久伊人| 欧美天天在线| 天堂中文日本在线观看| 日韩美女,国产传媒,视频一区| 黄色一区三区| 伊人精品久久网站| 夜夜騷av、一區二區| 啊啊啊啊网站| 殴美牲| 91影视亚洲| 蜜乳AV免费观看| 国产吞精a级片激情电影| 久久夜夜夜| 粉嫩久久久极品| 精品国产人成在线| 最新日产中文在线麻豆| 免费国产视频| 91Chinese在线| 91国产大片| 麻豆久久一区二区三区| 91xingse| 97欧美久久久久久久| 免费a级毛片av无码久久精品中文字幕| 久久久专区| 91啦人妻| 91久久久视| 人人操人人操人人人操| 啊啊啊不要嗯嗯在线观看| 免费观看国产小粉嫩喷水精品午| 热热色国产一二区AV| 亚洲高清国产理伦片| 伊人aaa| 日韩A优精品在线观看| 国产精品久久久久999| 成人麻豆av电影网站| 97色色国产视频| 欧美综合色,www| 五月丁香色综合| 美女91网站| 女人喷水视频在线观看| 新91视频.cmp| 久久婷婷在线观看视频| 日韩人妻播放| 男人精品区| 久久草草欧美精品| 国产精品无码久久久久2025| 少妇大屁屁| 精品一区二区三区蜜桃臀赵总 | 欧亚无码视频| 日本熟妇精品九九| 99色热| 亚洲婷婷丁香在线| 美女诱惑1区2区| 思思热久久成人| 四虎精品永久在线观看| 澳门人妻久久| 国产男女无套视频免费观看| 在线免费观看高清无码视频| 美女诱惑在线一区| 久久久草成人网站久久久草成人久久久草久久久| 日韩无限资源| 国产九区| 9/A片| 国产传媒午夜理伦精品| 久久久青青草| 啊啊啊啊好疼视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 综合网亚洲| 人人乐大香蕉| 无码人妻精品一区二区中文| 91网站18禁| 韩日精品福利视频一区不卡在线免| 成人五级久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 美女t无毒不卡不卡| 水澄无码AV| 亚洲无码?第一页| 久久久9999| 欧美一区二区三熟女剧情| 天天欧美色| 久久XX| 熟女五十路一区二区三| 成年人网站在线免费观看| 成人久久精品| 日日干夜夜骑| 熟女久久久| 欧美视频激情久久久久久| 日本国产高清色www视频在线| 为用户提供免费看黄网址在线观看| 激情抓乳插进去啪啪啪日韩 | 九九探花视频在线观看| 欧洲综合色| 人人妻人人操人人乐| 日韩美女啪啪一区| 免费的黄片有限公司| 伊人久久AV诱惑悠悠| 激情视频一二三| 色综合中文字幕不卡| 另类专区加勒比| 狼人狠干| 99re只有精品| 国产亚洲日本精品在线| 日韩猛交| 日本最新1区2区3区| a在线观看| 国产福利精品98视频| 免费农村成人少妇人妻Aa一区二区视频| 碰碰97| 欧美后入视频| 香蕉一区二区三区在线视频| 欧美日韩岛国大片在线观看| 精品国模无码| 91亚洲电影| 韩国毛片一区二区三区| 麻豆av一区二区三区| 午夜免费福利视频一区| 囯戸精品高潮呻吟旡码| 久久精品国产亚洲粉嫩| 国产后入清纯| 亚洲中亚日激情视频| 欧美日韩香蕉| 国产福利小视频高清在线观看| 久热一区二区| 久一区久久蜜桃| 久久精品99| 岛国片在线视频网站| 日本色色网| a天堂视频| 97看操| 男女啪啪网站免费视频| 激情综合五月| 新精精品久久精品| 久久久蜜桃臀无码视频| 婷婷综合久久| 欧美春色| 久久久九九九九| 97AV在线免费观看| 久久久亚洲高清不打码| 日本东京热大香蕉a片| yaouchengrenav| 亚洲一区中文字幕一区| 亚洲人码13| 亚洲人妻中文高清| 亚洲欧美国产成人综合不卡| 国产超碰人人操| 9久9久9久9久视频网站| 欧美精品欧美精品系列 | 免费αⅴ在线观看| 久久亚洲日韩熟女精品| 啪啪自拍九九综合| 俄罗斯一区二区视频在线观看| 日韩偷拍一区二区三区| 蜜桃色色网站视频三区| 天天综合站| 女生久久网| 男人的天堂激情| xxx0国产在线播放| 欧美午夜视频免费观看| 岛国小电影| 91在线色| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 大香蕉www.超碰| 亚洲AV性爱电影| 熟女被操视频网址| 亚洲欧洲日产国产综合网| 日韩成人人妻网站| 国产精品免费日韩| 中文高清一区二区的| 午夜福利区| 亚欧美综合网| 人妻精品视频一区二区| 欧美少妇高潮久久91| 青青草久久| 国产成人拍国产亚洲精品| 婷婷久久综合久| 亚洲五区熟女| A 天堂| 天天弄天天操| 中文字幕一区二区无码成人| 久久久精品视频免费观看| 91亚·色| 日韩成人无码| 超碰97玖玖爱| 99精品视频在线观看免费| 99天天超碰| 无码直播久久久| 色盈盈影院| 新亚洲无码| 欧美综合第一| 99老司机精品视频在线观看| 久久久久久中文版| 99自拍视频在线观看| 久久久久亚洲一区女同性恋中文字幕| 久久成人国产精品| 91在线免费观看处女| 青青草原成人| 丁香五月av| 波多野42部激情无码喷潮| 91xingse| 午夜偷拍久久熟女| 天美传媒AV在线| 久久综合乱子伦国产免费| 黄色人人| 蜜臀久久99精品久久久久久酒店 | 婷婷香蕉| 亚洲精品97久久| 亚洲欧美一区二区三区在钱蜜桃 | 色臀aV| 96精品在线| 69av一区二区三区| 日韩干B| 国产suv精品一区二区四| 欧美成人一级麻豆| 欧美日韩亚洲五月天婷婷| 欧美国产欧美在线观看| 男人天堂新在线| 色香综合天天影视综合 | 天天狠| 爽极品影院| 大色综合网| 人妻内射一区二区在线视频| www.av在线视频| 久久精品中文| 综合啪啪| 欧美日韩午夜精品一区二区三区| 九九九精品一区二区无码| 青草伊人网| 黄色av一区二区在线| 亚洲色图欧美色图在线播放| 国产一区二区三区免费视频在性观看 | 精品视频一二三中文| 女优大全 - 91n| 99九九久久| 日本日皮视频逼| 国产在线视频午夜精华在| 男生女生啊啊啊啊| 天天弄天天操| 日韩黄片影院| 韩国一级做a久久久久| 精品国产乱码久久久久久久久久毛片 | 日本性爱少妇| 国产专区第一页| 亚洲欧美日韩激情不卡| 欧美女同在线| 久久九七| 免费成人在线熟妇网| 亚州色站 日韩电影| 操逼片国产| 成人免费看吃奶视频网站| 美女91av| 欧美女同在线| 老外又粗又长一晚做五次| 老女人91| 欧美色图电影| 中日韓欧美高清| 欧美人妻制服| 午夜精品久久久久久久久久久久久 | 精品无码一区二区三区| 国语对白露脸XXXXXX| 91丝袜在线观看| 亚洲无码一区成人免费午夜| 成人性交午夜免费片| 国产400孕妇孕交群| 天堂性色| 人人干黄色| 超碰成人公开| 欧亚在线视频| 日本999精品视频| 国内精品不卡无毒99999| 国产夜夜操| 久久天堂网| 激情五月天中文字幕色| 国产美女在线精品免费看| 凹凸久久人人| 日本一区二区电影网站| 大香网伊人久久综合网eew| 超碰 欧美| 嫩草美女久久| 日韩另类色图| 久操免费电影| 密乳无码| 性色乱AV一区二区| 欧美色图20P| 国产精品一区av在线| 伊人色综合网| 香蕉av一区二区三区| 久久久久久久性爱| 久久一二三四五六七八九区区区| 区一二区日韩亚洲乱码av电影| 男人的天堂日韩| 欧美性夜| 久久小视频| 偷拍亚洲视频一区二区三区四区| 久久午夜鲁丝片| 欧美黄页在线| 欧美自拍网| 无码动漫av中文字幕| 男人的天堂不卡一区二区| 好一吊区二区| 伊人久久大香大香线蕉中文| 99热国产| 极品白嫩美女白浆成人福利在线看| 久久久久9999精品九九九| 玖玖爱在线视频免费观看| 韩国一级婬片A片AAAAA| 人妻喷水| 天美国产三级传媒| 黄片免费日韩| 无码人妻系列少妇| 日韩一级片在线看| 九9精品| 99re在线观看| 欧美性爱综合,免费| 怡红院怡春院| 亚洲熟女性高潮久久久| 人妻激情视频| 色噜噜狠狠色综合日日| 丰满人妻一区二区三区| 67914亚洲精品| 成人毛片免费| 久久久性少妇| 97色爱| 国产热av| 国产三级多多影院2022国产AA一级毛片无码 | 成年女人18级毛片毛片免费观看| 精品亚洲天堂| 亚洲天堂人人妻| 国产51色综合久久免费| 九久久精品| 日韩不卡毛片Av免费高清| 清纯唯美综合亚洲| 人人透人人操| 交换娇妻呻吟声不停中文字幕| 加勒比东京热五月天天堂网| 中文字幕成人理论在线| 日本精品五区| 四虎在线视频| 亚洲风情综合网| 丝袜喷水在线| 97中文超碰| 亚洲高清国产理伦片| 亚洲丝袜综合| 日韩欧美女求操每天更新| 五月婷婷hd| 日本特黄f c2| 91美女丝袜诱惑视频| 人人操人人大香蕉| 玖玖爱免费观看视频| 国产乱伦亚洲| 影音先锋每日最新资源在线观看 | 狠狠97| 精品美女人人干| 国产精品久久久久久久久久久久久久久久 | 在线日韩日本亚洲国产| 亚洲一区二区三区春色| 26uuu国产亚洲综合| 超碰在线一区二区| 久久婷婷电影网| 夜夜久久久| 成熟熟女国产精品一区二区| 青青草男人天堂| 午夜舔阴达高潮视频免费看| 日本黄色精品专区网站| 强奸乱伦AV网址| 日本色色色视频| 91狠婷| 五月天色五月| 一本一道人妻久久一区二区三区| 99久久e免费热视| 怡红院成人视频| 久草新在线| 久操网视频| 欧美成97爱| 超碰在线人人射| 国产福利电影| 九九久久精品| 亚洲色图 图片| 清纯唯美综合| 无码不卡亚洲成?人片| 欧美啪啪啪91| 国产av波波国产精品| 91精品久久久久久77777| 肉丝网站91| 亚洲影视第一页| 男人天堂电影院| 秋霞一级视频在线观看免费| 丝袜内射| 欧美亚洲清纯| 91一区二区三区蜜桃| 91精品黄在线观看| 欧美人妻色| 亚洲图片欧美| 操九九九九九九| 亚洲国产熟妇综合色专区| 夜夜天天噜狠狠爱2021| 91一起操| 玖玖大干人妻| 男人天堂黄片| 久久av色| 两女互慰AV高潮喷水在线观看| 97五月天| 日韩欧视频| 日韩久久激情精品| 黑人干亚洲| 性色av蜜臀av色欲aV| 欧美视频激情久久久久久| 99无码狠狠久久| 熟妇亚洲一区二区三区| WWW操逼| 四虎AV在线观看| 老熟妇一区二区三区…| 日日干夜夜操视频h| 碰碰97| 欧美不卡在线美女| 久久久久亚洲熟妇熟女| 性生活久久久久久久久久| 久久精品毛片免费不卡| 麻豆一区二区AV天美| 日韩有码免费视频| 精品人妻一区二区视频| 欧美亚州色的图| 丁香婷婷大香蕉| 深夜视频| 久久久禁| 九九热精品在线| 岛国片在线播放| 亚洲综合性网址| 日韩精品区二区三区不卡| 日韩黄色片子| 熟女探花啪啪| 18+91网站| 日韩精品熟妇| 欧美激情总合网| 色婷婷基地| 国产精品婬乱一级毛片彝族| 97操| 日本精品国产视频| 伊人五月天| 国产欧美一区激情交| 97鸡把在线视频| 欧美人妻中出| 精品福利视频| 亚洲欧美日韩电影网站一区 | 大香蕉乱级| 中文字幕五区| 美欧色综合| 无码日韩网站| 久久人妻一区二区三区高清| 久久久精品国产亚洲伊人| 黑人操一区二区| 久久五月天婷婷丁香中文字幕| 美女91网| 久久久久久久综合,国产| 久久综合女优| 四虎免费看黄| 久久骚| 操逼视频国产无套| 大香交| 怡春院久久| 可乐操亚洲蜜911| 91热| 人人性爱视频免费| 岛国毛片手机在线观看| 秋霞蝌科网日本一区| 亚洲国产成人精品无码专区| 强奸乱伦Av网| 久久日韩毛| 丁香婷婷激情五月天无毒不卡| 97超碰在线资源网站| 97在线欧| 91在线超高颜值国产| 密乳AV免费观看| 中文字幕亚洲在线一区 | 国内亚洲高清无码| 色呦呦呦在线观看视频| 色色热| 91男人天堂网| 84YTCOM性无码| 久久精品国产亚洲AV先锋| 91精品微拍福利| 九九综合| 久久久九| 亚洲综合20p| 福利在线观看一区二区| 超碰国产情侣自拍网| 久久人妻一区二区三区高清| 午夜视频久久久久一区| 97干在线| 婷婷精品国产一区二区三区日韩| 天天综合中文字幕 91| 日韩av影片在线观看| 99九九久久| 永久免费观看的毛片的网站| 色五月激情综合网| 人妻蜜桃臀| 日韩国产在线观看av| 国产精品欧美激在线| 免费操逼91| av婷婷色网| 人人摸人人入| 九九久久99| 天天干天天燥| 熟女高潮合集-永久久久-成人AV| 亚洲日韩av专区无码| 青娱乐 成人娱乐在线| 久久久96| 成人天天看站长推荐| 亚瑟国产精品久久无码| 欧美性爱一区| 久久‘黄片视频| 日本幼女18+| 久操婷婷| 国产女同在线观看视频| 天堂资源站| 亚洲精品中文字幕一区在线视频| 九九九国产精品| 国产原创自拍| 国产毛片久久久久久久| 97久久天天综合色天天综合色电影| 福利操逼| 天天伊人| 亚洲情色综合网| 国产少妇肉丝在线观看| 家庭乱伦国产| 欧美激情精品| 国产视频第2页| 久久伊人五月天| 精品毛片av一区二区| 日韩欧美久久婷婷网站| 精品无吗久久| 久久99热这里只频精品6学生| 亚洲中文字幕在线视频一区二区 | 美女啊啊啊啊pc| 蜜乳AV网址| 青娱乐久久艹| 国产特级毛片AAAAAA高潮流水 | 人人摸人人叼| 青娱乐亚洲自拍| 久久97| 最近二区三区视频大全| 99久在线精品99re8| 亚洲综合小视频小说在线观看| 亚洲欧美国产日本一区二区三区| 国产成久久综合片| 国产一级高清免费观看| 熟妇人妻精品一区二区| 亚拍在线| 亚洲国产精品久久久久婷婷老年| 国产熟妇一区二区| 91N欧美| 国产精品婬乱一级毛片彝族| 少妇无码av专区线| 中文字幕日韩专区精品系列 | 黄色小视频日本txt| 亚洲情色 欧美| 好屌色综合| 美性中文综合网| 国产和美国毛片| 东京热大香焦| 97色97好| 久热大香蕉网站| 成人区人妻精品一| 91九色丨风韵犹存| 26UUU欧美日本| 亚洲成aⅴ人片不卡无码| 天堂а√在线最新版在线| 第四色奇米影视777| 日韩不卡毛片Av免费高清| 日本不卡高清视频| 午夜毛片高清免费不卡| 91原创在线观看| 性色综合网| 加勒比在线视频| 中文乱码字字幕在线第5页| 91国产精品熟女| 久久欲| 亚洲综合骚逼| 超碰99热| av影片在线观看不卡| 91新在线欧美| 久久黄色性爱视频| 欧美96交| 看黑人AV不卡| 国产女人成人精品视频| 熟女少妇一区二区三区| 久热久一区二区三区| 吖在线不卡一区二区国产剧情| 91 刺激在线| 激情四射五月天| 9久9久| 草草草视频在线免费看| 999精品国产高清一区二区| 综合熟女| 四虎影视精品| 五月综合色| 人妻天天爽夜夜爽爽| 精品国产乱码久久久久久蜜臀| 久久东京热成人| 美女久久久久久久久久久| 91 欧美| 国产精品美女久久久久久网站| 一个色导综合| 91色噜噜狠狠| 亚洲免费成人在线高清无码视频 | 日本不卡中文| 欧美日韩*字幕一区| 欧美美女啪啪视频| 综合久久六月久久婷婷| 伊人玖玖网| 日本操逼二区| 亚洲天堂加勒比| 91亚洲黑人| 亚洲美女AV无码| 国产25页| 中文字幕一区二区三区视频播放| 欧美淫乱视频| 五月天婷婷成人网| 麻豆 美女 丝袜 人妻 中文| 亚洲av乱伦色图网站| 日韩午夜国产| 翔田千里无码中出中文字幕| 国产大片精久久久久久| 日本伦乱九九九综合| 亚拍在线| 欧洲中文字幕| 伊人久久大香大香线蕉中文 | 狠狠干妹子| 欧美九九99久久精品| 黄色一级视| J?P?NESEHD熟女熟妇伦| 欧美日韩国产精品久久色婷婷| 伊人久久88国产女| 亚洲一卡2卡3卡4卡乱码网站| 四虎884| 天天弄欧美| 日韩AV电影网站| 欧美日韩操逼嗦吊| se吧提供国产乱老熟视频胖女人| 色噜噜人妻av中文字幕| 东北女人的毛片| 欧美黄片欧美黄片xxx| 国产精品com| 国产传媒日韩| 干B网| 精品二区久久| 人人摸人人舔一区二区| 欧亚成人在线视频| 粉嫩国产精品久久久| 狠狠综合网| 淫妻综合网| 99国产人成精品| 五月色综合| 大奶啊啊好爽| 亚洲不卡AV在线| 韩国久久97| 色五91| 男人天堂久久日韩| 亚洲 欧美都市激情| 亚洲第一狼人丝袜美女另类| 天美91| 亚洲国产熟妇综合色专区| 色悠久久久av| 欧美第二页午夜| 激情终合网| 人人九九精| 天天欧美| 性无码专区2020| 国产91精品福利在线| 亚洲九月丁香| 精品久久久久9999| 欧美综合 站| 久久人| 久操网无码在线| 91人妻做a观看视频| 婷婷五月天成人网| 97视频620| 啊啊啊好舒服视频在线观看| 日韩欧美天天爽爽爽天天爽爽| 天天躁日日躁狠狠狠躁| a'v在线资源| 超碰av在线| 亚洲国内精品成人不卡| 亚州欧美色图| 日韩性爱电影一区| 宗合情欲网| 九九AV| 极品白嫩美女白浆成人福利在线看| 男人的天堂亚洲| 试看福利| 国产精品亚洲色婷婷久久久| 亚洲成?V人片在线观看福利| 国产精品久久久777| 四虎免费在线观看| 欧美成人一级免费电影| 久久色情| 暴力av在线| 爱我干综合| 久久风骚城市| 乱伦日本色图AⅤ| 亚洲色图伊人网| 加勒比在线观看一区二区| 免费夜夜爱黄色视频毛片| 日日嗷| 亚洲超碰在线| 怡红院久久老司机| 18禁免费视频| 丰满少妇一区二区三区专区| 亚州操逼图| 啪啪啪精品| 婷婷超| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 亚洲国产精品9999在线观看| 传媒免费一区二区三区| 麻豆黄色五月天| 中文字幕乱码人妻二区三区| 亚洲熟女综合网| 久污| 日日妻色网| 久久大陆| 天天干天天日天天射黄色片| 精品色色| 可以看的av| 国产成人综合网| 开心婷婷五月| 志村玲子视频一区二区| 欧美日韩性爱精品| 自偷自拍的亚洲视频| 被男人吃奶很爽的毛片| 欧美日韩*字幕一区| 台湾一区国产高清在线| 欧美不卡在线一区二区| 17c在线成人免费A片观看| 涩综合导航| 亚洲欧美自拍偷拍| 超碰成人最新最好看| 91精品久久综合熟女| 日本久久天堂| 操穴国产| 亚洲精品一卡二卡三卡福利视频网站| 色大师网站www永久网站视频| 人妻酒店出差被中出免费在线播放| 色九九九综合| 欧美日韩妖精91com| 精品少妇99| 超碰97国产欧美| a级免费在线观看| 国产中文字幕曰本毛片| 天综合网| 人人操av| 久久9久9久99久9久9| 久久亚洲天天做| 97人人夜| 大香蕉www.超碰| 首页亚洲国产高跟丝袜诱惑视频| 伊人大香蕉在线| 97色色色| 久久婷婷综合国际产色怕| 丰满少妇人妻久久久久久| 久射吧| 精品成人亚洲午夜电影| 日本超碰在线国产一区| 啊啊啊在线看| 国产女人与拘做受视频免费| 亚洲日韩久久精品一区| 中文字幕精品专区搜索结果91| 国产一区二区啪啪视频| 日韩精品一区二区高清| 欧美 日韩 亚洲 春色| 欧亚免费视频| 丝袜剧情| 日本不卡一二区| 天天干天天日天天射黄色片| 中文字幕91页| 女人综合网| 人妻少妇色综合| 99色色| 亚欧毛片基地国产毛片基地 | 怡红院网站在线视频| 超碰79人人乐| 国产亚洲精品美女久久久久久2021| 大香蕉在线SuP| 久久免费中文字幕在线观看| 天天做日日做| 麻豆av一区二区| 禁十八久久| 人人摸人人干| 久久超碰97| 大香蕉色欲AV| 美女主播色欲91抠b在线播放| 亚洲av乱伦色图网站| 午夜福利一区二区影院| AV有码在线| 99热大香蕉伊在线| 啊啊啊好湿国产一二| 日本99热| 免费伦费视频在线观看| 国产久久免费精品视频| 操B在线观看| 亚州一区二区| 欧美日本视频一区| 久久成年精品| 亚洲成人碰碰| 日韩av一级黄片| 97视频免费播放| 茄子社区国产精品| 国产污视频麻豆传媒一区二区| 天天日夜夜爽| 国产一区二区三区影片| 国产精品爽爽v| 蜜臀久久99精品久久久| 欧中美三级一区二区三区| 91美女色视频亚洲| 91日韩在线| 日本国产欧美高清在线| 中国zzijzzijzzwww精品| 欧州一区二区三区四区| 亚洲天堂精品日韩电影| 天天天肏屄肏屄肏屄欧美欧美| 夫妻AV网站| 色眯眯av| 欧美天天在线| 亚洲资源网| 日本黄色裸日本黄色裸体| 综精品久久久aaaa| 亚洲第一页色| 色色五月婷婷| 久久婷综合| 92人人操人人| 九九99精品视频在线观看| 国产精品永久免费10000| 人人搞人人插人人操| 久草看看看| 亚洲美腿丝袜香蕉影视欧美成人| 97免费视频在线观看视频| 久久偷拍人| 日韩欧美被操黄免费观看| 久久夜夜夜夜| 道久久五香丁月婷婷激情综合| 麻豆 亚洲 97| 欧美日韩美女精品久草一区二区三区 | 国产视频第2页| 亚热日本熟女| 校园春色家庭伦理欧美激情| 另类专区加勒比| 久久9久久| 亚洲一二三四区在线免费看视频| 天天天操天天天爱| 五十路成人在线视频二区三区| 日韩 女同 综合| 成人AV在线网站| 超碰吊日色| 亚洲情欲| 精品少妇人妻av久久免费| 男女做爰猛烈动高潮A片免费应用| 日韩成人性日韩成人性爱视频在线免费观看| 国产精品日日摸夜夜添骚逼| yiqicaoav| 激情抓乳插进去啪啪啪日韩 | 97人人模人人爽人人| 国产亚洲人妻综合日韩 久久| 天天舔天天 | 941超碰| 亚洲性高潮| 日本影视久久免费| 国产乱伦性爱区| 午夜福利视频在线一区| 丁香五月激情婷婷| 亚洲情色1区| 日日噜噜夜夜久久亚洲一区二区| 亚洲,欧美,综合网| 丁香七月婷婷| 久久精品亚洲成a人天堂| 99精品无码| 夜夜騷av、一區二區| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 亚洲国产欧美中文永久| 亚洲nv男人的天堂网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 精品黄色电影| 日本熟女中文字幕一区| julia ann久久| 狠狠躁久久躁| 欧美亚洲第一页| 婷婷久久网| 日韩激情视频| 欧美色交| 美女熟妇色| 入口操逼网站| 99精品热| 欧美熟妇精品黑人巨大91| 性爱视频免费网址| aaa一级黄片| 国产精品91ai| 97超碰人妻| 国产一区二区欧美日本| 91九九九逼| 色婷婷一区二区三区久久午夜成人不| 亚洲国产成人精品久久久国产成人一区二区| 天堂中文资源在线bt| 黄色二级片网站| 94色色电影网| 久久精品国产96精品亚洲拳交| 欧美狠狠弄| 色97干| 青青操狠狠撩| 亚洲骚女一区二区三区| 精品人妻视频一区二区在线播放| 飘花国产午夜精品不卡| 91 在线亚洲| 国产精品另类一区大香蕉| 少妇一区二区三区高速| 日韩情色视频| 麻豆视频一区二区| 久久婷婷六月综合| 午夜久久久| 欧美一级黄片视频在线| 婷婷97| 青青草在线视频美女| 伊人网综合在线视频| 国产精品亚洲四五区在线观看| 少妇久久久久久久| 国产毛片久久久久久久| 嗯嗯啊啊用力视频免费| 欧美成人免费在线观看| 这里只有精品视频在线| 91精品丝袜久久久久久| 秋霞一级视频在线观看免费| 加勒比AV天堂| 亚洲国产欧美一区二区潘金莲| 殴美,日韩国产伦精品| 东京热男人天堂| 婷婷激情五月| 久久久久久人体| 亚洲欧洲国产综合av| 神马久久久久久久久| 国产无码精品高清| 亚洲天堂日本| 八人操人人摸人人看| 欧美视频激情久久久久久| 久久精品毛片免费不卡| 亚洲成人一二三区| 久思思热视频在线观看| 亚洲永久永久永久永久一级一级一级精品| 成年无码动漫av片无尽在线| 久久天天性久久伊人| 97超碰香蕉| 九九毛片这里只有精品| 国产粉嫩蜜臀av一区二区三区 | ...日韩成人一区二区三区字幕| 欧美日韩香蕉| 激情婷婷丁香网| 很很干很很操| 免费国产| 国产超碰在线| 91久久九九精品国产综合| 欧美精品偷拍| 飘花国产午夜精品不卡| 日本中文字幕一区| 国产精品午夜高潮呻吟久久av| 久久久涩| 日韩有码一区三区| 日韩免费三级黄片电影| 在线亚洲精品久久久| 操逼1区| 91白嫩| 加勒比综合九九99视频在线播放| 国产女人高潮嗷嗷嗷叫小说| ...日韩成人一区二区三区字幕| 久久久com| 在线αⅴ| 91操熟女视频| 亚洲少妇色图自慰直播| 中文字幕狠狠玩| 国产精品人妻无码久久久互動交流| 啊啊啊好爽快点啊啊啊嗯嗯| 亚洲黄片免费在线播放| 五月天人妻综合| 爱爱动态120秒| 亚洲国产高清福利视频| 久久日本熟妇熟色一区| 天美传媒在线一区| 校园春色 男人天堂| 午夜a成v人电影| 欧美色网络| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 香蕉欧美| 欧美色图在线视频少妇| 亚洲最大黄网| 欧日a| 97在线精品观看视频| 国产乱子伦一区二区三区免看| 五月天婷婷色| 能直接看AV的网站| 岛国大片国产| 亚洲影视综合| 精品欧美日韩在线观看| 上床不卡网站| 尹人大香蕉视频在线| 乱伦日本色图AⅤ| 岛国1区2区3区在线观看| 青青草在线视频美女| 97精品国产97久久久久久| 综合国产影视三级| 婷婷激情丁香| 日韩精品人妻系列无码天堂| 久久久中文| 3P乱轮视频| 一级岛国大片| 日本操逼无码| 国产激情在线| 精品少妇一区二区| 日本新免费二区三区| 九九久久久久久爱| 无码人妻一区二区一牛影视| 亚洲一区二区性爱电影| 色操逼网| 午夜性刺激视频免费观看| 天天日天天看| 国产2.3.4区| 欧洲精品欧洲精品| 日本中文字幕熟妇| 96免费视频在线| 另类图片天天影视| 久久蜜桃综合网| 九一综合精品视品av| 五月丁香久久| 91c色| 色操逼网| 日韩免费高清大片在线| 东京热一区二区中文字幕| 国产9区| 人爽不卡视频| 女生看匆91网站| 天天色欧美| 九九九九精品视频| 青青操在线视频| 天美麻豆一区二区三区| 性色高清..……| aV中文麻| 蜜臀久久99'精品久久久| 老熟妇一区二区三区啪啪| 96国产污污污丝袜|