日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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ā)請求。這里有個很多人不知道的細(xì)節(jié)在同一個任務(wù)里先寫 DOM 樣式、緊接著讀布局屬性瀏覽器為了給你正確的值會被迫立刻做一次同步布局計算。你寫十次讀十次就是十次強制重排。滾動監(jiān)聽里那種“讀位置—改樣式—再讀位置”的寫法掉幀就是這么來的?;卣{(diào)頻率越高這種強制同步布局發(fā)生得越密集最終表現(xiàn)就是滾動條拖不動、手指劃下去畫面發(fā)黏。請求風(fēng)暴是另一個后果。搜索框如果不做控制用戶輸入“性能優(yōu)化”四個字會發(fā)出四次請求而且這四次請求的返回順序完全不保證——第一字的結(jié)果可能最后才回來把正確結(jié)果覆蓋掉用戶看到的聯(lián)想詞永遠(yuǎ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)答案但有幾個錨點可以參照。前端有個公認(rè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í)行就意味著用戶正好停在一個卡在閾值附近的臨界位置永遠(yuǎn)不觸發(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; }代碼里有三個細(xì)節(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 里把它單獨過濾掉別讓它進全局錯誤上報。還有個體驗細(xì)節(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)跳變可能算出一個負(fù)的間隔導(dǎo)致節(jié)流失效now - lastTime變成負(fù)數(shù)永遠(yuǎn)滿足條件或者長時間不觸發(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的依賴?yán)锔附M件每次重渲染傳進來的新函數(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)化的第一步永遠(yuǎn)是先測量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滾動加載在某個位置永遠(yuǎn)不觸發(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ū)分?jǐn)?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ù)加起來不到五十行但真正吃透它帶來的收益遠(yuǎn)超五十行代碼本身——它訓(xùn)練的是對“事件頻率、執(zhí)行時機、生命周期”這三件事的敏感度這種敏感度放到任何性能優(yōu)化場景里都用得上。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天操熟妇| 欧美大香蕉久| 欧美国产精品| 亚洲欧洲激情| av资源在线播放天堂| http://qxhbdz.com| 欧美另类丝袜熟女| 粉嫩粉嫩一区性色AV片| 极品粉嫩少妇视频| 成人乱人伦一区二区| 激情一区二区三区在线观看| 猛猛干| 日韩在线观看字幕精品| 综合九九| 超碰成人最新最好看| 日本丝袜美腿人妻九九| 日本精品五区| 玖玖97综合| 久久精品操| 国产美女在线精品免费看| 欧美成人午夜免费福利785| 91草草草| 国产精品一级毛片不卡视| 91狠狠综合久久久久久| 国产日韩精品suv| 99色热| 日本男人插女人的逼黄色| 精品免费视频国产一区| 超碰国产情侣自拍网| 精品999一区二区| 久久精品国产99国产精品亚洲| 中文一区二区三区影院| 亚州男人的天堂| 国产熟女免费观看久久| 日日嗷| 亚洲精品人妻吞精av| 偷窥自拍亚洲| 色综合美国| 凹凸视频在线一区二区| 6080yy午夜理论三级一区二区三区无码 | 色综合99999| 欧美日本中字另类在线| 91天天美女| 婷婷亚洲综合| 精品午夜福利导航| 伊人五月天青青草婷婷| 日韩无码视频黄色| 亚洲综合色在线| 性开放中文AV高清无码免费看| 日日夜夜草草草| 欧美人人曰人人操人人射射| 天天影视射综合网| 久久久网站| 96久久久| 亚洲AV资源| 欧美v亚洲v综合v国产v妖精| 熟女精品一区二区在线观看| 日本中文字幕在线电影| 欧美日韩午夜精品一区二区三区| 九一性生活免费视频| 香蕉久久国产AV一区二区| 久久久一区二区三区四区五区| 神马视频久久久久久| 日本精品网站在线中文| 欧美se综合| 欧美天天谢综合网| 中文字幕日韩精品久久| …亚洲黄色厕厕女女在线播…| 超碰97玖玖爱| 国产热RE99久久6国产精品首 | 人妻精品视频一区二区| 国产熟妇 码视频户外直播| 日韩久久艹| 很很干很很操| 国产第25页在线观看| 啊啊啊啊啊啊在线| 亚洲黄色网址| 97超碰色屌| 久久性爱城| 插入逼91| 丝袜AV一区二区三区| 大香蕉在线视频15| 亚洲天堂一区二区久久| 神马午夜久久| 久久精品国产亚洲AV嘿嘿| 黄页网站成人免费| 高精欧美色| 免费久久9999| 91国产大片| 久久九九视频九九视频| 久久性爱视频免费看| 后入国产| 熟女久久| 91成人在线| 99热精品在线在线| 97久久资源| 强奸乱伦动态污图免费 | 色呦呦、国产精品| 男人亚洲91首页在线| 亚洲无码久久久久久久| 91综合色| 国产肏逼网站| 日韩激情无码影院| 日韩欧美性吧婷婷乱伦大香蕉| 亚洲国产97在线精品一区| 诱惑人妻欧美一区在线播放| AV天堂电影网| 91色碰| caoni国产亚洲av| 女同女同恋久久级三级| 国产操逼视频在线观看| AV一区观看| 日韩av在线精品观看| 九一性生活免费视频| 蜜臀久久久国产| 啊啊啊啊啊好大好舒服想要| 操死我干死我| 中出在线视频| 香港久久久| 亚洲日精品| 97精品视频网站| 偷窥自拍亚洲天堂网爆| 亚洲成av人片色午夜乱码| 最新的亚洲无吗| 人妻丰满熟妇一区二区三| 伊人网青青| 神马午夜久久| 国产精品爆乳懂色蜜乳| 96精品久久久久久久久| 夜夜欢天天干| 日本韩国国产精品一区| 亚洲国产高清福利视频| 国产精品一区av在线| 美性中文综合网| 欧美日日人人天天| 神马久久中文字幕| 天天懆天天日| 亚洲免费成人在线高清无码视频| 网友自拍第一页| 99在线精品视频| 久久大| 又粗又长又大国产不卡| .精品人妻一区二区三| 十八岁啪啪视频免费看| www.超碰| 久久鲁夜| 蜜臀Av一区二区三区| 97久操| 久艹日日日| 九九九热| 欧美性爱伊人| 精品一区二区3区| 观看免费区二区三区二| 超碰视97中文| 国产大陆天天艹| 欧美日韩性爱操大逼| 97人人干| 91久久久视| 蜜桃午夜视频一区二区 | 中文字幕免费看| 激情婷婷黑人91| 中文字幕丰满人妻日本| 欧美性爱三区二区| 91丝袜美女| 熟妇高潮精品一区二区三区下载| 亚洲人妻日日日| 久久性爱精品一区| 丁香五月天啪啪| 99re不伦| 揉揉日日日日| 午夜免费视频1000| 欧美 综合 亚洲| 97在线免费视频观看| 日韩强奸av| 欧美午夜视频精品久久| 日韩久久超碰色| 东京男人天堂| 在线观看AV片| 久久111| 岛国天天午夜影院传媒网| 成·人免费午夜在线观看| 啪啪视频亚洲第一| 亚洲日韩青青草色月| 欧美综合亚洲| 亚洲欧洲日韩天堂av| 99热伊人| 99这里都是精品| 国产精品盗摄 偷窥盗摄| 97人肏| 国产夫妻性生活视频| 天天干天天燥| 久久少妇视频| gogogo免费高清看中国国语| 欧美制服网站美腿丝袜| 97色欧洲| 人妻精品视频一区二区| 亚洲熟妇综合久久久久久| A片大香蕉在线| 五月激情在线| 超碰九九| 色久桃花影院在线观看| 操婷婷逼| 色五月av| 久久午夜伦| 超碰欧美97资源| 超碰国产精品久| 蜜桃视频精品一区二区三区| 亚洲中文字幕在线视频一区二区| 青青草九九九九九| 久久久久久久强迫| 日本天堂网| 91成人无码| 成功精品影院| 欧美综合网在线| 色综合一区二区三巨| 亚洲情色 自拍| 极品极品色影院| 欧洲精品一二三在线| 久久久久亚洲三级电影| 少妇色综合| 搞中出久久| 老熟女熟妇| 日韩一级欧美一级国产一级台湾| 厕所偷拍在线| 国产区91柔拿会所技师| 热热色国产一二区AV| 超碰在线人妻中文字幕| 乱子伦一区二区三区国产精品| 国产av强奸美女| 伊人一区二区三区| 人妻99p| 人人操超碰在线| 精品国产乱码久久久久久口爆网站 | 亚州色综合| 久久久不能久久久久| 97爱综合| 十八禁黄色成人网站观看| 草草影院最新网址| 久久精品国产亚洲av水密被窝| 欧美成人精品A片免费一区99| 亚洲欧美小说| 精品一区二区三区四区外站| 在线观看国产黄色| 精品久久久久久久| 加勒比av中文| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 99re热有精品视频国产| 我想要啊 啊 啊| 亚洲天堂男人在线| 国产精品久久久久久久AV大片 | 九九热最新| 狠狠婷婷亚洲中文综合久久| 久久久久亚洲一区女同性恋中文字幕| 91粉嫩萝控精品福利网站_精品影音先锋国 | 国产一进一出视频网站| 超碰97人人乐| 91黑丝美女| 中文字幕黄色片| yw尤物av无码点击进入麻豆| 久草线上视频免费看| 国产91美女高潮| 亚洲一级特黄大片在线播放91| 男人的天堂VA| 久久亚洲色图中文字幕| 亚洲精品一区二区三区新线路| 欧洲亚洲国产综合在线| 91久| 欧洲自拍色图gif在线| 日本欧美成人片AAAA| 91啦人妻| 亚洲天堂2020| 日本好吊色视频| 国产精品一二三免费网站| 岛国1区2区3区在线观看| 久久九九精品一区二区 | 国产精品国产自产高清AV| 欧美日本视频一区| 美女AV一区二区| 五月婷婷丁香六月| 91麻豆va国产精品| 大香蕉一区二区在线观看.| 亚洲色图欧美激情| 中文字幕一区二区无码成人 | 91性高潮久久久久久久久| 偷拍精品一区二区三区| 91骚熟女| 97免费视频在线| 五十路熟女,国产欧美精品区一区二区三区| 大香蕉碰碰| 成人国产精品三级A片| 精品国产乱码| 涩综合导航| 美欧色综合| 久久久久久免费电影| 欧美久久婷| 超碰97起碰| 久久99精品视频| 成年人黄色小视频网站| 人人操人人插人人摸人人干| 91高清无码下载| 性videos欧美熟妇hdx| 欧洲综合色图| 国产女人视频三四五区| 熟妇视频一区二区三区在线| 91天天美女| 校园春色欧美| 亚洲色图欧美色图制服诱惑| 97色操| 色欧美在线| 欧美色爱综合| 性91| 精品久久久久久中文字幕视频免费| 夜夜黄| 国产AV天美传媒一区二区三区 | 久久一二三四五六七八九区区区| 欧美成人黄网色网站| 久久一级无码精品毛片6| 日韩欧美大力操| 黄色激情电影在线观看| 国产精品99精品视频网站| 97色综合中文网| av中亚| 欧美 精品国产制服第一页| 综合网亚洲| 日韩免费中文字幕视频| 欧美片第一页| 99re公开精品免费视频| 国产伦乱91| 欧美亚洲日韩人妻在线观看| 国产免费大片| 天天干夜夜肏| 国产精品一区二区三区四区五区| 日韩一级二级三级| 999久久久免费精品国产牛牛| 麻豆国产精品午夜视频| 一级@啪啪视频| 乱伦Av网| 亚洲色欲一区二区三区| 日本黄色天堂| 精品人妻一区二区三区四区不卡在| 日本精品五区| 国产精品无码论坛| 狼人综合婷婷激情四射 | 九九热在线视频| 色一射色一射| 男人天堂免费| 青草成人免费视频一com| 国产亚洲深夜激情| 天天躁日日躁AAA片李宗瑞| 男人兔费天堂| 久久蜜色情在线视频xxx免费观看| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 嫩草 我啊~嗯~在线| com 首页 18岁 禁区 女优 免费 精选 同城| 亚洲97网站| 亚洲精品日韩国产欧美| 91国产丝袜足交精品视频| 老熟妇一区二区三区啪啪| 精品丰满熟妇人妻一区| 黄色人人| 久久老子无码午夜伦不卡| 男人的天堂2019AV| 日韩国产九九精品一区二区三区毛片| 伊人加勒比| 亚洲毛片一级带毛片基地| 99久久综合| 日本人妻天堂网站在线播放| 久久久久久久9999| 天天色综亚洲91污| 日韩精品高清资源在线| 久99在线免费观看视频| 久久成人国产| 97网址97| 国产午夜精品理论片一二三区区| 国产超碰| 强奸熟女一区二区三区| 国产乱伦亚洲色图高清无码| 国产999精品久久久久久| 天天综合网~91综合网| 国产午夜精品理论片一二三区区| 亚洲欧洲偷拍一区| 欧美啪啪啪91| www欧美性爱| 欧洲亚洲天堂精品 | 天天综合欧美综合| 国产偷拍网站| 青青草九九九九九| 992视频一区| 色五月婷婷色| 亚洲九九视频| 久久久com| 青青草五月天| 无码久久亚洲高清,| 97超碰美国| 人妻熟女一区二区三区视频| av资源在线播放天堂| ai欧美亚洲小说| 欧美日韩性爱电影在线| 97干天天| 国产精品免费日韩| 国色天香av| 性色综合网| 99视频内射三四| 女人18精品一区二区三区| 操逼日批| 97人妻人人躁人人玩人人| 国产三级日产三级韩国三级| 亚洲国产亚洲天堂| 亚洲综合中文字幕有码| 亚洲97网站| 91精品黄在线观看| 日日夜夜骑| 日本天天操| 91熟女网| 歐美一級亂黃99在綫精品| 伊人国产成人av网站| 国产超碰国产97| 97欧美超碰| 日韩中字av一区| 亚洲国产成人精品999| 亚洲综合影视| 成人亚欧免费视频| 97资源亚洲| 精品少妇一区二区三区免费观看| 亚洲色狠| 在线97在线| 97视频900| 欧美色性爱| 九九久精品| 婷婷爱五月| 亚洲av噜噜噜噜噜噜| 国产91精品久久久久久久网曝门| 国产精品美女在线一区| 国产AV天美传媒一区二区三区| 国产67194| 欲香欲色| 久草资源在线视频官方总站日韩丝袜美腿 | 18一区二区三区| 成人av福利在线观看| 97超碰总站| 国产一级片| 欧美性夜| 97一本大道亚洲一区| 欧美一区二区三区日韩| 日韩亚洲欧美中文字幕| 亚洲精品一卡二卡三卡福利视频网站 | 成人夜夜| 骚乳在线| 欧美日韩性爱视屏免费看了| 操逼视频国产无套| 天天日天天干天天摸天天操| 国产性刺激| 日韩有码 一区二区三区| 99国内熟女露脸视频| 懂色AV一区二区三区| 370p日韩欧美亚洲精品| 日韩有码中文字幕女同性恋| 蘋果手機免費看成人Av| 欧美拳交在线播放| 中文字幕中文字幕一区二区| 国产精品熟女一区二区三区| 四虎影视永久在线观看精品免费网站 | 熟女欧美日韩综合婷婷| 婷婷五月天伊人| 日韩在线一区高清在线| 欧美激情一区| 国产精品丝袜在线| 青青草色插素人| 日韩成人精品中文字幕| 黄片无码在线制服| 操碰97| 婷婷性网| av日韩中文字幕| 伊人久久大香线综合无码| 亚洲天堂综合AV| 99精品久久久久久久婷婷| 狠狠操,使劲操| 久草这里只有精品 | 久久久久久久国产视频| 999亚洲国产视频| 欧美成熟性爱精品| 另类亚洲一区二区三区| 天天综合网在线观看| 亭亭在线资源| 国产乱码精品久久久久久| 三级片大波波| 青青操97| 美女人妻色网站| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 日本人妻中文字幕| 日韩av性爱在线播放| 欧美综合第一页| 天天干夜夜鈤| 日韩本不卡视频在线观看 | 久热91| 日韩欧美大力操| 麻豆亚洲AV成人无码久久精品| 午夜福利 成人 91| 天天摸天天操视频| 91白虎| 蜜桃午夜视频一区二区| 久草电影网| 久久美国毛片| 久久国模av| 天天干天天日天天射黄色片| 91 综合 色| 99热99re6国产在线播放| 校园春色综合香蕉| 中文字幕欧美精品亚洲日韩蜜臀| 9久久久久久| 懂色Av一区二区三区| 亚洲欧洲综合| 国产精品第一页国产大屁股视频免费区| 久久高潮妇女视频| 日韩欧美性吧婷婷乱伦大香蕉| 免费精品无码一级毛片牛牛影视 | 9+1视频网址| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 欧州色图区| 少妇毛片久久| 白丝1区2区3区| 最新av在线| 久久6热精品99视频| 免费男人的天堂| 色九久| 日韩激情电影中文字幕| 国产强上视频在线观看| 婷婷久热| 老熟女熟妇| 九九九九九九九| 97超级久久| 国产一级舔足在线观看| 亚州性9| 亚洲精品91| 久久产精品一区二区三区电影| 国产隔壁老王影院在线| 99色天堂| 插老姨肥穴| 亚洲脚交| 中文字幕在线免费观看| 人妻丰满熟妇一区二区三| 国产女人91精品嗷嗷嗷嗷| 加勒比无码一区二区三区| 欧美se亚洲| 欧美丝袜亚洲| 久热精品在线国产| 综合色图区| 安徽熟妇视频| 久久久亚洲精品中文字幕人妻| 国产毛片毛片4p懂色| 中文字幕一区二区韩| 99色悠悠| 欲香欲色天天天综合和网| 97碰碰色| 午夜理论片在线观看免费| 亚洲夜色在线| 天天操福利视频综合网站| 超碰97人人cao| 操死我了嗯嗯嗯| 亚洲日韩美国人妻| 久久性生大片免费观看性| 免费一级黄色录像影片| 超碰免费97| 91九色精品熟女内射| 欧美人妻色| 欧美综合网在线| 国产精品一二三在线看| 欧中日成人免费影视| 怡红院久久老司机| 国产午夜激片Av毛片不卡| 国产suv精品一区二区四| 99热欧美| 亚洲黄色网址视频| 韩国女主播青草在线| 嗯嗯啊啊好爽| 另类小色呦| 精品一区二区三区四区外站| 日本操逼aaaaa| 日韩有码免费视频| 欧美78P| 日本高清有码网址视频| 青青欧洲黑| 激情五月天插| 99re6久热只有精品6在线直播| 蜜桃臀久久| 黑丝自慰喷水网站| av线电影| 99国产精品视频尤物| 美女毛片999| 国产一区二区成人av在线播放| 亚洲综合网电影91| 91殴美| 91oumei| 91欧美经典| 欧美v亚洲v日韩v最新在线二区| 超碰中文字幕人妻草一区| 免费看黄片现成| 日韩99神马视频播放| 亚洲欧美国产中文视频| 超碰 另类 欧美| 中文字幕视频二区| 九九久久首页| 在线观看一级α片刺激高潮视频| 日本一区二区三区精品| 欧美自拍偷拍综合图片| 久久香蕉超碰97国产精品| 国产福利电影| 久久久久深夜无码| 婷婷丁香六月| 啊啊啊免费| 长长久久免费视频| 中文一区二区三区影院| 亚欧美天堂在线| 天天干干天天干干| 久久精品91| 国产又爽又黄| 美女上床网站| 97天天爽| 亚洲h片在线免费观看| 操香逼| 国产福利av精彩对白| 水滴偷拍| 91新在线欧美| 强奸乱伦动态污图免费| 最新制服中文第一页| 97超碰无码网| 亚洲一卡2卡3卡4卡乱码网站| 久久久久久人| 肥臀熟女福利视频一区二区| 日韩精品碰碰| 日1区2区3区2020| 青青草啪啪网| 五月婷婷基地| 一区操逼| 东京热,男人的天堂| 91色艳| 91人妻做a观看视频| 2017天天操| 亚洲国产精品久久久男人的天堂| 国产伦乱91| 国产v亚洲v日韩v欧美v片另类| 啊啊啊啊啊在线视频| 國產尤物AV尤物在線觀看| 人人爱人人乐人人操| 风月影院男女十八禁| 禁片 高清 在线观看视频网站| 亚洲欧美日韩中文播放| 国产和美国毛片| 蜜臀av中字字幕网站| 操逼视频免费日韩无码| 国产黄色视频久久| 综合亚州欧美| 狠狠做深爱婷婷久久二区| 色性欧美| 亚洲精品日日夜夜52| 午夜性生活av免费在线看| 色色青青久久| 91欧美美女日韩国产婷婷| 色狠狠综合| 久久久久亚洲?V片无码V| 欧美日韩资源| 91欧美少妇| 草b在线 | 99热精品在线观看| 久久久∴| 婷婷久草| 综合在线导航一区| 欧美区亚洲区偷拍区| 亚洲天堂2020| 色99999| 人妻色情天天操| 久久大香蕉手机高清视频| 国产精品ⅴ无码大片在线看.| 亚洲综合在线91| 99re6国产精品99re| 75大香蕉| 国产精品久久9| 青青11操操操操操操操操| 无码少妇精品一区二区60岁老人| 中国乱伦一区二区| 成人性爱视频在线看| 综合久久少妇中文字幕| 青青草毛片| 超碰色图| 极品综合| 九九九九日本| 亚洲熟妇乱女区二区三区| 无码色| 大香蕉五月天婷婷| 99自拍视频在线| 日欧操屄视频| 亚洲中文字幕av| 精品无码久久久久久国产浪潮| 综合伊人网12色| 秋霞一级鲁丝片A片| 蜜臀AV一区二区三区| 国产超碰欧美| 一级AAA片一区二区三区| 欧美丰满少妇交换91欧美精品| 韩日自拍| 2020中文字幕在线| 欧美热图99| 2017天天操| 久久久久久久九九九九| 思思久热在线精品66| 97国产精选| 91老熟妇| 99久久久无码国产精品性啊聊| 天堂69亚洲精品中文字| wwwxxx日本爽| 台湾成人无码AV| 久久人人爽人人爽人人片Ⅴ| 无码少妇精品一区二区60岁老人| 97干在线视频| 91老熟女逼| 私色综合网| www.99热在线只有精品| 国产和美国毛片| 久久精品操| 91夜色| 亚洲精品第一| 伊人五月天| 久久综合18p| 性欧美精| 大粗鳼巴久久久久| 综合激情二| 国产无马视频| 亚洲不卡AV在线| 韩国久久97| 五月婷婷hd| 久久久一区二区三区麻豆| 九九热精品视频六| 日本操逼视频在线| 夜夜影视四色| 久久精品中文字幕无码l| 成人av免费观看| 97玖玖人妻| 天天综合站| 亚洲福利影院一区久久| 国产精品爽爽va在线观看98| 日韩人体偷拍| 亚州欧美一区| 97天天综合| 亚洲自拍天堂| av天堂影视中文在字幕在线中文 | 夜夜欢天天干| 偷拍自拍在线视频观看| 天美麻豆精品视频99| 亚洲色图综合网| 中文乱码字幕观看| 美国aaaaa一级黄片| 国产版a级片直播在线| 久久久艹艹艹| 蜜臀中文无码午夜| 天天影视色香欲综合网小说| 三级片网站在线播放| 97超碰69| 夜夜操一区二区| 国产性爱强奸乱伦大全| 91狼人| 青青草啪啪网| 国产老太乱伦一区| 亚洲AV无码久久久国产精品| 欧美精品双插| 男女国产精品| 婷婷五月成人| 国产亚热在线久久| 一本精品日本在线视频精品| 天天综合,91综合永久| 久久久久久裸体| 美女操逼A A| 天美AV片| 日日爱99| 久99热| 亚洲脚交| 欧美人妻精品一区二区| 97精品国产精品免费观看| 日日骚AV| 亚洲日产专区| 夜夜欧美| 天天做天天爱| 男人天堂导航| 亚洲aV无码成人在线观看| 欧美 日韩 婷婷 五月| 亚洲成a人v欧美综合天堂下载| 9999久久久久| 一二三四区电影| 中文字幕aⅴ在线视频| 夜夜嗨绯色| 国产第12页| 操操操操操操| 强奸乱伦AV网址| 桃色五月天| 高清不卡 中文 人妻| 国产精品无码久久久久2025| 一区二区首页| 美女9118禁| 天天插天天射| 蜜桃久久一区二区| 天天爽爽爽爽| 九九热av| 禁止观看美女黄| 91免费看一区二区三区| 青青草吊丝| 我要色综合网| 91久久久久久久久18| 97精品一区| 97碰在线视频| 久久精品熟妇丰满人妻99| 98一区二区精品| 97爱爱爱| 人妻 欧美 中文| AV不卡在线| 天堂性色| 日韩美女久久一区二区三区| 96麻豆精品一区二区三区| 成年女人一区| 亚洲一区操| 午夜AV污污污| 婷婷五月综合激情| 1769成人国产精品视频| 国产白领连续中出在线观看| 久久久久久久久久va| 狠狠躁天天躁日日躁| 嫩草影院在线观看精品 | 亚洲 日韩 丝袜 熟女 变态| 久久久成人精品| 97香蕉碰碰人妻国产欧美| 一二三区精品视频| 国产60区。| 日产操逼| 粉嫩久久久久| 六九九九| 懂色中文一区二区三区| 久久久免费高清中文视频| 少妇 综合| 93人人操人人| 吊色| 一区久久久二区| 欧美另类综合久久| 91性情| 啊啊啊在线观看免费视频| 午夜丁香| 操逼视频国产无套| 夜夜国自区| 国产农村妇女精品一| 狠狠色婷婷777| 国内毛片国产欧美拍| 欧美人妻熟女在线| 日本精品88888888| 99亚洲精品| 超碰国产精品无码| 91精品久久久久| 日韩AV片| 性爱乱伦一区| 亚洲电影中字一区二区| 日夜尻逼网| 91nbbbbbb| 天天色综合图片| 成人性爱视频在线看| 天美传媒AV在线播放| 一区二区无码视频| 吉川爱美98堂在线| 久久大香蕉| 欧美v亚洲v综合v国产v妖精| 久久黄人人爽视频| 91无摭挡| 欧美曰韩国产精品| 天天日B狠狠操| 日本午夜福利影院| 国产精品熟女九色九色蜜臀| 亚洲熟女一区二区| 99re在线视频| 欧美激情片一区二区| 亚洲中文字幕97久久精品少妇| 人人人干干人人干| 97干97色| 少妇无码999| 亚洲色入欧美| 无码人妻一区二区一牛影视| 日本三级韩三级99久久| 亚洲一卡2卡3卡4卡乱码网站| 操一操摸一摸| 大学生美女口爆| 欧美人妻制服| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 嗯嗯啊啊视频一区二区三区| 亚洲天堂人妻一区二区| 1024日韩| 国产亚洲日韩在线三区黑人| 九九综合久久中文字幕| 青娱乐二区免费| 午夜小电影在线插入淫高潮| www.av家庭乱伦| 亚洲日韩天堂| 青草精品视频-日本久久久久网站| 青青欧美| 国产精品午夜精品| 一二三卡欧美日韩人妻免费精品| 亚州操操穴网| 久久一二三四五六七八九区区区| 99久久99久久综合| 色综合色欲色综合色综合色综合| 国产精品无码在线| 亚洲超碰在线| 美國A片| 乱伦日本色图AⅤ| 国产小黄片在线免费观看| 国产日韩欧美亚洲精品95 | 爱爱动态120秒| 亚洲天堂无码| 黄片色区软件| 日本国产欧美高清在线| 91精品女厕偷拍视频| 欧美亚洲日本视频久久久| 特级丰满少妇一级AAAA爱毛片| 综合影视国产无码| 色色色热| 国产精品91一样| 亚洲综合码| 人妻天天操天天爽视频免费| 精品国产99| 蜜桃色院一区久久 | 在线可观看的黄色网址| 国模精品娜娜一二三区| 婷婷四五区| 亚洲美欧999| 国产25页| 99操逼| 91久久青青草原精品| 69视频入口| 日韩综合无码一区久久92| 99国产在线 精品 视频| 日本午夜精品理论片A级APP发布| 色色婷| 亚洲最大的黄色电影网站。| 四虎884a| 嗯~啊~轻一点 视频| 婷婷探花久久精品一区| 欧美激情精品| 综合伊人激情| 无码免费精品高清| 五月婷婷爱六月丁香色| 91亚洲不卡一区| 欧美精品久久| dy888午夜老子影视达达兔| 成人26uuu| 欧美成人午夜免费福利785| 黄色污污污污污污网站| 亚洲综合贴图91 | 激情综合网五月婷婷五月天| 精品少妇一区二区三区免费观看| 久久久久久久久久久久黄色 | 欧苏综合色综合| 超碰人妻中文在线| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 欧美特大黄一级片片免费| 国产日韩精品一区二区三区| 久婷婷一区| 欧美自拍网| A 天堂| 色欲天天综合网| 99热| 91日日夜夜| 成人无遮挡毛片免费看| 熟女乱伦二区| 91 丝袜在线| 伊香蕉综合久久久久久久噜噜噜| 久久精品国产AV一区二区三区| 99精品在线| 淫妻综合网| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美一区91大爱| 97视频新免费| 自拍内地三级在线观看| www.超碰| 中文字幕神马久久| 久久久久久亚洲Av无码| 亚洲熟妇极品| 大香蕉99re| 国产亚洲禁久一区二区| 狠狠夜色午夜久久综合在线| 日日夜夜免费| 国产毛片久久久久久久| 中文字幕88av在线| 97日韩欧美| 中国一区二区亚洲人妻| 婷婷15月天青娱乐| 强奸抽插av| 国产精品青青草| 91热色| 国产黄色 A 片免费看| 亚州精品丝袜-不卡成人免费| 蜜臀99久久精品久久久懂爱| 成人无码电影在线观看网| 天天操女人| 在线综合网| 丁香五月成人| 久夜操| 色综合婷婷| chaopen97久久| α√在线| 日韩欧美中文字亚洲慕| av无码精品久久久久| 日韩丝袜高跟制服在线观看| 国产精品久久久久久照片| 97超碰天天爱天天爱| 一级片视频啪啪| 大香蕉欧美伊| 欧美色www亚洲国产阿娇要播| 欧美天天拍| 91性网| 色婷婷在线视频| 久久粉色| 韩国轻伦国内自拍一区| 国产 日韩,欧美 自拍| 久久国产精品91| 中文字幕第9页萱萱影音先锋| 91丝袜在线观看视频在线观看| 少妇一区二区三区| 久久久久久久久久久久久久久性生活视频 | 亚洲av乱伦色图网站| 色噜噜狠狠色综无码久久| 性爱乱伦一区| 91精品91久久久中77777| 久操精品网| 加勒比海人人操超碰在线| 五月天激情小说网| 国产老女人久久毛| 国产夫妻一区二区| 自拍偷拍草一草| 日本男人插女人的逼黄色| 国产女人和拘做爰视频| 秋霞男人网| 能直接看AV的网站| 亚洲黄色视频在线观看视频| 婷婷香蕉欧美在线一区二区三区| 亚洲国产精品无码AV久久| 欧美内射少妇| 户外裸露刺激视频第一区| 99热这里都是精品| 亚洲有码 视频一区| 熟女乱伦A| 97国产精品在线观看| 老色69| 国产专区第一页| 蜜汁欧美| 热久久99999| 97任你吞精| 欧美成人性活片| 亚洲国产青青| 色色国产| 老熟女91| 精久久久| 四虎永久在线精品免费网址| 日本性爱少妇| 日本不卡二区| 老女人老91妇女老热女| 懂色AV一区二区三区| 台湾成人无码AV| 热G综合热G中文| 黄色二级片网站| 国产福利av精彩对白| 人妻91少妇| 成人在线永久| 天天射影院| 国产精品极品美女视频| 欧美综合网A| 日韩AV色图| 免费看一级a性色生活片久久无| 2024黄色视频| 蜜臀久久99精品久久久久电影| 免费的av网| 日本护士高潮| 天天操天天干一区二区| 一起草视频在线| 亚洲骚男同com| 精品久久久久瑟瑟| 色狠狠 - 百度| 色哟哟AⅤ| 欧美亚洲系列| 色香综合天天影视综合 | 欧美视频一| 9I1性色影院| 91亚洲丝袜| 亚洲人妻熟妇三十三区| av网页一区二区三区| 国产在线综合福利网站| 日日干日日摸| 青青草国产一区二区三区| 日韩内射视频| 国产AV无码AV| 日本欧美一区二区三区免费| 日本一区二区中文字幕久久| 熟妇人妻精品一区二区| 久久成人午夜狠狠| 欧美大香蕉97| 国产夫妻一区二区| 丁香五月天视频| 717影院理论午夜伦八戒| av天堂精品久久| 亚洲熟伦熟妇AV无码春色| 男人午夜天堂| 天天干人人乐| 亚洲视频精选| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 日韩欧美麻豆| 91亚洲狠狠色| 免费成人在线熟妇网| 成人综合网 欧美| 91久久久久久久久久久| 成年女人一区| 99亚洲精品| 超碰人妻在线| 色狠狠综合| 国产一区二区视频在线播放| 国产精品久久成人免费| 粉嫩粉嫩一区性色AV片| 超碰无码加勒比| 亚洲精品国产日韩无码AV永久免| 黄片免费日韩| 欧美日韩黄片精品在线| 国产精品福利资源在线尤物| 天天拍夜夜| 少妇久久久免费| 亚洲91综合| 天堂亚洲精品| 9久久久久久| 97超碰站| 张柏芝国产一区在线观看| 青青草一区二区高清无码视频 | 九九拍拍精品视频在线播放 | A级在线视频| 日本孕妇一区二区视频操逼免费看 | 老熟妇一区二区三区…| 东北女人性交| 国产精品伦理| 成人性交午夜免费片| 91中出| 欧美精品精品一区二区| 国产黄色小视频网站| 日韩综合无码色欲vv| 夜色AV无码手机在线影院| 日韩AV一起草| 亚洲综合激情五月久久| 天天操天天射青青草| 淫妻综合网| 白丝jkav| 任我爽在线视频免费观看| 青青欧洲黑| 91制服丝袜| 亚洲综合电影| 牛牛操视频逼| 免费A V在线播放| 日本福利社| 黄总AV色图| 麻豆久久久久久久久丝袜| 97久久精品亚洲中六字幕| 国产精品不卡一区二区三区| 超碰超碰超碰超碰的大鸡吧操黑丝袜|