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

ARTICLE DETAIL

資訊詳情

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

Vue 3 全文搜索方案選型與性能對比實戰(zhàn)

Vue 3 全文搜索方案選型與性能對比實戰(zhàn) 全文搜索這功能聽著簡單真正踩進去才知道水有多深。尤其是在 Vue 3 項目里數(shù)據(jù)量一旦過萬一個簡單的filter就能讓你在輸入框里每敲一個字就卡一下。過去半年我在做內(nèi)部知識庫和商品中臺搜索先后對比了四種主流做法原生filter線性掃描、Fuse.js 模糊搜索、MiniSearch 全文檢索引擎、后端搜索服務以 Meilisearch 為例。從性能、體驗、維護成本三個角度折騰了一輪今天把四套方案的實現(xiàn)思路、測量要點、踩坑記錄都整理出來給正準備在 Vue 3 里做全文搜索的朋友一個可以參考的選型清單。這套對比的思路不限于某一個業(yè)務知識庫、商品搜索、日志檢索、文檔站都可以套用。1. 四種搜索方案我在什么樣的情況下才會選它搜索方案選型不能光看“能不能搜到”還要看數(shù)據(jù)量、部署成本、團隊維護能力。我把整個決策拆成四個層次純前端原生掃描、前端模糊匹配庫、前端全文索引庫、后端搜索引擎。每往上一層搜索能力更強、規(guī)模上限更高但引入的依賴、部署的復雜度也同步上升。1.1 方案一原生 filter 線性掃描原理是把數(shù)組整個過一遍用includes、indexOf或者正則去匹配字符串。這是最簡單也最容易想到的方案零依賴、零構(gòu)建、零學習成本。它適合什么場景我見過很多后臺管理系統(tǒng)的搜索框比如用戶列表按姓名過濾、訂單列表按訂單號過濾這種字段值短、數(shù)據(jù)量幾百到幾千條的場景直接filter完全夠用。還有一個隱含優(yōu)勢它是響應式的computed里寫一句就能聯(lián)動視圖前端新手也能馬上上手。但它的瓶頸非常明顯。一是時間復雜度和數(shù)據(jù)量線性相關(guān)數(shù)據(jù)量從五千漲到五萬、十萬搜索耗時跟著線性漲。二是匹配策略太粗糙includes只能做子串匹配想做大小寫不敏感、忽略標點、按空格劃分多個關(guān)鍵詞全部要自己處理。三是沒有“相關(guān)性”概念結(jié)果順序要么是原始順序要么得手動按某個字段排序。超過一定數(shù)據(jù)量之后它就不是“夠用”而是“硬撐”。1.2 方案二Fuse.js 模糊搜索Fuse.js 解決的核心痛點是“用戶記不住準確關(guān)鍵詞”。它基于編輯距離算法做模糊匹配即使關(guān)鍵詞寫錯一兩個字也能把候選結(jié)果撈出來。實際體驗上這個“容錯”能力特別適合搜索和程序員相關(guān)的技術(shù)名詞比如用戶想搜“Vue 3”卻打成“Vus 3”Fuse.js 能根據(jù)字母相似度匹配到對應結(jié)果。它自帶了權(quán)重系統(tǒng)可以指定標題字段權(quán)重更高、正文字段權(quán)重更低也能返回匹配位置、匹配片段前端拿來做高亮很方便。代價是包體積相對較大gzip 后約 20KB 左右而且模糊匹配本身的計算開銷不小數(shù)據(jù)量越大單次查詢越慢。Fuse.js 提供了createIndex預建索引的能力但只能加速候選篩選匹配計算仍然躲不掉。實測下來一萬條數(shù)據(jù)時帶索引查詢在 40-70ms 左右能接受但到五萬條會明顯吃力。1.3 方案三MiniSearch 全文檢索引擎MiniSearch 走的是和 Fuse.js 完全不同的路子。它在內(nèi)存里構(gòu)建倒排索引把文本拆成 token每個 token 映射到一批文檔。查詢時直接根據(jù) token 取文檔集合而不是逐條掃描。加上內(nèi)置了 BM25 相關(guān)度評分結(jié)果天然按“最相關(guān)”排序體驗非常接近后端搜索引擎。它對中文場景的適配也比想象中好支持自定義tokenize函數(shù)能用分詞器把中文切成詞或詞組再建索引。和 Fuse.js 對比MiniSearch 強在數(shù)據(jù)量越大優(yōu)勢越明顯五萬條、十萬條數(shù)據(jù)查詢也在毫秒級而且包體積小gzip 后通常在幾 KB 到十幾 KB 之間。缺點是它需要管理索引生命周期數(shù)據(jù)新增、修改、刪除時都得調(diào)用對應 API 維護索引比單純filter復雜一些。1.4 方案四后端搜索服務HTTP API當數(shù)據(jù)量到百萬級或者需要多租戶權(quán)限過濾、同義詞擴展、實時同步數(shù)據(jù)庫等能力時純前端方案就扛不住了。此時把搜索拆成獨立的服務前端只負責發(fā)請求和渲染結(jié)果。最常見的后端方案是 Elasticsearch、Meilisearch、Typesense體驗和性能都很強。代價也很明確需要額外部署和維護服務前端要處理接口延遲、loading、錯誤態(tài)、請求競態(tài)。如果是個人項目或小型團隊后端運維成本可能比前端開發(fā)成本還高。所以我的原則是“能用前端解決就別上后端”除非數(shù)據(jù)規(guī)模真的到了前端撐不住的程度。四種方案的定位差異可以看這個表方案搜索能力建議數(shù)據(jù)規(guī)模前端包體積增量維護成本原生 filter子串匹配 5000 條0最低Fuse.js模糊匹配 1 萬條約 20KB低MiniSearch全文索引 BM25 50 萬條約 10KB中后端搜索服務分布式全文檢索百萬級以上極小高2. 性能基準測試一萬到十萬條數(shù)據(jù)誰扛得住講完原理上一波實測數(shù)據(jù)。先說環(huán)境生產(chǎn)構(gòu)建版本 Vite Vue 3.4Chrome 120MacBook Pro M1。數(shù)據(jù)是隨機生成的 5 萬條商品數(shù)據(jù)包含標題10-30 字、分類名、描述100-300 字。這個量級很接近真實的知識庫、商品庫場景。測量方式上所有耗時都用performance.now()在搜索函數(shù)外層計算并且強制瀏覽器完成渲染后才取下一輪數(shù)據(jù)避免把異步渲染時間誤算進搜索結(jié)果里。2.1 構(gòu)建索引耗時與包體積這一輪只測“進入頁面到可以搜索”的初始化成本。原生filter沒有建索引的概念隨便搜Fuse.js 一次性把全量文本讀進內(nèi)存做預處理MiniSearch 需要調(diào)用addAll批量建倒排索引后端方案把建索引的耗時轉(zhuǎn)移到了服務端前端只關(guān)心接口是否可用。我實測的數(shù)據(jù)如下方案構(gòu)建索引耗時前端包體積增量gzip原生 filter0ms0KBFuse.js含 createIndex約 320ms約 21KBMiniSearch約 410ms約 8KBMeilisearch API服務端處理約 1KB結(jié)論很清楚除了原生掃描其余方案首次進入都有毫秒級到幾百毫秒不等的索引構(gòu)建時間。好消息是這些構(gòu)建都只發(fā)生在數(shù)據(jù)加載或數(shù)據(jù)更新時不會持續(xù)卡用戶。如果頁面數(shù)據(jù)本身很大建議用requestIdleCallback或setTimeout分片構(gòu)建索引避免阻塞首屏渲染。2.2 查詢延遲實測P50/P95查詢延遲是最核心的指標。我模擬了連續(xù)輸入關(guān)鍵詞的場景對每個方案在 1 萬條、5 萬條數(shù)據(jù)下分別測了 100 次查詢?nèi)?P50 和 P95。這里只統(tǒng)計純查詢時間不包含防抖等待和渲染時間。方案1 萬條 P501 萬條 P955 萬條 P505 萬條 P95原生 filter8ms15ms38ms62msFuse.js未建索引30ms50ms150ms220msFuse.jscreateIndex18ms35ms70ms120msMiniSearch1ms3ms2ms6msMeilisearch API35ms70ms48ms85ms這個表格能看出很多問題。原生filter在 1 萬條時還挺快到了 5 萬條 P95 就有 60ms 以上配合每敲一個字就觸發(fā)查詢的交互設計用戶體感就是“卡”。Fuse.js 雖然有模糊匹配能力但在 5 萬條時掉到 120-220ms已經(jīng)明顯影響輸入體驗。MiniSearch 是唯一一個在 5 萬條下依然維持在毫秒級的純前端方案。Meilisearch 的延遲主要在網(wǎng)絡 RTT所以數(shù)據(jù)量變化影響反而不大。2.3 內(nèi)存占用與長期運行穩(wěn)定性內(nèi)存這塊我單獨提一下因為很多開發(fā)者只看搜索耗時而忽略內(nèi)存泄漏。我打開 Chrome DevTools 的 Memory 面板記錄每種方案在完成 5 萬條索引構(gòu)建后的“保留內(nèi)存”變化。原生filter和 Fuse.js不建索引幾乎沒有額外內(nèi)存占用。Fuse.js 使用createIndex后5 萬條數(shù)據(jù)大約多占用 30-50MB 內(nèi)存。MiniSearch 的倒排索引會保留詞項到文檔的映射同樣數(shù)據(jù)集下大概占用 40-60MB。后端方案前端內(nèi)存占用最小但服務端要吃資源。更重要的是如果用戶在搜索期間頻繁輸入、反復觸發(fā)索引重建內(nèi)存可能只增不減。Vue 的響應式系統(tǒng)會額外放大這個問題——把大數(shù)組放進reactive后每次改動都觸發(fā)依賴收集和重渲染。我后來的做法是大列表用shallowRef甚至普通變量維護只有最終展示給用戶的結(jié)果集才放進ref這一步能省掉大量無意義的響應式代理開銷。3. 四種方案在 Vue 3 里的完整接入實現(xiàn)方案選型只是第一步落地才是考驗。這一節(jié)把四個方案的 Vue 3 接入代碼寫出來包含我自己常用的封裝方式兼容 Options API 和 Composition API 的讀者都能看懂。3.1 原生 filter 接入computed 驅(qū)動的搜索原生方案的核心是用computed緩存搜索結(jié)果避免每次渲染都重新過濾。搜索關(guān)鍵詞用一個ref維護配合watch或輸入框的v-model同步。// useLocalSearch.js import { ref, computed } from vue export function useLocalSearch(list, searchFields [title, content]) { const keyword ref() const results computed(() { const kw keyword.value.trim().toLowerCase() if (!kw) return list.value return list.value.filter((item) { return searchFields.some((field) { const value item[field] return value ! null String(value).toLowerCase().includes(kw) }) }) }) return { keyword, results } }這里有個關(guān)鍵細節(jié)computed的緩存依賴是keyword.value和list.value順序很重要。如果在組件里對list做了額外過濾比如“只顯示上架商品”一定要先處理完業(yè)務過濾再傳入useLocalSearch否則搜索結(jié)果可能出現(xiàn)“被過濾掉的商品仍然命中”的 bug。我通常在組件里這樣用script setup import { useLocalSearch } from ./useLocalSearch import { goodsList } from ./api/goods const { keyword, results } useLocalSearch(goodsList, [title, category]) /script template input v-modelkeyword placeholder搜索商品名稱或分類 / ul li v-foritem in results :keyitem.id{{ item.title }}/li /ul /template這個方案唯一要防的是重復渲染。computed已經(jīng)能擋住大多數(shù)無效計算但如果搜索結(jié)果依然是一個很大的數(shù)組建議在模板里配合v-memo或在渲染列表時加上分頁/虛擬滾動避免一次性渲染幾千個節(jié)點。3.2 Fuse.js 接入權(quán)重、閾值和防抖聯(lián)動Fuse.js 的核心配置是threshold和keys。threshold控制模糊匹配的寬容度取值范圍 0 到 10 表示完全精確1 表示任意匹配。我常用的值是 0.4容錯和準確率的平衡點。// useFuseSearch.js import Fuse from fuse.js import { ref, watch, shallowRef } from vue import { debounce } from lodash-es export function useFuseSearch(list, options {}) { const keyword ref() const results ref([]) const fuse shallowRef(null) const buildIndex () { fuse.value new Fuse(list.value, { keys: [title, content], threshold: 0.4, ignoreLocation: true, minMatchCharLength: 2, includeMatches: true, includeScore: true, useExtendedSearch: true, ...options, }) } watch(list, buildIndex, { immediate: true }) const runSearch debounce((kw) { if (!kw.trim()) { results.value list.value return } results.value fuse.value.search(kw).map((r) r.item) }, 200) watch(keyword, (kw) runSearch(kw)) return { keyword, results } }幾個容易踩的坑ignoreLocation: true很重要。默認 Fuse.js 會考慮關(guān)鍵詞在文本中的位置開啟后不再因為關(guān)鍵詞出現(xiàn)在靠后位置而懲罰分數(shù)對于全文搜索更合理。minMatchCharLength: 2避免了用戶輸入一個字符時匹配出一大堆無關(guān)結(jié)果。includeMatches打開后可以在結(jié)果對象里拿到匹配位置數(shù)組做高亮方便。但注意我上面的寫法把r.item返回出去了如果需要匹配片段得改成返回整個r。Fuse.js 的createIndex預建索引用法是在初始化時傳入new Fuse(list, { ..., useExtendedSearch: true })后調(diào)用fuse.setCollection或者直接用Fuse.createIndex(keys, list)把序列化索引存入內(nèi)存。這個索引能顯著減少候選文檔數(shù)量但計算量仍然不小數(shù)據(jù)超過一萬條后建議優(yōu)先考慮 MiniSearch。3.3 MiniSearch 接入倒排索引的構(gòu)建、查詢與增量更新MiniSearch 的接入流程分三步初始化、建索引、搜索。它和 Fuse.js 最大的不同是“先建索引再搜”所以數(shù)據(jù)更新時必須同步維護索引。// useMiniSearch.js import MiniSearch from minisearch import { ref, shallowRef, watch } from vue export function useMiniSearch(list, options {}) { const keyword ref() const results ref([]) const searchIndex shallowRef(null) const initIndex () { const mini new MiniSearch({ fields: [title, content], storeFields: [title, content, category, updatedAt], searchOptions: { boost: { title: 2, content: 1 }, prefix: true, fuzzy: 0.2, }, ...options, }) mini.addAll(list.value) searchIndex.value mini } watch(list, initIndex, { immediate: true }) watch(keyword, (kw) { if (!searchIndex.value) return if (!kw.trim()) { results.value list.value return } results.value searchIndex.value.search(kw, { combineWith: AND }) }) return { keyword, results } }這里searchOptions.boost設置了標題字段的權(quán)重是正文字段的兩倍搜索排序會優(yōu)先展示標題命中的內(nèi)容。prefix: true開啟前綴匹配用戶輸入“手機會”也能匹配到“手機配件、手機支架”等以“手機”開頭的結(jié)果。fuzzy: 0.2允許極小的拼寫誤差。增量更新是 MiniSearch 使用者的必修課。新增文檔用add刪除用discard修改就是先discard再add。如果不做增量更新而是一口氣調(diào)用addAll重建全量索引五萬條數(shù)據(jù)的構(gòu)建時間就會在每次數(shù)據(jù)變更時重復出現(xiàn)界面明顯卡頓。一個從實踐中得到的建議MiniSearch 的search返回的是文檔 ID 加權(quán)重分數(shù)如果你只需要結(jié)果列表不要map成完整文檔對象直接讓results.value持有 MiniSearch 返回的格式渲染時再關(guān)聯(lián)查原始數(shù)據(jù)。這樣可以省下大量對象拷貝。3.4 后端搜索 API 接入請求競態(tài)與 loading 處理接入后端搜索前端代碼反而更簡單但多了一個必須處理的并發(fā)問題用戶快速輸入時舊請求的響應可能比新請求晚到導致結(jié)果閃爍或錯誤覆蓋。解決辦法是給請求加“序列號”只接受最新一次請求的響應。// useRemoteSearch.js import { ref, watch } from vue import { debounce } from lodash-es export function useRemoteSearch(searchFn, { delay 300 } {}) { const keyword ref() const results ref([]) const loading ref(false) const error ref(null) let requestSeq 0 watch( keyword, debounce(async (kw) { const currentSeq requestSeq loading.value true error.value null try { const data await searchFn(kw) if (currentSeq ! requestSeq) return results.value data } catch (e) { if (currentSeq ! requestSeq) return error.value e } finally { if (currentSeq requestSeq) { loading.value false } } }, delay) ) return { keyword, results, loading, error } }requestSeq這個變量就是競態(tài)處理的鑰匙。每次請求前自增一次響應回來后對比當前的requestSeq如果不是最新的就直接丟棄。這個方法比AbortController更輕量因為AbortController在取消請求時會在某些瀏覽器里拋異常而序列號方案不會產(chǎn)生額外的錯誤日志。后端接口的返回結(jié)構(gòu)建議統(tǒng)一成{ hits: [], total: number }前端拿到total做分頁或“共 N 條結(jié)果”的提示比在結(jié)果數(shù)組上length更準確。4. 體驗細節(jié)高亮、分詞、渲染與排序性能數(shù)據(jù)只是地基用戶真正感知到的是交互體驗。很多人測試時只關(guān)注“能不能搜出來”忽略了搜索框本身的設計。這一節(jié)聊幾個我在實際項目里打磨過的細節(jié)每一項都對最終體驗有實打?qū)嵉挠绊憽?.1 輸入防抖、最小字符數(shù)與空狀態(tài)設計搜索輸入框最常見的錯誤是“每敲一個字符都觸發(fā)一次搜索”。即使 MiniSearch 查詢只要幾毫秒渲染層和響應式更新也可能讓低端手機掉幀。我的統(tǒng)一做法是加 200-300ms 的防抖同時限制至少輸入 2 個字符才發(fā)起搜索避免用戶輸入單個字母時頁面陷入“什么都沒輸入但結(jié)果已經(jīng)變了”的混亂。空狀態(tài)設計也很重要。關(guān)鍵詞為空時通常展示全部數(shù)據(jù)或熱門推薦搜索無結(jié)果時展示友好的提示和“清空搜索”按鈕。我習慣在組件里同時維護兩個狀態(tài)results搜索結(jié)果和isSearching是否為搜索模式而不是讓組件傻傻地把空數(shù)組渲染成空白頁。防抖在 Vue 里要注意一個坑debounce的函數(shù)如果直接包裝watch回調(diào)會導致watch的immediate失效。如果需要在初始化時執(zhí)行一次搜索別依賴防抖單獨調(diào)用一次搜索函數(shù)即可。4.2 搜索結(jié)果高亮的正確寫法高亮最常見的實現(xiàn)是用v-html直接把帶mark標簽的字符串渲染出來。這個寫法有 XSS 風險而且容易被用戶輸入的特殊字符打斷正則。安全的做法分兩步先轉(zhuǎn)義 HTML再在轉(zhuǎn)義后的文本里做關(guān)鍵詞高亮。function escapeHtml(str) { return String(str) .replace(//g, amp;) .replace(//g, lt;) .replace(//g, gt;) .replace(//g, quot;) .replace(//g, #39;) } function escapeRegExp(str) { return String(str).replace(/[.*?^${}()|[\]\\]/g, \\$) } function highlight(text, keyword) { const safeText escapeHtml(text) const words keyword.trim().split(/\s/).filter(Boolean) if (!words.length) return safeText const pattern words.map((w) escapeRegExp(escapeHtml(w))).join(|) return safeText.replace(new RegExp((${pattern}), gi), mark$1/mark) }這個函數(shù)的關(guān)鍵是escapeRegExp必須先于escapeHtml處理否則用戶輸入(、)、$等特殊字符會讓正則報錯。模板里直接span v-htmlhighlight(item.title, keyword)/span注意高亮的粒度不要過細。有的開發(fā)者會把每個字符都包一個mark結(jié)果整個標題變成一整片黃色視覺上非常難看。更合理的做法是對每個關(guān)鍵詞整體高亮不同關(guān)鍵詞之間可以繼續(xù)累積。4.3 中文分詞的坑和應對中文搜索和英文搜索完全不是一回事。英文按空格自然分詞中文的“我是一個前端工程師”是一整串連續(xù)字符。如果你直接用split( )分詞中文文本根本不會分。這個問題的連鎖反應是搜索“前端”時包含“我是一個前端工程師”的文檔可以匹配但搜索“前端工程”時由于文檔里沒有完全相同的子串純includes或 MiniSearch 默認分詞就匹配不到。最簡單的應對是使用Intl.Segmenter這是瀏覽器原生支持的中文分詞 APIconst segmenter new Intl.Segmenter(zh, { granularity: word }) function tokenize(text) { return [...segmenter.segment(text)] .map((seg) seg.segment) .filter((word) word.trim().length 1) }放到 MiniSearch 里就是自定義tokenizeconst searchIndex new MiniSearch({ fields: [title, content], tokenize, searchOptions: { combineWith: AND }, })這里我踩過兩個大坑一是Intl.Segmenter在現(xiàn)代瀏覽器都支持但在低版本 WebView 里可能是 undefined建議做降級處理比如回退到text.match(/[\u4e00-\u9fa5]|[a-zA-Z0-9]/g)這種簡單的正則切詞。二是分詞器開銷不小如果數(shù)據(jù)量大盡量在索引構(gòu)建階段完成分詞不要每次搜索時都分詞。4.4 大列表渲染優(yōu)化從全量渲染到虛擬列表搜索結(jié)果幾十條還好如果是全文搜索返回幾千條匹配結(jié)果也正常。此時直接v-for渲染全量列表DOM 節(jié)點數(shù)可能破萬低端設備立刻白屏或長時間無響應。我嘗試過兩個優(yōu)化方案。最直接的是“截斷顯示”只顯示前 50 條或前 100 條底部加“加載更多”按鈕。這個方案適合大多數(shù)業(yè)務場景尤其是列表本身有分頁邏輯時。另一個是虛擬列表核心思想是只渲染可視區(qū)域內(nèi)的元素滾到哪渲染到哪。Vue 3 生態(tài)里vue-virtual-scroller、tanstack/vue-virtual都比較好用。我用tanstack/vue-virtual寫過一版商品搜索列表關(guān)鍵代碼是這樣script setup import { useVirtualizer } from tanstack/vue-virtual const parentRef ref(null) const virtualizer useVirtualizer({ count: results.value.length, getScrollElement: () parentRef.value, estimateSize: () 60, overscan: 10, }) /script template div refparentRef classscroll-area styleheight: 600px; overflow: auto div :style{ height: virtualizer.getTotalSize() px } div v-foritem in virtualizer.getVirtualItems() :keyitem.key :style{ position: absolute, top: 0, left: 0, width: 100%, transform: translateY(${item.start}px), } {{ results[item.index].title }} /div /div /div /template虛擬列表適合結(jié)果集很大且需要滾動查看的場景。但要注意虛擬列表的內(nèi)部狀態(tài)和搜索結(jié)果是耦合的。搜索關(guān)鍵詞變化時虛擬列表需要回到頂部否則視覺上會出現(xiàn)用戶停留在列表中間、結(jié)果已經(jīng)刷新但滾動位置沒變的怪異現(xiàn)象。5. 常見問題與排查技巧實錄每個做過搜索功能的人都遇到過類似的問題搜索“卡成狗”、中文搜不到、請求亂序覆蓋、內(nèi)存持續(xù)上漲。這些問題往往不是搜不到結(jié)果而是細節(jié)處理不到位。我把實操中遇到的典型問題記錄在這里每個都給出了排查思路和解決建議。5.1 搜索越來越慢索引過期與內(nèi)存泄漏癥狀是剛進入頁面搜索很快幾分鐘后越來越慢最后幾乎卡死。常見原因有三個第一搜索數(shù)據(jù)被放進了reactive。Vue 的響應式系統(tǒng)會遞歸代理整個對象數(shù)組搜索時每次訪問字段都會觸發(fā)依賴收集。數(shù)據(jù)量一大這個開銷遠超搜索本身。排查方式是看 Chrome DevTools 的 Performance 面板里是不是大量時間花在Track Operations上。解決辦法是把大數(shù)組換成shallowRef或普通變量只用響應式數(shù)據(jù)保存keyword和最終的results。第二搜索內(nèi)部緩存了過多的歷史查詢結(jié)果。比如每次輸入都生成一個新的搜索結(jié)果數(shù)組但舊數(shù)組沒有被釋放。排查方式是打開 Memory 面板拍幾次 heap snapshot看Array或Object的數(shù)量是否持續(xù)增長。解決方法是保證results.value每次都被重新賦值而不是push進已有數(shù)組。第三Fuse.js 或 MiniSearch 在數(shù)據(jù)更新時直接重建整個索引。如果數(shù)據(jù)量很大重建索引的時間會指數(shù)級上漲。MiniSearch 必須走discardadd的增量更新Fuse.js 則盡量少地調(diào)用setCollection。5.2 中文搜不到分詞器才是元兇我遇到過最典型的場景是搜索“vue”能匹配“vue3”也能匹配搜索“前端開發(fā)”就什么都搜不到。原因是默認分詞器把“前端開發(fā)”當作一個完整 token 存進索引用戶輸入“前端開發(fā)”時理論上能匹配到完全相同的 token但如果用戶輸入的是“前端開”或“前端”索引里沒有對應 token自然搜不到。解決辦法就是 4.3 里提到的自定義tokenize用Intl.Segmenter或正則把中文切得更細。分詞粒度也要平衡切太細每個字一個 token會導致搜索結(jié)果過多、噪聲大切太粗整句一個 token又會導致查不全。我實踐下來按詞切分、過濾單字和停用詞是相對穩(wěn)妥的選擇。5.3 接口競態(tài)最后一條響應不一定是最后一次請求后端搜索服務最常見的體驗問題是“搜索了 A 詞又馬上搜索 B 詞頁面先顯示 B 的結(jié)果再閃回 A 的結(jié)果”。這是典型的請求競態(tài)。低速網(wǎng)絡或異步任務多時更容易出現(xiàn)。解決方式在 3.4 已經(jīng)寫過用請求序列號或AbortController都行。我推薦序列號方案因為它不受瀏覽器兼容性影響也不用處理AbortError。要注意的是序列號不能放在組件內(nèi)部應該放到useRemoteSearch的閉包里確保每個搜索實例有獨立狀態(tài)。5.4 選型決策速查表最后整理一張速查表可以直接貼在項目文檔里判斷條件推薦方案數(shù)據(jù)量 5000需求只是按字段過濾原生 filter字段少用戶可能拼錯詞需要容錯Fuse.js數(shù)據(jù)量 5 千到 50 萬全文檢索為主MiniSearch數(shù)據(jù)量百萬以上需要多租戶/權(quán)限過濾后端搜索服務Meilisearch/ES團隊無后端運維人力純前端項目MiniSearch已有后端搜索服務前端只是展示層調(diào)用 API 封裝請求這個表不是死規(guī)矩。如果你的項目數(shù)據(jù)量小但字段嵌套深原生filter寫起來很費勁Fuse.js 會更省心。如果數(shù)據(jù)量很大但允許離線靜態(tài)索引也有純前端的 FlexSearch 這類高性能方案。關(guān)鍵是先搞清楚自己卡在哪個階段——是數(shù)據(jù)量、匹配精度還是用戶體驗。從我自己的項目經(jīng)驗看很多搜索體驗問題都不是“搜不出結(jié)果”而是“結(jié)果太多、太慢、太亂”。先確定數(shù)據(jù)規(guī)模再決定要不要上重型方案比一上來就套一個大而全的搜索框架要踏實得多。最后再分享一個小技巧無論選哪種方案一定要準備一份固定的測試數(shù)據(jù)把真實的 1 萬條、5 萬條數(shù)據(jù)提前放好每次改動搜索策略后跑一遍對比別等到用戶投訴才回頭查性能。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
青青草字幕AV| 久久久久久999| 啪啪视频免费在线观看| 激情小说五月天| 日本久久女同性恋视频| 欧美自拍网| 久久精品亚洲婷婷| 国产精品探花视频| 超碰免费人妻人人| 亚洲色图尤物视频| 麻豆一区二区三区在线看 | 人妻中文字幕日韩电影| 超碰人妻97| 天天天天天天天天综合| 欧美精品成人亚洲| 日韩在线观看字幕精品| 国产精品精品系列在线观看| 日本高清一本二本免费不卡| 91天堂视频| 国产精品三级视频网站| 国产又操| 无码免费精品高清| 亚洲国产精品99久久久| 天天射夜夜操| 欧美草草高清日韩视频| 97频视在线| 情色日播放AV| 99re8免费高清在线| 91久久久久久久久18| www.亚洲成人一区| 国产精品久久久吖| 日本欧美中文字幕| 亚洲日韩人妻中文字幕一区| 欧美日韩欧美| 最新中文字幕av| av九九| 在线综合 亚洲 欧美中文字幕| 农村妇女精品一二区| 亚洲好色人妻| 18禁在线视频| av在线人气| 午夜传煤十二区精品| 26uuu国产免费观看| 6080YYY午夜理论片在线观看| 久久精品国产亚洲粉嫩| 亚洲色婷婷综合久久久久中文| 偷拍五区| 久久免费9| 久久久久白虎| 亚洲情色综合网| 97硬碰| 后入内射蜜桃臀| 秋霞成人一级在线观看| 天天插网| 国产日韩美女小穴视频网站不卡| 色与欲影视天天看综合网| 97爱欧美| 东京热精品97综合网| 亚洲国产精品久久久久久久久久| 日韩国产精品人妻无码久久久| 日本不卡中文| 99re黄| 欧美少妇人妻| 91高清无码下载| 夜夜操夜夜高潮夜夜爽国产精品区| 蜜桃臀一区二区三区久久| 日本不卡中文| 狠狠躁天天躁日日躁97| 操逼片国产| 裸模AV女优| 屌逼麻豆| 国产亚洲精品一区二区三区| 欧美综合第一| 影音先锋国产精品| 日本成人免费一区二区三区| 亚洲精品一区二区免费在线观看| 国产精点久久久成人| 丁香九月婷婷| 99热国产| 久神马| 欧美综合骚| 亚洲精品无码少妇久久| 国内精品a| 91天美免费| 夜精品久无码| 嗯嗯啊啊啊好舒服| 看日韩美女二区三区免费操逼视频 | 欧美99热| 国产亚洲精品美女久久久久久2021| 国产综合久久久麻桃个| 中文字幕无码不卡啪啪| 性老妇一区二区三区| 情色AV电影| 毛片电影一区二区三区| 欧美人妻精品一区二区| 午夜一区二区三区国产| 一区二区三区免费视频入口| 天天噜| 性色aV一区二区三区噜噜| 五月天九九日国产精品一区二区三区| 久久99久久99精品免视看婷婷| 色婷婷影院| 白嫩91在线亚洲| 性爱av在线免费观看| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 亚洲另类小说卡通动漫| 家庭乱伦国产| 极品尤物自安慰| 国产乱码精品一区二区三区四川| 激情五月天色色网| 曰韩中文人妻视频| 亚洲黄色影视| 中文字幕精品亚洲熟女| 伊色综合天堂色97| 五月色综合| 人妻夜夜爽天天爽麻豆三区网站| 久久国产对白激情浪潮| 久久伊人影院| 久久久四区| 亚洲欧美在线观看免费| 欲射影视| 啪啪视频免费在线观看| 伊人国产av| 60秒免费视频| 酒色综合网| 约操熟妇| 97欧美精品综合| 久操| 亚洲人成网站7777| 你懂得91| 热热色色综合| 久操91视频| 久久激情综合| 久草精品视频| 国产精品免费1区2区视频| 久久99午夜精品一区人妻| 99久久com免费视频′| 欧美,日韩,中文,另类| 秋霞免费无码视频日韩A片 | 色在线综合| 爱射综合| 国内精品99999| 欧美另类精品xxxx| 99精品热| 久久午夜鲁丝片| 久热色情精品| 亚洲福利影院一区久久| 久久人妻视频| 欧美激情精品| 99国产在线 精品 视频| 日韩三级av片| 麻豆视频国产一区二区| 任你爽视频| 国产一区二区三区免费视频在性观看 | 国产白领连续中出在线观看| 精品三级在线专区| 精品一区二区三区四区女| 午夜呻吟欧美| 99蜜月精品久久| 国产精品久久久无码aV去| 青青草手机在线免费观看| 国产一区二区精品久久久不卡蜜臀| 岛国色情视频在线观看| 久草精品一区| 亚洲最大无码中文字幕网站| 国产精品对白自产拍| 婷婷午夜| 亚洲国产精品无码AV久久久| julia中文字幕在线观看| 日欧亚洲二三区大片不卡| 人妻色情天天操| 99热综合| 91艹B视频| 亚洲av资源| 久艹伊人精品综合在线| 福利伊人玖玖国产| 91东北熟女| 亚洲色香| 97视频在线免费看| 中文字幕亚洲热播人妻| 夜夜精品视频| 毛片99-全集电影手机免费观看完整-B029AV| 国产极品一区二区三区三州| 久久夜夜| 91亚洲人| www久久精品| 秋霞午夜视频一区二区| 久久久九97| 手机在线人成免费视频| 日韩性爱免费观看视频| 啊啊啊水好多| 九九超碰综合网| 美女干逼2| 99久久久无码国产精品性男| 男人天堂.AB| 亚洲精品久久久久久久蜜桃臀| 伊人成人情色综合| 日韩性爱高清免费视频| 人妻内射一区二区在线视频| 日本色色视频网站| 狼人综合婷婷激情四射 | 青青草乱入乱欲视频在线观看| 青青青操| 九九超碰综合网| 97精品国产手机| 熟女中出视频| 精彩国产视频播放1区2区| 91|九色|国产熟女| 最新啪啪视频| 日本岛国黄色网址| 97啪啪| 啊啊啊好爽快点啊啊啊嗯嗯| 色五月婷婷中文字幕| 久久久久久人妻| 九九九九久久久| sss视频华人在线| 国产婷婷一区| 我想要啊 啊 啊| BBBBB97COM| 黄色片A级一区二区三区| 亚欧高清| 簧片免费看视频| www.91色综合| 亚洲性图91| 五月天人妻综合| 免费试看60秒| 国产白嫩漂亮KTV在线| 日韩AC| 麻豆区99999| 夜夜狠狠躁日日躁色视频| 东北操逼| 夜夜草天天| 91丨熟女丨丰满熟女| 天天综合网一91网| 人妻少妇精品久久久| 欧美97网| 国产福利小视频高清在线观看| 亚洲色五月| 欧美大片天天看| 国模限制级电影| 91午夜无码| 蜜臀视频网站| 日韩在线性爱免费视频| 综合亚洲欧美精品日韩?v| 久综合网| 婷婷激情四射| 天美国产精品| 亚洲 无码 偷拍| 精品国产乱码久久久久久口爆网站| 激情婷婷综合久久| 九九精品美女高溯喷水| 国语av狠狠色丁香婷婷综合激情| 久久av无码| 久久久艹艹艹| 九九热re99re6在线精品| 免费的很黄很污的全部视频 | 国产综合永久精品日韩鬼片| 日韩国产品视频中文字| 久久久日本电影| 99视频精品| 欧美精品一二三| 91国模| 国产精品分类在线观看| 亚洲图片偷拍视频区| 一区二区播放| 91精品无码人妻系列| 青青草国产一区二区三区| 日韩无码黄色片| 怡红院亚洲怡春院av| 午夜影美女日鸡鸡天天视频国产| 啊啊啊在线看| 在线99热| 蜜臀一区二区三区在线 | 天天激色| 色五月激情综合网| 婷婷五月天激情四射| 夜夜操夜夜爽夜夜高潮| 免费观看国产小粉嫩喷水精品午| 欧美亚洲20p| 欧美日韩操操操| 久久高潮妇女视频| 欧美性爱一区二区三区四区| 肉嘟嘟www视频在线观看高清| 91色插| 久干网| 欧美日日夜夜| 国产九月婷婷| 日韩综合色图| 日本人妻天堂网站在线播放| 蜜臀一二三区| 久久亚洲天堂| 天天看高清麻豆| 99蜜桃臀亚洲成人在线观看| 国产乱弄免费在线视频。| а√天堂资源官网在线资源| 香蕉免费一区二区三区不读| 亚洲影院成人| 人妻少妇三级| 色九九久九九| 很很很很操| 无码人妻丰满熟妇奶水区毛片| 无码WWW免费视频网站| 97爱综合| 偷拍盗拍亚洲色图图片| 夜夜黄| 精品二区三四区五电影 | 亚洲色图超碰在线| 黄网在线播放| 五月丁香综合啪啪| 色五月丁香五月| 国产欧美亚洲精品a第2页| 精品人妻一区二区视频| 免费αV在线视频| 99久久99久久免费精品蜜臀| 欧美高清16| 色噜噜国产精品视频一区二区| 久久久久久免费电影| 亚洲极品| 水滴偷拍| AAAA欧美日韩| 国产乱伦亚洲| 日韩不卡av一二三| 美女网站黄页| 97亚洲精品| 亚洲天堂精品日韩电影| 综合色好色| 超碰无码加勒比| 九九久久首页| 麻豆性爱视频在线播放| 性爱AV天堂| 日韩电影免费网站麻豆视频| 熟女少妇一区二区三区| 啊啊啊好想要| 欧美精品日韩久久久九| a在线观看| 久久AV无码1区2区3区| 激情综合网一盗摄| 日韩综合色图| 欧美系列在线一区二区| 色五月激情综合网| 欧美伊人电影| 久久αⅴ| 国产精品麻豆成人av| 东北女人高潮视频| 国语精品内射在线观看| 麻豆伊人网| 亚洲激情深爱文学小说网站| 手机在线观看不卡无码av| 久久精品免费| 欧洲乱码视频| 偷拍导航视频网站| 亚洲综合图色在线| 综合婷婷| 久久久精品中文字幕爱豆| 亚洲天天更新| 久久91| 爱妃国产亚洲视频中文字幕| 日本123区操B视频| 黄色十八禁| 久久精品 六十路 熟女 欧美| 五月丁香啪啪| 国内一级精品| 久草婷婷| 好吊色青靑草| AV中文在线| 一级黄碟在线看| 亚洲免费成人在线高清无码视频| 99re这里只有精品3| 97香蕉网| 日韩传媒在线| 双插性欧美一二三区| 亚洲综合九| 伊人久操| 国产精品一区二区三| 日夜啪电影| 亚洲欧美日韩免费观看| 熟女啪啪视频| 涩涩这里只有精品视频| 极品一区二区三区免费| 91久久久久久久久18| 精品无码少妇| 佐山爱中文字幕| 亚洲无吗在线视频| 日夜精品| 九九九久久久久| www欧美性爱| 好吊色综合| 国产亚洲色婷婷99精品91| 丝袜剧情| 色激情综合网站| 中文字幕在线2| 人妻啊啊人妻啊啊| 丁香五月综合| 欧美中文字幕日韩在线| 欧美大香蕉卡久久| 九色 人妻 大香蕉| 日本操逼无码| 97色插| 久草资源在线| 免费福利视频中文字幕| 秋霞Av理论一级在线| 亚洲综合情色| 九九av| 最新精品久久蜜桃| 久久天天摸| 欧美日韩在线小说| 91久久国产综合久久| 国产蜜臀精品一区二区尤物| 色亚洲欧美| 老熟妇一区二区三区啪啪| 美女啊啊啊啊啊啊啊| 久久成人国产| 国产免费小视频| 屁股久久久久久久久| 精品国产一区二区三区久久久蜜臀 | 青青草日韩无码| 免费黄色片子| 色婷婷色99国产综合精品| 男人a天堂手机在线版| WWW啪啪的com| 波多野结衣一级视频| 熟妇的味道HD中文字幕| 在线无码视频| 免费在线观看国内色片网站网址| 亚洲欧综合另类无码一区| 亚洲图片欧美| 青青免费在线视频一区| 国产成人 综合亚洲 天堂| 92性色国产午夜福利在线661| 中文字幕精品免费一区二区| 国产精品露脸在线观看| 家庭乱伦国产精品| 精品久久久九九九孕妇| 久操大香蕉| 久久精彩免费视频| 人妻无一区二区三区| 天天干夜夜操一区二区| 蜜臀AV一区二区三区| 七月丁香婷婷| 日人妻视频91| 口爆综合网| 人妻熟女一区二区三区在线| 日韩 欧美 国产 麻豆| 成人三级片一区二区三区视频| 九九热三级片| 免费的很黄很污的全部视频| 99精品久久| 神马午夜久久久| 96一区二区三区| 极品销魂美女一区二区| 手机看片1024你懂的国产| 久久熟女人| 亚洲第二页| 9.1小视频| 操逼天美3区| 亚洲精品欧洲色| 美女久久久久久久久久久| 亚洲色欧| 热热色国产一二区AV| 婷婷午夜成人色中色| 麻豆久久久久久久久丝袜| 久草老司机| 國產尤物AV尤物在線觀看| 日本午夜福利视频| 欧美韩日精品99综合| 330Dv国产女人终合视频极品人与兽| 熟女少妇视频| 小草精彩毛片| 久久亚洲日韩国产欧| 精品亚洲一区在线观看| 日本福利社| 人妻人久久精品中文字幕| 性影在线视频| 91少妇通奸网站| 乱伦av国产| 天天影视之亚洲综合网| 欧美,日韩综合久久| 91丝袜在线视频| 日本三级一区二区 在线| av72网| 国产激情在线| 一二三区视频在线观看| 狠狠综合网| 91欧美亚洲| aaa淫乱视频| 久久av一级av少妇av高潮| 亚洲诱惑天堂| 很很很很操| av天堂手机版追回 | 日本黄 R色 成 人网站| 一级久久久久久久久久久| 日韩Va亚洲va欧美Ⅴa久久| 欧色性第一页| 久久小视频| 精品国产无码中文| 久草色在线观看| 十八禁网站在线| 日韩一区二区三区四区五区| 啊啊啊啊啊啊啊啊在线观看| 丝袜综合| 1024香蕉视频| 温婉少妇玩3p| 国产精品美女| 97精品视频在线| 98精品国产乱码久久久久久| 极品久久久久久久久久久久久久| 日韩乱伦影音先锋| 九热中文字幕| 男人的天堂三级| 国产肏逼网站| 亚洲精品97久久中文字幕| 天天干一区二区| 五月丁香激情啪啪| 日韩不卡毛片Av免费高清| 日本成a人v网站在线观看| 插B在线观看| 极品销魂美女一区二区| 人妻内射一区二区在线视频| 天天看片天天爽| 亚洲色图激情小说| 国产日产精品久久快鸭的功能介绍| 99青草| 12一15性XXXX粉嫩国产| 少妇69中文| 亚洲 欧美 日韩 国产一区二区 | 天天日天天插| 无码伊人久久大杳蕉中文无码| 91丨九色丨东北熟女| 婷婷导航| 色欲人妻一区二区在线| 国偷自 一区| 天天综合,91综合永久| 日韩不卡毛片Av免费高清| 人人澡综合涩| 美女啊啊啊啊pc| 大香蕉一线视频| 国产精品伦理| 91精品国久久久久久无码| 色99色| 国产最新小视频在线播放下载| 熟妇色99| 欧美性暴力猛交| 国产精品久久久午夜夜伦鲁鲁| 91nbbbbbb| 岛国小电影| 中文字幕在线观看丝袜| 777奇米影视777四色| 国产精品成久久久久午夜午夜| 999九九九九国产动| 国产精品熟女九九九| 国产精品国产自产拍高清AV| 99r九九| 丝袜无码a片| 中文字幕在线观看第二页| 日夜啪电影| 蜜桃视频精品一区二区| 婷婷丁香六月| 旡码电影特区| 麻豆人妻少妇在线免费观看| 亚洲精品欧美专业| 97国产色图| 久久综合精品一区二区三区| 丝袜六区| 91视频综合在线| 大逼色网站| 日韩无码极品| 网页导航五月天免费一二三区| 午夜一级免费毛片| 三级色综合| 自偷自拍的亚洲视频| 亚洲国产精品久久久久久久久久| 蜜桃精品一区二区三区ww| 久久九操在线观看| 人人玩人人添人人澡免费| 免费av在线播放二区| 在线人人人人人人精品超| 5月婷婷6月六月丁香| 在线观看AV不卡| 加勒比AV网| 超碰九7| 99久国产精品午夜性色福利| 五月激情啪啪| 熟女中出视频| 2017天天操| 婷婷丁香五月激情啪啪| 97视频7| 激情小说亚洲| 91九色首页| 中文字幕人乱码中文字的预防方法 | 人人透人人操| 久久蜜桃一区二区| 国产精品三级视频网站| 综合色久欲| 色官网在线| 91青青在线视频| 亚欧毛片基地国产毛片基地| 亚洲激情综合| 999色欧美中文字幕| 操操碰| www.色吧5.com| 99久热精品99re6热| 一个人免费视频观看在线WWW | 国产日韩人人| 免费看黄片现成| 亚洲色图殴美色图激情乱伦| 亚洲日本加勒比在线| 搡老女人老91二区| 小草精彩毛片| 国产精品麻豆免费视频| 午夜精品久久久99| 91精品女厕偷拍视频| 精品乱码久久久久| 亚洲色图欧美视频| 东京男人天堂| 人妻激情偷乱视频一区二区三区| 综合网少妇| 伊人久久青青草| 国产成年精品高清在线观看91| 成人精品电影| 黄色高清无码无码破解免费暗网| 欧美日韩制服| 欧美综合网1| 天天日少妇逼AV| 先锋影音av先锋一区| 国产亚洲色婷婷99精品91| 亚洲超碰AV| 天美麻豆一区二区三区| 精品人妻一区二区免费蜜桃| 欧美精品久久久久久久久88| 超碰久超碰久| 曰韩香蕉97| 区一在线观看| 日韩成人电影AV| 青椒国产97在线熟女| 亚洲天堂人妻熟妇视频| 开心五月深爱五月| 夜夜操美女| 欧美性暴力| 久久精品国产久精国产| AV九九| 国产一区二区三区精品观看啪| 免费人成在线观看网站品爱网| 99re免费视频精品全部| αⅴ天堂| 大香蕉专区| 一级做受视频免费是看美女| 人妻少妇精品视频一区二区三区| 欧美高潮在线| 91干熟女| 超碰国产精品无码| 青青草丝袜在线视频| 亚一综合久久久久久久久久| 成年人三级黄色片视频| 国产精品久久久久久久毛片1| 日韩不卡毛片Av免费高清| 国产精品自在线发布| 亚洲 欧美日韩 另类| 亚洲码专区| 色九区| 尻女朋友一夜| 九九九九九用不成了| 99在线啪| 美女91在线| 久久超碰国产一区二区三区| 免费啪啪av| 欧美大香蕉专区网| 五月色网| 青娱乐蜜桃臀AV色婷| 欧美综合自拍亚洲综合图| 偷偷人人精品女女久久| 久久久九九九| 伦伦成年午夜免费视频| 色五月婷婷五月天| 中文字幕第23区| 欧州一区二区三区四区| 国产 丝袜 欧美中文 另类| 日韩精品.久久精品.AV女优.天美传媒 | 99久久精品国产高潮| 天堂岛av| 日本天堂在线播放| 久久综合九色综合欧洲98| WWW黄片COM| 久久国产精品,久久国产| 成人草草视频| 日韩国产成人自拍视频| 亚洲一区二区三区麻豆传媒| 久久激情四射婷婷丁香五月天| a片自拍直播视频| 秋霞视频一区二区| 校园春色中文字幕AV| 操逼A∨| 九九伊人网| 久久久熟女一区| 操逼逼中文字幕| 青青草精品| 亚洲日韩精品久久久久一区壹牛| 色色99| 亚洲欧美天堂| 影音综合网| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 校园春色五月天| 欧美性生活综合| 精品无人区麻豆乱码1区2区图片| 亚洲国产高清福利视频| 黑白配性爱AV成| 婷婷综合视频| 精品国产乱码久久久久久网站入口| 日韩成人综合网| 欧美碰碰综合色| 91老司机在线视频免费观看| 日本人妻伦在线中文字幕| 97色欧州| 日韩中文字幕人妻视频| 超碰是碰在线观看| 欧美亚洲玖玖玖| A级毛片在线看免费| 成人在线午夜视频一区| 人妻系列无码专区中文有码| 欧亚日韩综合精品国产| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 久久草大香蕉| 91亚洲色图| 国产成自自拍在线观看| 最新AVzaixian| 啊v在线观看视频| 熟妇国产免费一区| av在线人气| 色色婷婷五月天| 91在线无码精品秘 软件| 日韩成人精品| 91色图| 啊啊啊啊好爽好舒服一区二区易域| 亚洲欧洲无码97久久精品| 日本美女性生活久久久久久久| 国产精品久久伊人| 高跟丝袜AV专区国产| 无码丰满熟妇一区二区浪潮AV| 亚洲本色精品一区二区久久| 91人妻熟女| 久这精品中文在线观看视频| av天堂加勒比| 快灬快灬 一下爽蜜桃在线观看 | 开心激情婷婷| 色综合婷婷| 丁香五月婷婷基地| 日韩人妻少妇 一区二区三区| 91性高潮久久久久久久久| 色牛牛AV| 丁香六月激情综合| 国产成人资源| 高潮嗯啊性感美女久久久| 国产91精品久久久久久久网曝门| 四虎884a| 超碰4A| 热99这里有精品综合久久 | 大香蕉婷婷| 国语人妻精彩刺激| 欧美一区二区在线资源| 欧美综合在线91| 久久婷婷苹果| 粉嫩av平台| 男人a天堂手机在线版| 婷婷五月av| 一级久久久久久久久久久| 欧美淫乱视频| 亚洲日韩天堂| 亚洲成人美女无吗| 天天色综合天天操| 久久精品亚洲婷婷| 国产一区二区精品久久久不卡蜜臀| 亚洲成av人片色午夜乱码| 人妻久久久久久久久久久久久久久| 亚洲天堂区| 蜜桃一区二区三区| 日本性感人妻91| 亚洲中文字幕熟女少妇一区二区| 欧美性第1页| 国产女同视频在线播放| 九九九九久久久| 亚洲图片偷拍欧美| 人人操人人插人人摸人人干| 亚洲天堂,男人| 99精品无码| 97欧美性爱| 都市激情人妻一区二区青青操视频| 97色色色| 色99在线| 久久久久久十| 99精彩视频| 久久99九九九九6666免费观看软件| 芊芊操逼视频无码| 大香网伊人久久综合网eew| 蜜臀视频网站| 色噜噜国产在线| 少妇熟女1区2区3区| 色呦呦、国产精品| 国产无码精品无码| 婷婷五月天久久精品视频一区二区三区 | 亚洲精品一区二区免费在线观看| 国产综合色精品在线观看| 六六久久日韩不卡| 思思热国产高清| 麻豆人妻少妇在线免费观看| 天天激情综合站| 亚洲精品一区二区免费在线观看| 亚洲小电影免费涩涩成人在线高清 | 大香蕉免费3| 91嫩草欧美| 国产性爱乱伦AV| 久草热制服丝袜在线观看 | 97玖玖人妻| se01国产在线视频| 欧美日韩系列| 亚洲精品色| 在线观看国产黄色| 欧美黑人熟妇精品91| 上床不卡网站| 中文字幕日韩综合| 中文字幕一区二区在线日韩精品| 9久9久9久9久视频网站| 黑丝91视频| 久久久成人国产精品无码| 一区二区三区美女超清| 色在线69堂| 最新一二三区视频| 丁香五月久久| 99精品视频在线观看免费| 天天综合-91入口| 99蜜月精品久久| 亚洲视频一二区| 欧美综合中文| 天天干人妻| 日韩性爱小视频| 狼人久草| 欧美黑人与女人91| 人妻 中文 日韩| 香蕉久久精品| 无码久久亚洲高清,| 黑白配性爱AV成| 国产精品女生av| 亚洲久久久久| 成人久久久精品| 最新精品久久蜜桃 | 久操精品| 久久久久久久9| 亚洲女优有码无码高清| 97在线视频网站| 校园春色AV天堂| 啊啊啊啊在线播放| 本道在线| 青青青草原| 色诱avtt| 亚州再线| 久久久9999| 丝袜熟女2P| 97无码视频在线播放| 天天日天天操VV| 夜夜无码| 97精品免费| 亚洲国产ⅴ高清在线观看| 蜜臀在线网站| 青青草自拍视频在线播放| 色综合久| 亚洲欧美精品福利在线| 久草午夜| 久久綜合很很很| 激情五月丁香五月| 日韩图色| 日韩精品99999| 啪啪资源网| 黄页视频网站野外| 丰满人妻无码一区二区三区| 亚洲九九九| 99久久精品无码一区二区毛片免费 | 久久9久9久99久9久9| 天天香香欲综合| 亚洲少妇在线影音| 久草综合视频| 精品无码一区二区三区| 国产91 丝袜在线播放 | 网友自拍第一页| 殴美性天天| 欧美日韩在线小说| 亚洲成人av电影在线| 丁香五月激情五月| 久操网在线| 国内毛片欧美香蕉精品| 色色无码| 亚州操操穴网| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 夜夜高潮夜夜爽国产伦精品| 青青草在线视频美女| 欧美日韩午夜精品一区二区三区 | 北京专精特新企业招聘信息| 国产乱码精品久久久久久| 久草免费在线视频| 一级黄色视频网| 人妻碰碰碰碰碰碰| 美女t无毒不卡不卡| 黄色激情电影在线观看| 九一屌逼| 日本在线一二 | 国产精品一二三免费网站| www久久久| 欧美不卡在线美女| 亚洲有薄码区久久在线一区| 丰满人妻一区二区三区免费| 温婉少妇玩3p| 99啪啪| 极品综合| 国产肏屁眼视频| 亚洲成人在线高清| 色九月综合| 超碰精品国产无码| 色婷婷婷五月天激情四射| 碰碰97| 欧美 亚洲 大香| 国产精品白丝在线播放| 中文字幕艹艹| gogogo免费高清看中国国语| 欧美精品久久96人妻无码| 18禁止看精品中文字幕| 欧美后入视频| 黄色一级视| 久草精品在线| 97视频网站在线观看| 日婷婷| 偷拍欧美亚洲| 人人污日韩一区二区| 一区不卡在线观看av| 中文字幕第23区| av国产无码| 免费的黄片有限公司| 97精品视频在线播放| 欧美乱色| 国产一区在线免费播放| 欧美人妻少妇| 台湾佬中文娱乐网久久久久久久久久com | 无码聚合| 强奸乱伦免费网站| 久久亚洲天堂| 日韩二级| 人妻嗯啊啊在线播放 | 国产精品久久伊人| 秋霞午夜成人福利片片| 久草电影网| 天堂伊人久久| 青青草在线视频人人想人人上 | 嗯嗯嗯不要不要免费视频| 伊人丁香五月婷婷| 天天日天天操天天射河南省| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 密臀视频一区二区三区| 激情丁香五月婷婷| 91麻豆va国产精品| 青娱乐欧美激情一区二区| 97在线视频观看| 欧美亚洲中文字幕| 亚洲综人网| 热热色青青草| 国产中午字一暮区| 亚洲综合夜色| 超碰这里只有精品| 天美欧美国产| 亚洲熟女乱综合一区二区三区| 天天综合网久久ww| 久插综合| 少妇色综合| 懂色av色欲av蜜臀av| 一区二区三区视频国产免费| 久久综合国产精品国产| 日韩色| www.色操逼| 亚洲不卡AV在线| 日韩熟女精品无码专区一区二区 | 国产精品熟女AV中文字幕在线播放| 巨爆乳肉感一区二区三区竹菊影视| 欧美很很操视频| 桃色五月天| 亚洲91网。| 国产超碰97| …亚洲黄色厕厕女女在线播…| 午夜精品久久一区二区| 亚川综合视频| 天天综合91在线| 欧美香蕉视xxx| 国产尤物在线三区| 另类亚洲一区二区三区| 欧美丝袜制服久久| 嗯嗯嗯好爽| 九七色图| 天天综合网一91网| 国产白丝AV| 大香蕉五月天| 久久高潮妇女视频| 午夜丁香婷婷| 久久久九| 9色在线| 大香交| 久精品无码av一区二免费国产在线观看| 青春草A| 99re国产精品视频| 青青草视频导航官网| 日韩欧美成人午夜福利| 精品v1区| 国产www色在线观看| 丁香六月激情综合| 夜夜操夜夜高潮夜夜爽国产精品区| 大屁股人妻女教师撅着屁股| 99热亚洲天堂| 97亚洲色图| 婷婷久久网| 天天操天天舔| 日韩国语字幕| 蜜臀久久99精品久久久久久酒店| 欧美性爱在线无码| 风月影院男女十八禁| 久久精品国产亚洲AV无码电影| 操b网站亚洲无码| 无码精品久久久天天影视| 91最新综合| 国产精品呦一区二区三区| 操逼精品视频| 日美免费黄片| 午夜啊啊| 小草精彩毛片| 亚洲h片在线免费观看| 91精品国久久久久久无码| A片 AV一级在线播放观看免费| 美女丝袜激情小说| 99综合| 日韩在线观看三级电影| 78久久久| 亚洲激情在线| 97色伦97色伦国产欧美| 人妻 制服 日韩 中文 在线| 国产精品99久久久www| 97视频免费播放| 日韩精品熟妇| 色婷婷丁香五月| 国内偷自视频区视频综合| 日韩中文字幕宗合在线| 婷婷伊人网| 东京热视频网| 中文乱码字幕观看视频| 久久久熟妇熟女国产| 色久综合| 亚洲精品成人激情在线| 尤物av网站免费在线播放| 精品人妻视频一区二区在线播放 | 亚91网| 好看的久久不射无码影视影院| 极品极品色影院| 秋霞无码av鲁丝片一区| av网站免费看| 男人的天堂va| 蜜桃午夜视频一区二区| 国产不卡中文字幕免费avi| 亚洲无套久久嗯嗯| 中文字幕aⅴ在线视频| 操婢日韩| 狠狠操夜夜| AV一区观看| 国产操伦| 中国东北熟女老太婆内谢| 人人看黄色视频| 日韩成人私密一级精品av| 欧美一级A一级a爱片久久| 欧美日韩亚洲天堂| 亚州性9| 欧美色图综合| 操逼日批| 视频国产精品未满十八禁止在线观看| 天天视频网站黄| 男女性感激情网站| 中文字幕久热视频在线| 在线综合色| 婷婷久久综合久| 色色无码| 亚洲中文电影| 亚洲男人天堂视频| 国产综合久久久麻桃个| 欧美综合另类| 日本无码1| 国产亚洲一黄| 日日日骚女人精品| 超碰97极品9| 深夜福利黄片| 开心五月激情网| 久超碰这里只有精品| 无码直播久久久| 一区二区首页| 98久久| 人人喜人人妻| 亚洲伊人久久综合97| 999在线电影香蕉| 97av在线观看| 国产高清1234区| 天天干夜夜鈤| 五月婷婷六月丁香| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 天天操天天干美女网址导航| 97在线免费| 亚洲各类熟们中文字幕| 亚洲蜜臀懂色| 色综91| 99热只有| 色欧美在线| 国产午夜激片Av毛片不卡| 91色黑人少妇| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 久久熟女嫩草成人片免费| 伊人天天久久动态图| 欧美九9 9 9| 久久久一区二区三区麻豆| 女人喷水视频在线观看| 国产品精品自在在线午夜免费| 狠狠干,狠狠操| 综合五月天| 欧美操人| 91成人无码| 日本不卡高清免v欧美日韩在线观看| 欧洲视频在线| 亚洲18禁| 国产精品ⅴ无码大片在线看.| 久久久久久91香蕉国产| 日日操丁香五月天| 91熟女视频网| 国产激情在线| 东京热,男人的天堂| 欧洲色| 91大神精品长腿在线观看网站| 手机不卡视频不卡在线一二三区| 国产91精品在线免费| 国产中文福利| 网页导航五月天免费一二三区| 麻豆天美AV传媒第一页| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 国厂麻豆77q4| 五月天玖玖资源站| 97亚洲精品超碰| 日本超碰97日韩精品人妻| 强奸a片网| 九九干| 免费av在线播放二区| 日本道日本道中文字幕日本道最新日本道在线观看| 亚洲欧美清纯| 日日日啊啊啊| 国产精品三级视频网站| 日韩无码极品| 欧美熟妇精品黑人巨大91| 亚洲图片偷拍欧美| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美人妻色| 老色69| 婷婷五月丁香五月| 无码乱人伦中文视频| av无线看| 中国国产精品一区视频| 日本爽爽爽爽爽爽免费视频|