免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

jEasyUI樹形菜單加載全解:全量加載與懶加載的實(shí)戰(zhàn)取舍

jEasyUI樹形菜單加載全解:全量加載與懶加載的實(shí)戰(zhàn)取舍 做后臺(tái)管理系統(tǒng)做到第三年我發(fā)現(xiàn)自己跟樹形菜單打交道的時(shí)間幾乎跟表格一樣多。部門樹、權(quán)限樹、商品類目樹甚至地區(qū)選擇器本質(zhì)上都是同一個(gè)組件——EasyUI 的 tree。而“父/子節(jié)點(diǎn)怎么加載”這個(gè)問題幾乎每次都要重新翻一遍文檔。jEasyUI很多工程里就這么叫實(shí)際就是 EasyUI 的 jQuery 版本的樹組件最常用的就兩種玩法一次性把整棵樹的數(shù)據(jù)丟給前端或者等到用戶展開節(jié)點(diǎn)時(shí)才去后端要子節(jié)點(diǎn)。這篇就把這兩種加載方式從數(shù)據(jù)結(jié)構(gòu)、接口設(shè)計(jì)到常見坑原原本本拆一遍。不管你是剛接手老項(xiàng)目的新手還是已經(jīng)寫了不少后臺(tái)頁面的前端只要跟樹組件打過交道這幾點(diǎn)應(yīng)該都用得上。1. jEasyUI 樹形菜單加載的核心思路拆解1.1 兩種加載模式全量加載和懶加載怎么選網(wǎng)上聊樹形菜單動(dòng)不動(dòng)就讓你“用懶加載”但實(shí)際項(xiàng)目里真不是所有場(chǎng)景都適合懶加載。我第一次做權(quán)限樹的時(shí)候全公司一共二十多個(gè)部門用戶角色也就三五個(gè)這種數(shù)據(jù)量一次性返回根本沒問題強(qiáng)行做成懶加載反而要多寫好多接口和狀態(tài)判斷。反過來后來做一個(gè)電商后臺(tái)的商品類目樹一級(jí)類目下面掛著上千個(gè)末級(jí)類目如果一次性全渲染頁面直接卡成幻燈片。EasyUI 的 tree 組件剛好兩種模式都支持區(qū)別只在初始化參數(shù)data模式直接傳一個(gè)數(shù)組前端拿到的就是完整樹結(jié)構(gòu)適合節(jié)點(diǎn)總數(shù)在幾百以內(nèi)、層級(jí)固定、不需要頻繁增刪改的場(chǎng)景。url模式初始化時(shí)只傳一個(gè)接口地址tree 組件會(huì)先請(qǐng)求根節(jié)點(diǎn)數(shù)據(jù)之后展開某個(gè)state: closed的節(jié)點(diǎn)時(shí)再自動(dòng)帶著該節(jié)點(diǎn)的 id 去請(qǐng)求子節(jié)點(diǎn)適合層級(jí)深、節(jié)點(diǎn)多、需要按需加載的場(chǎng)景。我在項(xiàng)目里的選擇標(biāo)準(zhǔn)很簡(jiǎn)單節(jié)點(diǎn)總量超過 500或者層級(jí)深度不固定就優(yōu)先用懶加載。因?yàn)槿考虞d雖然代碼簡(jiǎn)單但數(shù)據(jù)一到前端就需要遞歸構(gòu)建樹、渲染 DOM數(shù)據(jù)量一大初始化和展開都會(huì)有肉眼可見的延遲。懶加載把壓力分?jǐn)偟矫看握归_動(dòng)作上體驗(yàn)上反而更順。1.2 父節(jié)點(diǎn)和子節(jié)點(diǎn)背后的數(shù)據(jù)約定很多人用 tree 組件卡住不是 API 不熟而是沒搞明白它眼里的“樹”長(zhǎng)什么樣。EasyUI 的 tree 節(jié)點(diǎn)就是一個(gè)普通的 JSON 對(duì)象里面有幾個(gè)保留字段id是節(jié)點(diǎn)唯一標(biāo)識(shí)text是顯示文字state表示節(jié)點(diǎn)狀態(tài)值為open時(shí)節(jié)點(diǎn)默認(rèn)展開值為closed時(shí)節(jié)點(diǎn)收起并且可以被再次展開。最關(guān)鍵的是children字段它保存當(dāng)前節(jié)點(diǎn)的直接子節(jié)點(diǎn)數(shù)組。我見過不少后端同事會(huì)返回parentId、parentName、isParent這類自定義字段這些字段不是不能用但 tree 組件本身只認(rèn)上面那幾個(gè)保留字段。所以常見的做法是后端直接返回符合樹結(jié)構(gòu)的 JSON或者前端拿到扁平列表后自己轉(zhuǎn)成樹。比如下面這段就是最標(biāo)準(zhǔn)的節(jié)點(diǎn)數(shù)據(jù)[ { id: 1, text: 總部, state: closed, children: [ { id: 2, text: 技術(shù)部, state: open } ] } ]這里有個(gè)容易踩的細(xì)節(jié)如果某個(gè)節(jié)點(diǎn)明明還有子節(jié)點(diǎn)但你把它寫成state: open并且沒給children那樹組件就認(rèn)為它是一個(gè)空的葉子節(jié)點(diǎn)展開箭頭都不會(huì)顯示更不會(huì)發(fā)請(qǐng)求。反過來如果它是一個(gè)沒有子節(jié)點(diǎn)的葉子節(jié)點(diǎn)你卻寫了state: closed前端就會(huì)一直以為它有下級(jí)每次展開都會(huì)去請(qǐng)求結(jié)果白折騰一趟還拿回空數(shù)組。1.3 加載父/子節(jié)點(diǎn)本質(zhì)上是個(gè)數(shù)據(jù)關(guān)系問題別看“加載父/子節(jié)點(diǎn)”聽起來像是組件用法實(shí)際工作中你會(huì)發(fā)現(xiàn)問題八成出在數(shù)據(jù)組織方式上。比如數(shù)據(jù)庫里通常只存一個(gè)parent_id字段根節(jié)點(diǎn)的parent_id是 0 或 NULL子節(jié)點(diǎn)的parent_id指向父節(jié)點(diǎn)的 id。這種扁平結(jié)構(gòu)適合存儲(chǔ)但不適合直接渲染樹中間必須做一次“按父找子”的組裝。所以做樹形菜單之前我建議先把數(shù)據(jù)流想清楚后端返回什么前端轉(zhuǎn)換成什么組件最終渲染成什么。最容易維護(hù)的方案是后端直接把樹結(jié)構(gòu)拼好返回前端只用data參數(shù)一次性接收如果后端實(shí)在不方便返回樹結(jié)構(gòu)那就只能在 JavaScirpt 里自己把扁平的pid列表轉(zhuǎn)成children嵌套結(jié)構(gòu)。后面第 2 部分我會(huì)給出可以直接用的轉(zhuǎn)換函數(shù)順手把排序、空節(jié)點(diǎn)這些細(xì)節(jié)也一起處理掉。2. 一次性加載把扁平列表轉(zhuǎn)成樹的完整實(shí)操2.1 前后端接口格式與樹構(gòu)建函數(shù)一次性加載最典型的場(chǎng)景是權(quán)限樹。后端從一張sys_menu表里查出所有菜單每條記錄大概長(zhǎng)這樣[ { id: 1, pid: 0, text: 系統(tǒng)管理 }, { id: 2, pid: 1, text: 用戶管理 }, { id: 3, pid: 1, text: 角色管理 }, { id: 4, pid: 0, text: 商品管理 } ]前端拿到這串?dāng)?shù)據(jù)后不能直接塞給$(#tree).tree({ data: list })否則樹組件只會(huì)把每個(gè)對(duì)象當(dāng)成平級(jí)節(jié)點(diǎn)根本不會(huì)形成父子關(guān)系。所以需要一個(gè)遞歸轉(zhuǎn)換函數(shù)把pid等于某個(gè)節(jié)點(diǎn) id 的對(duì)象掛到它的children下。下面這段是我用了很久的工具函數(shù)順手把children為空數(shù)組的情況也處理干凈了function buildTree(list, parentId) { var result []; for (var i 0; i list.length; i) { var node list[i]; if (node.pid parentId) { var children buildTree(list, node.id); if (children.length 0) { node.children children; node.state closed; } else { node.children undefined; node.state open; } result.push(node); } } return result; } var treeData buildTree(menuList, 0); $(#menuTree).tree({ data: treeData });這里為什么要把state分開設(shè)置因?yàn)?EasyUI 渲染規(guī)則里有子節(jié)點(diǎn)的closed節(jié)點(diǎn)才會(huì)顯示可展開的箭頭沒有子節(jié)點(diǎn)的節(jié)點(diǎn)保持open就不會(huì)誤導(dǎo)用戶。如果你把所有節(jié)點(diǎn)都當(dāng)成closed葉子節(jié)點(diǎn)旁邊也會(huì)出現(xiàn)一個(gè)加號(hào)點(diǎn)一下就發(fā)請(qǐng)求顯然不合理。這個(gè)函數(shù)已經(jīng)是 O(n2) 了如果菜單量特別大可以用一個(gè) map 先按 id 索引再遍歷一次掛 children能快不少但一般后臺(tái)菜單不超過幾百條這個(gè)簡(jiǎn)單版本就夠了。2.2 節(jié)點(diǎn)排序和空 children 的心得扁平列表轉(zhuǎn)樹時(shí)很容易忽略排序問題。數(shù)據(jù)庫查詢?nèi)绻患觨rder by同一個(gè)父節(jié)點(diǎn)下的子節(jié)點(diǎn)順序隨機(jī)生成的樹就會(huì)亂跳。我習(xí)慣在接口返回前就按sort_order排好轉(zhuǎn)換函數(shù)里保持?jǐn)?shù)組原有順序即可。如果你拿到的列表沒有專門排序字段退一步按id排序也比完全不排強(qiáng)。還有一個(gè)常見問題是空children。有的后端很喜歡給每個(gè)節(jié)點(diǎn)都帶上children: []這在前端渲染時(shí)通常沒問題但如果你用node.children.length去判斷有沒有子節(jié)點(diǎn)就會(huì)把空數(shù)組判斷成“有子節(jié)點(diǎn)”導(dǎo)致誤顯示展開箭頭。我在上面函數(shù)里用children.length 0才賦值children就是為了避免這種歧義。經(jīng)驗(yàn)之談狀態(tài)判斷只看有沒有children字段不看它的值雖然空數(shù)組在嚴(yán)格意義上是 false但不同版本組件對(duì)空數(shù)組的處理并不一致干脆手動(dòng)清除掉最穩(wěn)妥。2.3 默認(rèn)展開層級(jí)和選中根節(jié)點(diǎn)一次性加載時(shí)如果整棵樹都處于closed狀態(tài)用戶進(jìn)來只看到一堆根節(jié)點(diǎn)體驗(yàn)不太好。我通常在初始化完成后按業(yè)務(wù)需要展開特定層級(jí)$(#menuTree).tree({ data: treeData, onLoadSuccess: function () { var root $(#menuTree).tree(getRoots)[0]; if (root) { $(#menuTree).tree(expandAll, root.target); } } });expandAll會(huì)把所有層級(jí)一次性展開適合層級(jí)少、節(jié)點(diǎn)少的場(chǎng)景。節(jié)點(diǎn)多的時(shí)候我更傾向于只展開到第二層或者直接記住用戶上次展開到哪個(gè)節(jié)點(diǎn)。你可以循環(huán)調(diào)用tree(expandTo, target)逐級(jí)展開或者干脆在數(shù)據(jù)里把第一層節(jié)點(diǎn)的state直接設(shè)為open省去 JS 操作。這個(gè)看業(yè)務(wù)沒有絕對(duì)標(biāo)準(zhǔn)但最好不要在大樹上無腦expandAllDOM 節(jié)點(diǎn)太多會(huì)讓瀏覽器卡頓。2.4 父子節(jié)點(diǎn)勾選聯(lián)動(dòng)的取舍樹形菜單經(jīng)常配合 checkbox 使用用于分配權(quán)限。EasyUI 默認(rèn)行為是勾選父節(jié)點(diǎn)時(shí)自動(dòng)勾選所有子節(jié)點(diǎn)再取消父節(jié)點(diǎn)時(shí)子節(jié)點(diǎn)也會(huì)全部取消這種級(jí)聯(lián)邏輯大多數(shù)業(yè)務(wù)都需要。但如果你做的是“部分權(quán)限獨(dú)立分配”父節(jié)點(diǎn)和子節(jié)點(diǎn)不強(qiáng)關(guān)聯(lián)就得把cascadeCheck設(shè)為false$(#menuTree).tree({ data: treeData, checkbox: true, cascadeCheck: false });注意設(shè)置之后勾選子節(jié)點(diǎn)時(shí)父節(jié)點(diǎn)不會(huì)自動(dòng)半選你需要自己在onCheck事件里處理半選狀態(tài)否則界面上父節(jié)點(diǎn)一直顯示未勾選后期回顯權(quán)限時(shí)很難看。我吃過一次虧那時(shí)以為關(guān)掉級(jí)聯(lián)就萬事大吉結(jié)果權(quán)限回顯時(shí)發(fā)現(xiàn)父節(jié)點(diǎn)狀態(tài)不對(duì)最后是自己遍歷所有子節(jié)點(diǎn)只要有任意一個(gè)被勾選就把父節(jié)點(diǎn)設(shè)為半選才算補(bǔ)齊這個(gè)交互。3. 異步加載父/子節(jié)點(diǎn)的完整配置3.1 url 模式初始化根節(jié)點(diǎn)請(qǐng)求怎么傳參當(dāng)業(yè)務(wù)規(guī)模變大全量加載撐不住時(shí)就該切到異步懶加載。懶加載的初始化方式很簡(jiǎn)單給 tree 組件一個(gè)url它加載時(shí)會(huì)默認(rèn)請(qǐng)求根節(jié)點(diǎn)數(shù)據(jù)展開某個(gè)closed子節(jié)點(diǎn)時(shí)會(huì)自動(dòng)把該節(jié)點(diǎn)的 id 作為請(qǐng)求參數(shù)發(fā)給后端。默認(rèn)參數(shù)名是id也可以通過queryParams固定附加參數(shù)。$(#categoryTree).tree({ url: /api/tree/children, queryParams: { rootFlag: 1 }, onBeforeExpand: function (node) { console.log(即將展開節(jié)點(diǎn), node.id); } });這里有個(gè)容易繞暈的點(diǎn)如果初始化時(shí)后端根節(jié)點(diǎn)的父 id 不是 0而是用rootFlag或其他字段標(biāo)識(shí)怎么辦你可以在后端判斷id參數(shù)是否為空。比如接口/api/tree/children第一次請(qǐng)求沒有id參數(shù)就默認(rèn)返回所有根節(jié)點(diǎn)第二次請(qǐng)求帶id1就返回 id 為 1 的節(jié)點(diǎn)的直接子節(jié)點(diǎn)。前端并不需要專門處理根節(jié)點(diǎn)的參數(shù)只要后端能區(qū)分“無參”和“有參”兩種場(chǎng)景即可。3.2 到底要不要用 onBeforeExpand 手動(dòng)加載網(wǎng)上很多教程會(huì)告訴你“在onBeforeExpand里發(fā)起 Ajax成功后用append方法手動(dòng)把子節(jié)點(diǎn)加到樹上”。這個(gè)方法確實(shí)做得到但我個(gè)人不太推薦除非你有特殊需求。原因很簡(jiǎn)單EasyUI 的 tree 組件在url模式下展開closed節(jié)點(diǎn)時(shí)本來就會(huì)自動(dòng)發(fā)請(qǐng)求加載子節(jié)點(diǎn)你再用onBeforeExpand手動(dòng)發(fā)請(qǐng)求等于同一件事做兩遍還可能觸發(fā)重復(fù)請(qǐng)求。手動(dòng)append的典型場(chǎng)景是節(jié)點(diǎn)不是通過自身 id 去查而是需要拼一個(gè)復(fù)雜的自定義參數(shù)比如orgId加type。這時(shí)你可以用onBeforeExpand返回false阻止默認(rèn)加載再自己發(fā) Ajax完成后調(diào)用tree(append, { parent: node.target, data: children })。$(#orgTree).tree({ url: /api/tree/children, onBeforeExpand: function (node) { if (node.type ! org) { return false; } } });這里需要重點(diǎn)關(guān)注一旦onBeforeExpand返回false組件的默認(rèn)加載就會(huì)被取消后續(xù)不會(huì)再自動(dòng)發(fā)送請(qǐng)求。所以如果你只是想在展開前攔一道做校驗(yàn)而不是完全接管加載記得在通過校驗(yàn)后讓函數(shù)返回true否則你會(huì)看到節(jié)點(diǎn)怎么點(diǎn)都打不開。這是新手最容易犯的錯(cuò)之一。3.3 后端接口設(shè)計(jì)返回直接子節(jié)點(diǎn)還是整棵子樹配合懶加載的后端接口設(shè)計(jì)原則只有一個(gè)每次只返回直接子節(jié)點(diǎn)不要一次返回整棵子樹。比如點(diǎn)開“手機(jī)數(shù)碼”節(jié)點(diǎn)后端只返回“手機(jī)”“電腦”“耳機(jī)”這一層而不是把“手機(jī)”下面所有型號(hào)全部帶出來。這樣做的好處是響應(yīng)快對(duì)前端渲染壓力小而且后續(xù)數(shù)據(jù)更新后用戶重新展開就能拿到最新數(shù)據(jù)。接口收到參數(shù)后大概邏輯如下GetMapping(/api/tree/children) public ListTreeNode children(Integer id) { if (id null) { // 返回根級(jí)節(jié)點(diǎn) return menuService.listByParentId(0); } // 返回某個(gè)父節(jié)點(diǎn)下的直接子節(jié)點(diǎn) return menuService.listByParentId(id); }返回的每個(gè)節(jié)點(diǎn)要帶上id、text以及是否還有子節(jié)點(diǎn)的標(biāo)記state。如果該節(jié)點(diǎn)還有下級(jí)返回state: closed這樣前端展開它時(shí)會(huì)繼續(xù)發(fā)請(qǐng)求如果沒有下級(jí)就返回state: open或干脆不返回state讓組件把它當(dāng)葉子節(jié)點(diǎn)處理。如果你希望前端渲染更快可以在 SQL 里用EXISTS查一下有沒有子節(jié)點(diǎn)動(dòng)態(tài)決定返回的state但要注意這種寫法在高并發(fā)下可能讓數(shù)據(jù)庫壓力變大可以適當(dāng)做緩存。3.4 緩存已加載節(jié)點(diǎn)防止展開又收起的重復(fù)請(qǐng)求懶加載模式下EasyUI 其實(shí)會(huì)自動(dòng)記住哪些節(jié)點(diǎn)已經(jīng)加載過了。節(jié)點(diǎn)一旦從closed變成open再次收起再展開正常情況下組件不會(huì)重新請(qǐng)求。但如果你手動(dòng)改過state或者調(diào)用了tree(reload, target)就容易重復(fù)發(fā)請(qǐng)求。還有一種自己造成的坑有些同事為了確保數(shù)據(jù)最新在onExpand事件里調(diào)用tree(reload, node.target)結(jié)果每次展開都重新加載用戶覺得卡不說后端日志還會(huì)刷出一堆請(qǐng)求。如果確實(shí)需要刷新某個(gè)節(jié)點(diǎn)更合理的做法是提供手動(dòng)刷新按鈕或者只刷新變化的節(jié)點(diǎn)而不是全量 reload。另外如果后端返回的節(jié)點(diǎn)id在多次加載后不唯一EasyUI 會(huì)認(rèn)為它是同一個(gè)節(jié)點(diǎn)導(dǎo)致渲染錯(cuò)亂。我遇到過的情況是后端把數(shù)據(jù)庫自增 id 和業(yè)務(wù)編碼混用同一個(gè) node id 在不同父節(jié)點(diǎn)下重復(fù)樹就亂了。所以懶加載模式下id的全局唯一性一定要保證如果原表沒有唯一主鍵可以在接口里拼一個(gè)業(yè)務(wù)前綴比如org_1、menu_2甚至直接返回復(fù)合主鍵字符串。4. 常見問題與排查技巧實(shí)錄4.1 子節(jié)點(diǎn)加載成功父節(jié)點(diǎn)卻自動(dòng)收起這個(gè)現(xiàn)象很詭異點(diǎn)開父節(jié)點(diǎn)子節(jié)點(diǎn)明明出來了界面閃一下樹又縮回去了。排查下來十有八九是數(shù)據(jù)問題。最常見的是父節(jié)點(diǎn)的id在加載子節(jié)點(diǎn)后發(fā)生變化組件定位不到原來的父節(jié)點(diǎn)于是把當(dāng)前展開狀態(tài)重置了。比如后端返回節(jié)點(diǎn)時(shí)id用的是數(shù)據(jù)庫主鍵但前端某個(gè)環(huán)節(jié)把 id 替換成了別的字段就會(huì)觸發(fā)這個(gè)問題。我的排查套路是先用瀏覽器的 Network 面板看請(qǐng)求參數(shù)確認(rèn)展開父節(jié)點(diǎn)時(shí)發(fā)送的id是不是當(dāng)前節(jié)點(diǎn)的 id再用 Console 看看tree(getChildren, node.target)返回多少個(gè)子節(jié)點(diǎn)最后檢查接口返回的每條數(shù)據(jù)里id是否唯一。如果這幾項(xiàng)都正常多半是onBeforeExpand里返回了false把默認(rèn)加載行為給打斷了。4.2 節(jié)點(diǎn) state 為 closed但點(diǎn)擊展開后沒有發(fā)請(qǐng)求如果你初始化時(shí)用的是data模式而非url模式那么節(jié)點(diǎn)的state: closed只是一個(gè)顯示狀態(tài)組件根本不會(huì)自動(dòng)發(fā)請(qǐng)求。這時(shí)候你需要自己在展開事件里用append方法塞子節(jié)點(diǎn)否則節(jié)點(diǎn)永遠(yuǎn)是空轉(zhuǎn)。這是兩種加載模式混用時(shí)的經(jīng)典問題。另一個(gè)可能性是onBeforeExpand返回了false而且沒有實(shí)現(xiàn)后續(xù)加載邏輯。這種情況在代碼里搜一下事件綁定很容易發(fā)現(xiàn)。還有個(gè)小眾原因某個(gè)版本的 jEasyUI 對(duì)url模式要求根節(jié)點(diǎn)必須有id如果根節(jié)點(diǎn)沒有 id展開時(shí)傳給后端的參數(shù)就是undefined后端按 null 處理返回了根節(jié)點(diǎn)數(shù)據(jù)前端匹配不上看著就像沒發(fā)請(qǐng)求。解決辦法是初始化時(shí)給根節(jié)點(diǎn)一個(gè)固定 id比如0。4.3 樹刷新后選中態(tài)和展開態(tài)丟失后臺(tái)管理系統(tǒng)里很常見用戶勾選了一些權(quán)限然后切到其他 tab 再切回來或者點(diǎn)了刷新按鈕整棵樹的勾選狀態(tài)全沒了。EasyUI 本身不會(huì)自動(dòng)記憶這些狀態(tài)你必須自己保存。我一般用一個(gè)全局對(duì)象記錄關(guān)鍵狀態(tài)var treeState { expandedIds: [], checkedIds: [] }; $(#permTree).tree({ url: /api/perm/tree, checkbox: true, onExpand: function (node) { if (treeState.expandedIds.indexOf(node.id) -1) { treeState.expandedIds.push(node.id); } }, onCheck: function (node) { treeState.checkedIds $(#permTree).tree(getChecked); } });刷新之后在onLoadSuccess里重新展開和勾選$(#permTree).tree({ onLoadSuccess: function () { // 先展開記錄過的節(jié)點(diǎn) $.each(treeState.expandedIds, function (i, id) { var node $(#permTree).tree(find, id); if (node) { $(#permTree).tree(expand, node.target); } }); // 再回顯勾選 $.each(treeState.checkedIds, function (i, node) { var target $(#permTree).tree(find, node.id); if (target) { $(#permTree).tree(check, target.target); } }); } });有一點(diǎn)要注意如果節(jié)點(diǎn)還沒有加載出來tree(find, id)是找不到的這就回到第 3 部分的懶加載問題上。所以回顯勾選時(shí)最好先把所有節(jié)點(diǎn)展開一遍或者干脆用全量加載模式。權(quán)限樹本身節(jié)點(diǎn)通常不多我一般直接用全量加載配合上面的狀態(tài)記錄刷新體驗(yàn)?zāi)芎煤芏唷?.4 一次性加載大量節(jié)點(diǎn)導(dǎo)致頁面卡頓怎么優(yōu)化如果你確實(shí)需要一次性加載很多節(jié)點(diǎn)比如幾千個(gè)類目但又不想改造成懶加載可以先做“分層渲染”。我試過一種簡(jiǎn)單方案只在onLoadSuccess時(shí)展開一層用戶點(diǎn)擊展開按鈕時(shí)才渲染下一層通過onBeforeExpand里給tree(append)動(dòng)態(tài)塞children。這樣雖然數(shù)據(jù)還是全量在前端但 DOM 是逐步插入的能明顯降低首屏卡頓。還有一種更徹底的方案是改用懶加載并且后端給每個(gè)節(jié)點(diǎn)提前算好children數(shù)量。當(dāng)children數(shù)量大于 0 時(shí)返回state: closed否則返回open。前端就完全不需要加載葉子節(jié)點(diǎn)的子級(jí)數(shù)據(jù)數(shù)據(jù)庫壓力也小。這都是我在商品類目這種大數(shù)據(jù)量場(chǎng)景下實(shí)際試過的方案最終穩(wěn)定下來的是懶加載加后端緩存。4.5 遞歸深度控制和前端參數(shù)校驗(yàn)說句容易被忽略的樹接口如果不好好校驗(yàn)參數(shù)可能被人惡意利用。比如傳入一個(gè)特別大的id或者接口無限遞歸查詢會(huì)把數(shù)據(jù)庫拖垮。后端最好限制查詢深度最多返回三級(jí)或五級(jí)子節(jié)點(diǎn)超出的部分讓前端繼續(xù)懶加載。另外所有參數(shù)都要做類型轉(zhuǎn)換防止 SQL 注入。這一點(diǎn)我在安全性審查時(shí)被提過一次后來就變成了團(tuán)隊(duì)樹接口的默認(rèn)要求id必須能轉(zhuǎn)成整數(shù)否則直接返回空數(shù)組。最后再說兩句實(shí)在的寫樹形菜單真正花時(shí)間的從來不是那幾行組件配置而是前后端對(duì)“節(jié)點(diǎn)”這個(gè)概念的認(rèn)知是否一致。全量加載也好懶加載也罷你要先想清楚數(shù)據(jù)從哪來、怎么組裝、展開時(shí)能不能找到父節(jié)點(diǎn)、刷新后要不要恢復(fù)狀態(tài)。這些細(xì)節(jié)理順了jEasyUI 的樹用起來就是順手的事。我個(gè)人現(xiàn)在的習(xí)慣是普通后臺(tái)菜單默認(rèn)全量加載省心商品類目、組織機(jī)構(gòu)這種層級(jí)深或者數(shù)據(jù)量大的一律懶加載并且把接口收斂成一個(gè)通用的children接口。如果你也正在被樹形菜單折騰不妨先把數(shù)據(jù)格式打印出來對(duì)照著 id、pid、state 逐項(xiàng)檢查很多時(shí)候問題就自己暴露了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本熟女一区二区| 丁香六月在线| 超碰99在线观看| 亚洲熟妇AV乱码在线观看| 久久九九大香蕉电院| 十区AV| 激情第四色| 色狠狠综合入口| 激情综合啪啪啪| 狠狠狠狠青草| 91在线人| 日韩AV一区二区三区| 五月婷婷在线免费观看| 激情综合网址| 激情久久久久久久久久久| 九九sese| Av性爱网站| 大香蕉人人网| 日本理论久久| 丁香狠狠操| 婷婷五月综合在线| 久久婷婷色| 五月天激情四射网站| 五月婷婷丁香色吧网| 性日本激情| 91精品丝袜久久久久久久久粉嫩| 婷婷五月天渟渟| 亚洲五月婷婷| 伊人久久婷婷| 欧美性生交XXXXX无码小说| 成人AV中文字幕| 五月婷婷丁香色播网| 深情六月婷婷综合久久| 91热er| 日韩无码成人电影| 五月丁香婷婷久久| 日韩九区| 五月婷婷爽爽爽| 99re久久| 精品热青草| WWW.桔色成人.COM| 五月婷婷久久大片| 国产操逼网站| 国产成人av在线播放| 色综合色婷色基地| 另类综合激情| 亚洲色色在线| 五月久久丁香| 色五月婷婷亚洲最大| 无月播播激情在线观看视频| 人人摸人人澡人人| 色激情五月天| 色哟呦av| 26.uuu丁香五月婷婷| 国内久久亭亭| 精品九九在线观看视频| 激情婷婷五月天在线观看| 婷婷六月丁香1| 天天日夜夜草进麻麻的子宫| 成人免费va| 激情五婷网| 天天久综合| 五月丁香六月色| 久久视频这里有精品99| 在线中文字幕视频| 99精品视频在线观看| 亚洲字幕AV一区二区三区四区| 美女久久婷婷| 色播婷婷大香蕉| 五月婷婷综合热| 五月丁香综合激情在线观看| 欧美成人五月天| 久久黄色片| 五月婷婷综合在线| 成人视频网| 国产精品色情AAAAA片软件| 99超超碰| 9久久久久久久久久久| 91九色无码日韩| 色婷婷丁香| 精品视频这里只有精品| 日本熟女二区| .精品久久久麻豆国产精品| 99在线精品免费视频| 丁香五月天影院| 婷婷少妇激情| 99re这里只有精品视频了| 亚洲激情综合| 欧美日韩二区在线| 久久婷五月婷| 五月婷婷综合在线视频小说| 六月婷婷中文字幕| 色婷婷AV在线| 96五月丁香熟女| 狼人狠狠操| 在线播放中文字幕| 五月婷婷久久久| 六月丁香深深爱| 五月婷婷综合视频| 一级内射毛片| 激情五月婷婷在线区| 人妻久久久久久| 婷婷综合五月天| 9久热在线视频| 在线观看亚洲视频影院| 99爱视频免费| 日日操无码| 欧洲永久精品| 久久激情网| 亚洲Av成人在线观看| 久久er免费视频| 亚洲日日日| 亚洲另类在线观看| 久久五月天激情美女| 五月婷婷性| 99在线观看精品视频| ww超碰在线| 99色精品视频| 亚洲无码99| 日本3级片一区2区| 天天射影院| 五月天另类小说久久小说网| 九九这里精品| 中文字幕中文有码在线| www。88热在线视频免费观看| 激情六月丁| 国产黄色在线| 婷婷五月天人妻| 天天干天天干天天干天天干天| 激情国产五月| 超碰国产在线播放| 婷婷天天舔| 中文字幕,综合,91| 97碰 在线视频观看| 思思热在线视频观看精品| 久久综合中文| 色婷婷丁香五月| 丁香婷婷月| 91人人爱| 九九热99热| 欧美三9久九观看| 伊人青草成人| 51国精产品自偷自偷综合| 九九爱看亚洲| 亚洲国产成人AV在线 | 丁香五月婷婷啪啪啪| 九九久久精品國產| 荷兰av一级| 五月天大香焦| 天堂综合久| aV欲望人妻中文字幕| 久久婷婷综合五月趴| 成人国产网站在线免费看| 六月婷婷狠狠| 亚洲AV成人精品网站在线播放| 五月丁香婷婷激情| 99久久婷婷国产综合亚洲| www.五月婷婷久久.com| 久草婷妨| 婷婷综合五月天| 日本熟妇精品99| 亚洲另类婷婷综合| 婷婷综合网在线| 亚洲亚洲人成综合网络| 日B日潘金莲BB| 天天操天天日天天爽| 美国少妇性做爰| 69婷婷丁香午夜| 免费看欧美成人A片无码| 色情播放| 91热视频色网站| 九九精品亚洲| 五月丁香少妇网| 9热网站| 婷婷五月天论坛| 久草婷婷在线| 99爱爱| 五月丁香婷婷在线综合蜜桃| 91精品久| 女人天堂AV| 超碰精品手机在线| 天天摸天天肏| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 久久久久久久久久久久久久久久久精典| 天天色综网| 国产成人AV在线播放| 日韩啪啪视频| 婷婷五月天激情综合深爱激情| 超碰国产在线观看| 伊人综合网站| 日韩狠狠色| 五月激情精品视频| 亚州操逼网| 精品久久久人妻| 久久五月网| Caop在线| 天天日中文| 99热在线看| 天天人人综合| 99久久99视频| WWW.HENHENL.| 欧美色综合天天久久综合精品| 日日夜夜爽| 综合久| 99热综合在线观看| 国产精品天天狠天天看| 丁香在线视频| 91操片| 伊人婷婷五月| 狠狠va| 91凹凸在线| 666555。COm毛片| 色婷婷免费视频| 婷婷五月天AV激情| 色5在线| 97操在线资源| 九97免费视频| 秋霞少妇AV网站| 可以看的AV| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 久碰久| 婷婷五月色| 五月婷视频| 99 这里只有精品| 9有码中文| 欧美三级大片AA在线看| 波多婷婷久久| 影音先锋男人AV资源站| 中国女人做爰A片| 色综合色色| 天天噜| www.色擼擼.com| 色五月成人婷婷| 婷婷综合色| 9色免费网| 久热精彩视频98| 夜夜穞天天穞狠狠穞AV美女按摩| 婷婷五月天网| 婷婷深爱五月| 综合色色网| 噜噜噜狠狠色综| 丁香五月六月婷婷综合| 色五月偷偷| 一起草性爱不卡视频| 思思热热久久| 天天色,天天日,天天做| 九九色热| www激情| 五月天综合激情网| 国产亚洲在线| 五月天激情综合网俺也去| 超碰93在线观看| 激情丁香久久久久久| 免费99色| 97人凄人人操人人爽| 亚洲成片在线观看| 大香蕉伊人99| 99热在线里有精品| 天天日天天做天天操| 中文字幕 久久9999| 天天噜天天爱| 久热这里只有精品99re| 99热1| 婷婷九月丁香| 亚洲精品V天堂中文字幕| 久久98| 嫩草AV久久伊人妇女超级A| 国产成人精品一区二三区熟女在线| 91精品久久久久久综合五月天| 人人草人人舔| 91在线人| 丁香蜜臀黄色婷婷五月天| 大香蕉五月婷婷| 九月丁香| 青青草原福利在线| 夜夜 操无码| 婷婷久久综合久| 人人播| AA片在线观看视频在线播放| 婷婷丁香五月在线观看91| 丁香婷婷久| 99人人精品| 97热视频| 婷婷丁香五月亚洲| 六月丁香五月天| 九九热精品视频在线观看| 最近中文字幕2019视频1| 99人妻碰碰久久久禁片| 色婷操逼| 欧美叉叉叉BBB网站| 久久99最新地址| 精品国婬伦V无码久久久| 色综合香蕉| 婷婷五月激情热播| 婷婷五月天播播| 激情六月丁香| 草了bav视频在线观看| 久久日婷婷| 久久9热| 丁香婷婷综合精品六月初| 国产精品色一哟哟| 91精品久久久久久| 五月婷无码| 99色色| www.久久五月天.com| 美女天天爽| www.婷婷六月天| 影音先锋一区二区资源站| 正宗黄色毛片| 久久久久久丁香五月| 超碰97免费在线| 三男玩一女三A片| 日韩美女在线视频19| 丁香五月精品视频| 激情六月婷婷| 97操在线资源| 毛片新网地| 综合大香蕉| 啪啪操网| 综合色综合| 成人视频一区| 射区导航| 丁香桃色网| 色色亚洲| 亚洲avjiujiur91| 色婷婷天堂| 五月天福利影院导航| 超碰人人草| 26uuu欧美日本| 欧美经典片免费观看大全| 蜜桃婷婷狠狠久久| 色播五月婷婷| 秋霞网在线免费基地五月婷婷丁香| 丁香五月天激情五月天激情五月天激情网| 99热国产精品| 色色五月天网站| 人妻精品久久久久久久| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 婷婷丁香视频在线观看免费| 碰碰女| 婷婷五月丁香人妻无码高清| 五月综合六月婷婷| 久久精品熟女亚洲AV麻豆| 六月色日韩| 久久久久久综合88| 婷婷伊人网| 久久视频婷婷| 色婷婷操逼| 亚洲秘 无码一区二区三区妃光/1| 色亭亭九月| 婷婷四色成人综合色视| 久久91久久精品久久| www.五月天性.com| 免费91久久精品| 我爱婷婷五月天综合88| 丁香五月婷婷国产av| 丁香五月第九色| 丁香六月啪| 精品九九在线观看| 婷婷五月久久| 日本颜色视频人人爱| 五月激情综合婷婷| 色香欲综合| www.91AV.COM| 久久婷婷成人| 开心 五月 综合| 婷婷在线视频| 色性日本| 伊人狠狠色婷婷综合丁香一区| 亚洲综合五月天婷婷| 五月丁香亭亭AV女优| 天天做天天爱天天做| 操逼综合激情网| 五月婷婷丁香社区| 激情久久久久| 国产av一区二区三区| WWW.99热| 91色久| 色五月成人| hd五月婷婷在线| yw国产AV| 色五月激情网| 九九九九九九九热| 色九月婷婷丁香| 97人人射| 天天色域综合网| 天堂色色色| 超碰在线看| bbwcuckold精品熟妇| 欧美成人猛片AAAAAAA| 六月五月婷婷| 级情九色| 日本A片一区| 久久Xx| 开心五月六月婷婷| 五月天久久综合婷婷丁香| 1024成人免费看| 五月婷婷综合在线| 五婷婷六月合| 99热综合色图| 无码AV免费精品一区二区三区| 97婷婷五月| 天天综合五月| 婷婷丁香久久网| www.婷婷五月天| 凹凸探花电影| 91久久九久久九久久九久久九久久| 九九热九九| 欧美视频在线观看噜噜| 操一区| 操逼五月婷婷| 九九無妻| 婷婷五月免费视频| 国产高清RV综合aVa| 色婷婷a v| 丰满少妇猛烈A片免费看观看| 丁香五月婷婷网| 婷婷五月天日逼| 欧美激情伊人| 婷婷综合国产| 欧美三9久九观看| 五月丁香啪啪激情| 五月激情婷婷丁香天堂| 五月花婷婷最新| 激情五月婷| 思思热99er| 亚洲色婷婷| 伊人玖玖精品| 免费不卡狠操美女视频网| 五月综合亚洲色| 99热资源在线| 久草嫩草在线观看| 日本三级第一页| 无码色色色| 六月婷婷八月丁香| 丁香六月欧美| 久久婷婷五月综合色和| 99热九九在线| 婷婷五月免费在线| 婷婷五月俺要去| AV成人在线播放| 五月天大香蕉视频| 99在线看视频| 激情五月婷婷综合秋霞| 久久综合久色欧美综合狠狠| 婷婷在线视频| av大香蕉| www.99色| 婷婷五月丁香高清无码| 99re思思| 婷婷综合另类小说| 综合激情网五月激情| 久热综合| 五月天狠狠网站| 久久婷婷色情7777网站| 五月丁香婷婷中文| 99亚洲天堂| 1024手机在线观看看片_日韩精品| 一区二区传媒视频| www.久9| 久久天堂色| 久久91久久精品久久| 国产精产国品一二三在观看| 538在线精品| 中文字幕日产A片在线看| 五月天婷婷激情小说电影| 91婷婷色五月| 欧美精品18| 亚洲色久| 天天干天天日蜜臀av| 字幕网AV中文字幕| 色综合9| 涩 五月 婷婷 狠狠| 综合久久六月| 成人国产综合| 五月情四婷婷| 婷婷色成人| 79色色| 亚洲六月婷婷| 99这里只有精品|v| 欧美电影在线观看| 97性高潮久久久| 亚洲人妻电影| 色色日韩| 九九热视频思思| 思思热精品在线| 青青草原伊人网| 婷婷无码视频| 久久久国产精品黄毛片| 激情超碰网| 99九精品| 五月色亭丁香| av狠狠操| 亚洲九九夜夜| 探花搜索结果 - 黄上黄| 99热在线观看精品| 综合在线丁香五月| 天天色视频| 1024人妻| 婷婷五月综合网激情| 久久9精品| 五月丁香六月婷| 逼特逼在线免费播放| 天天综合色99| 美女五月激情| 天天爽天天爽| 男女啪啪做爰高潮无遮挡| 大香蕉太香蕉视频97| 影视av久久久噜噜噜噜噜三级| 99色精品视频| 超碰国产在线观看| 国产偷人爽久久久久久老妇APP | 日韩999| 99色看| 久久婷婷色色| 久久九九99.www| 色色婷| 色激情五月| 99在线免费观看| 亚洲婷婷综合视频| 99热首页在线30| 色五月婷婷操逼| 桃色成人网| 久99综合婷婷| 婷婷丁香五月色| 超碰人人色| 超碰国产在线观看| 狠狠色丁香久久婷婷综合五月| 99日在线视频| 天天干在线播放| 婷婷五月天狠狠色| 9|人妻人人操| 蜜乳.comcom| 久久资源网五月婷| 婷婷久久影院| 天天做天天摸| 伊人丁香在线| 欧美综合激情五月丁香| 欧美性爱五月天| 日韩欧美一道四区中文字幕| 婷婷五月天偷拍| 色婷婷五月天| 思思久久网| 欧美日本国产欧美日本韩国99| 亚洲婷婷性爱| 婷婷在线午夜| 亚洲精品又粗又大又爽A片| www久久99| 无码色| 日韩精品VIP| 99aese| 国产午夜精品AV一区二区麻豆| 99色视频在线观看最新| 99在线免费视频| 综合玖玖偷拍| 丁香五月天婷婷中文字幕| 五月天自拍视频| www久| 九九成人精品免费视频| 99re这里| 亭亭丁香aV| 狠狠干,狠狠操| 激情婷婷| 香蕉婷婷| 六月丁香婷婷网| 天天插天天射| 丁香五月天殴美激情| 色墦五月丁香| 久久久久综合激动五月天| 开心五月婷婷激情| 色综合久久88色综合天天人守婷| AA片在线观看视频在线播放 | 思思热视频在线| 婷婷丁香69精华| 五月丁香六月| 欧美性爱特黄一级aaaassss| 色色综合网www| 综合五月天婷婷色| 亚洲精品成人片在线播| 色欲婷婷五月天丁香| 99资源在线视频| 超碰九色| 五月丁香av在线| 中文字幕视频色婷婷| 五月丁香六月综合激情网| 播丁香五月婷婷欧美| 99热在线这里| 伊人色综合影院视频| 久久激情视频| www.伊人天堂偷偷婷婷| 91久久国产综合久久| 九九成人视频| 综合激情网五月激情| 激情文学综合婷婷五月天丁香花| 色五月女| 日本99视频| 亚洲国产精品VA在线看黑人| 五月色影院| 婷婷五月综合网| 九九成人| 精品色| 精品久久99码| 91九九九九九九| 日日干日日| 婷婷激情五月吧| 国产精品色情AAAAA片软件| 婷婷六月久久综合导航| 91性高潮久久久久久久久| 婷婷激情综合网| 丁香视频| 亚洲色无码A片一区二区麻豆| 婷婷五月激情视频在线| 这里只有精品在线视频精品| 婷婷五月天大香蕉在线视频观看| 午夜免费试看| 五月丁香欧美综合| 98毛片| 第四色色六月色综合| 久久9久| 国产成人va在线| 91干在线| 九九99热精品| 拍真实国产伦偷精品| 日本社区五月天激情| 婷婷五月天成人导航| 国内久久婷婷| 五月香婷婷| 五月天综合网| 99视频只有这里精品| 五月丁香手机在线| 蜜臀av粉嫩av懂色av| 亚洲第一成人无码A片| 秋霞A V毛片| 色情激情五月| 五月婷婷新网站| 久久婷婷丁香视频网| 激情内射人妻1区2区3区| caop在线| 色久综合| 情趣视频66| 呦呦v线| 女人露出p毛视频www网站| 一本色道久久综合狠狠躁小说| 人人人操 超碰| 狠狠色狠狠操| 色婷婷丁香五月| 五月天社区| 五月婷婷综合在线视频小说| 色婷婷a三区麻| 色七色九九| 九九Av| 九九精品综合| 色域五月婷婷丁香| 午夜丁香六月婷| 免费色婷婷| 草草女人亚洲| 高清资源站日A美A欧亚…| 五月天婷婷基地| 久久99久久99久久99人受| 99精品国产在热久久婷婷| 自拍盗摄 另类| 色五月视频,小说| 丁香五月天婷婷中文| 激情开心五月婷婷| 逼逼AV| 综合狠狠干| 亚洲久久视频| 五月婷婷操操| 国产,欧美,学生妹,视频| 性色做爰片在线观看WW| 国产AV国片偷人妻麻豆| 亚洲精品久久久无码| 大地9中文在线观看免费高清 | 9久国产精品| 五月丁香久久网| 啪啪激情综合| www.天天色综合| WWW,色五月| WWW.五月天9999| 激情五月天综合图片小说网站| 欧美婷婷六月丁香综合色连续高潮抽搐| 66精品国产成人| 成人视频九九| 艾小青av| 日日夜夜天天| 久久婷婷五月| 亚洲性爱AV在线| 欧美日韩一区二区三区四区| 亚洲免费视频网站| 操99| 激情综合五月.....| 99成人免费视频| 天天舔天天摸| 色色色色五月| 国产XXXX搡XXXXX搡麻豆| 丁香五月婷婷av影院| ww超碰在线| 亚洲天堂啪啪| WWW色五月天| 26uuu亚洲欧美| 五月丁香色综合| 色五月大香蕉| 日本女色人人| 婷婷精品综合| 九九成人高清视频| 天天插插天天| 色色色图| 五月天丁香花婷婷| 深爱激情中文五月天av| 色操b| 另类专区在线| 五月天社区婷婷| 天堂久久性| 这里只有精品99视频| 逼里香不卡| www.狠狠| 欧美婷婷九月| www色婷婷久久综合久色 | 伊人久久婷婷| 丁香六月亭亭久久综合| 九九综合九九| 伊人99久久| 99综合网| 激情婷婷五月社区| 色五月婷婷网| 丁香五月婷婷偷拍| 丁香网五月网| 五月激情偷拍| 99久久精彩视频| www.五月天性.com| 欧美婷婷日本| 伊人超碰在线| 九九九午夜影院成人| 影音先锋一区| 亚洲AV日韩AV永久无码网站| 婷婷五月天色丁香| 九热...av| 日日操无码| 色婷婷视频| 9 1超碰九色| 2021日韩无码| 色五月婷婷天天操夜夜操| 五月丁香色| 97精品自拍视频| 五月婷婷丁香色播网| 五月丁香激情综合网| 玖玖婷婷色| 五月丁香婷婷潮喷中文字幕| 69精品人人人人人人人人人| 色噜噜狠狠色综| 色五月色图| 色婷婷综合丁香五月天| 五月精品免费XXX| 香蕉AV777XXX色综合一区 | 99re在线播放| 亚洲精品网站色视频| 久久久.COM| 五月丁香六月婷婷久久| 国产综合网在线| 久久久久久五月天| 97色五月天| 丁香啪啪| 丁香五月天色| 日本三级韩三级99久久| 色综合婷婷| 九九自拍网| 丁香五月婷婷天堂大香蕉| 五月色天情| 琪琪色五月婷婷老师| 黄色99网| AV成人在线网站| 天天摸夜夜爽天天做| 天天色爽| 狠狠爱综合| 亚洲另类婷婷五月丁香在线播放| 久久九九综合| 99色综合| 超碰av在线| 婷婷五月天,影院| 少妇高潮呻吟A片免费看软件| 九九视频这里是精品五月| 五月婷婷无码| 奸逼视频| 色拍九九九| 夜夜骑天天操| 五月丁香啪啪综合| 狠狠综合| Se.婷婷五月天| 国产精品久久久久久久久久免费| 五月婷婷五月天天| 色欲AVV| 丁香五月香蕉| 黄色激情久久| 丁香五月天啪啪| 梁铮版《蜘蛛女侠》在线| 无码日本精品XXXXXXXXX| 白天AV月月| 天天久久婷婷| 五月丁香亭亭操逼| 丁香午月AV中文字幕| 中文字幕日产A片在线看| 丁香五月六月欧美| 伊人五月综合网| 婷婷色五月激情| 97激情五月天| 婷婷五月欧美| 玖玖99免费视频| 狠狠五月激情在线| 久久五月婷天天干| 天天爱天天秀天天做| 丝袜大香蕉| 亚洲网站观看视频| www.天天干| 六月亚洲婷婷6月中文字幕| 伊久大香蕉| 久久久久久97| 丁香狠狠| 日本三级网址| 六月丁丁香| 这里只有精品免费视频| 九九色热| 日韩av在线播放综合网| 狠狠爱婷婷爱| 99性爱无码| 91人操| 五月天婷久久| 丁香婷婷基地| 五月天色视频| 色婷婷五月开心六月综合| 天天综合天综合久久网| 九月丁香亭亭| 日日夜夜综合| 天天插天天玩天天干| 天天激情站| 99在线er热| 夜夜爱爱亚洲| 日产精品久久久久久久蜜臀| 婷婷的色色五月天| 99久久成人| 日本三级日本三级99| 激情婷婷激情在线不卡| 九九热在线视频观看| 思思热精品在线观看| 久久五月天婷婷视频| 婷婷五月激情综合啪啪| 欧美精品中文字幕亚洲专区| 成人av在线网站| 亚洲成人av在线观看| 91操人视频| 秋霞AV淫| ji'qi'luan'ren'lun| 久1色色| www.久久久久久久| 欲求不满的人妻| 99爱视频| 婷婷婷婷婷婷婷五月丁香| 天天做夜夜爽| 丁香婷婷色五月天| caopeng超碰| 丁香五月综合| 香蕉网久久| 91 久热| 99热在线观看| 另类激情综合| 丁香五月婷婷亚洲综合精品| 狠狠干在线| 十月丁香九月婷婷综合| 丁香五月激情六月| www.minyis.com【JT】实力收量可预付TG@LXSPSW8| 日韩AV在线免费观看| 中文字幕人妻AV| 天天日色情| 欧美性色A片免费免费观看的 | 97热视频| 97碰碰人人| 婷婷久久精品| 99玖玖在线视频| 婷婷五月激情小说| 小视频久久久aaa| 久狠日av| 日本操逼九九九九58日本操逼| 午夜不卡成人一区二区| 美女100%露全身无挡网站| WWW色五月天| av 一区三区四区| 五月丁香久久| 色5在线| 5月婷婷综合| 人人玩人人橾| 深爱婷婷基地| 六月婷婷五月丁香首页| 婷婷基地成人五月天| 狠狠色噜噜狠狠色噜噜噜999| 激情综合五月丁香| www.日本久久videos| www.久久| 五月久久噜噜| 另类国产综合| 男人的天堂五月丁香| 天天干天天干天天干天天干天| 欧美婷婷五月丁香| 色噜噜狠狠色综无码久久合欧美| 狠狠干综合| 丁香五月香蕉| 日本色色色| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 日本色五月| 97久久久| 色婷青青| 亚洲精品网址| 影音先锋一区二区三区| 99热大全在线观看| 国产丁香五月天婷婷| 丁香社区婷婷五月| 天天干,天天日| 亚洲AV网站| 五月婷婷丁香| 玖玖婷婷五月天毛片| 婷婷第一页| 在线中文av| 四五月婷婷| 99热精品在这里| 丁香五月欧美成人| 成人做爰A片免费看视频| 九九综合九色欧美狠狠| 99热在线观看免费精品| 91avse| 免费视频WWW在线观看网站| 日韩不卡123| 色婷婷88| 色综合色欲综合天天免费 | 丁香色色网| 精国产品一区二区三区A片| 婷婷成人av| 午夜免费试看| 五月天五月婷五月激情网| 成人丁香| 激情综合五月婷婷| 99欧美三级视频| 五月6香色婷婷视频| 色宗合久久五月婷婷| 射久久丁香五月| 99在线免费观看| 丁香婷婷婷婷十二月在线观看视频| 丁香伊人网| 久色中文| 激情综合啪啪| 色婷婷av综合网| 99久视频| 伊人五月天在线| 久久婷婷视频| 色综合色色色色| 天干干夜夜操| 大香蕉伊人99| 就去色色五月丁香婷婷久久久| 超碰成人电影| 99在线亚洲| 九九碰九九爱97超碰| 婷婷五月天丁香激情| 玖玖在线资源视频| 中文字幕,综合,91| 久久婷婷五月综合色丁香花| 亚洲综合在线视频| 久久综合五月| 大香蕉在九| 看婷婷五月天网| 精品久久人妻| 国产精品电| www.婷婷网| 天堂色婷婷| 婷婷丁香综合在线| se99在线| 激情综合网五月激情| 伊人大香蕉综合在线| 天天橾日日橾夜夜橾17| 人人爱人人草| 久久免费操| 综合久久99| 婷婷酒色网| 婷婷五月丁香五月天| 婷婷五月综合激情| 久久伦乱| 色婷婷久久| 97干在线免费| 男女久久婷婷五月天| 欧美人与性动交CCOO| 操人91| AA久久| 六月婷婷网| 另类五月激情| 新激情五月天| 欧美噜一噜| 国产精品涩涩涩视频网站| 色情五月天小说| 色综合com| 丁香九九九九| 亚洲五月天婷婷| 9月色婷婷| 射久久丁香五月| 在线看黄色| 另类激情中文| 久久 中文 日本| 亚洲视频伍月婷婷| 亚洲激情六月| 天天久| 99视频在线啪| 色综合久久五月天| 激情宗合 激情宗合| 国产成人亚洲综合A∨婷婷| 人人操碰| 亚洲五月天另类小说图片| 99热www| 天天日天天操心| 天堂久久性| 91久久| 91操碰| 五月香婷婷| 99在线观看免费精品视频| 欧美精品XXXXBBBB| 能看的AV网站| 五月天婷婷无码| 婷婷五点亚洲| 九九亚洲无码| 久久久18| 99热综合| 69激情小说| 人人操超碰| 深爱激情五月天| 夜夜 操无码| 综合激情五月天| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 天天日天天操心| 天天插天天干天天舔| 亚洲视频在线网| 国产婷婷五月天| 精品久久99码| 美国少妇性做爰| 噜噜色噜噜网| 91视频一起草| 五月色综合| 五月婷婷亞洲中文| 99热在线资源| 亚洲综合九九| 亚洲欧美另类在线23p| 天天综合网~91综合网| 青青草五月天| 婷婷五月天激情影片| 日本97在线| www.久久| 欧州色色| 丁香五月天堂网| av中文字幕免费观看| 色色热| 婷婷色五月亚洲| 久草网大香视频| 99热97| 亚洲综合色色| 国产亚洲精品人人| 91丨九色丨老熟女激情| 欧美六月| 天天做 天天爱| 久久激情综合| 国产jd1024基地手机看国产| A1片久久久| 丁香五月天激情AV| 99在线视频播放| 狠狠精品干练久久久无码中文字幕 | 五月丁香网av| 亚洲免费av观看| 狠狠狠狠狠干| WWW.桔色成人.COM| 五月视频日本免费观看| 伦99热| 国产日产亚系列精品版优势| 久久综合首页| 五月天色婷婷基地| 久热九九| 久久久久久久五月| 蜜桃五月天| 无码人妻电影| 九九性视频| 色亚洲视频| 色碰干| 色丁香五月婷婷综合久久| 91中文在线| 五月综合丁香婷婷| 2025年最新亚洲在线欧美| 久久精品色| 99噜噜| 青青草原爱爱网| 欧美成人精品A片免费一区99| 日本啪啪天堂| 色五月AV| cc精品国产性传播| 久久久婷丁香五月| AV色五月婷婷| 五月天天综合| 久久资源综合| 九九色婷婷五月天| 五月丁香六月激情综合| 六月婷婷综合| 丁香五月婷婷av| 无码 色| 。久久久久久久久久久久久久人妻| 天天做天天爱天天日| 91操碰| 在线成人视频免费| 色婷五月天激情| 伊人深爱综合| 日韩精品色| 深爱五月天婷综合| 888精品福利地址| 久久免费精品小视频| 色色五月天网站| 欧美VA视频| 综合五月丁香97| 色综合色婷色基地| 成人短视频免费| 日韩有码一区| 五月丁香亭亭A片| 久久9情免费| 亚洲天堂色| 99色人| 啪啪视频99| www狠狠爱com| 午夜色丁香| 丁香花成人区| 婷婷五月,偷窥偷拍网| 性爱激情小说AV五月丁香花| 日韩成人电泉AV| 39视频第二区| 伊人大香蕉在线视频| 99热全是精品| 九色无码| 久99视频在线观看| AV在线中文| 综合天天综合| 99久热这里有精品| 婷婷久久国产视频| 99在线视频精品| 婷婷五月婷婷五月| 色五XX| 五月欧美丁香在线观看| 久久伦乱| 99九九视频| 乱岳熟女50岁| 噢美99| 久久婷婷草| 美欧日韩国产成人在战| 色五月综合网| 激情丁香淫荡婷婷| 色婷婷先锋| 六月份天丁香婷婷| 九色PORNY自拍成人精彩视频| 天天狠天天叉| 嫩BBB搡BBBB榛BBBB| 97操在线| 97资源碰碰在线| 开心婷婷中文字慕| 色婷婷丁香五月丁香| 五月婷婷六月丁香色| 91久久精品无码一区二区三区| 激情伊人五月天| 噼里啪啦完整版中文在线观看 | 亚韩在线视频| 性婷婷| 激情綜合W W W,激情五月天| 精品成人在线观看| 天天干,夜夜爽| 人人操人| 九九碰九九爱97超碰| 激情综合激情五月| 丁香婷婷六月男男| 色无码| 久久天堂女人| 丁香啪啪| 久久机热这里只有精品| 综合激情在线| 免费看欧美成人A片无码| 亭亭五月色男人| 日本激情91| 久草久青福利| 97 A I色色| 综合网五月| 五月丁香狠狠爱婷婷综合| 大香蕉久久草| 99精品无码网站| 九九九九大香蕉| 久久久精品99亚洲综合| 婷婷五月美女直播| 国产无套精品一区二区| 色综合久久久无码中文字幕999| 五月间天堂综合| 第四色婷婷最爱| 久久久久亚洲AV无码网影音先锋| 99精品偷自拍| 26uuu精品一区二区| 丁香五月天欧美| 国产 亚洲 在线| 婷婷五月丁香国产| 99er这里只有精品| 丁香色婷婷五月天| 色色亚洲| 人妻精品在线| 无码 色| 午夜大香蕉| 香蕉婷婷色五月| 色综合久久88色综合天天| 五月综合久久| www.久久99热地址发布| 99这里是精品| 免费观看的av| 色欲av伊人久久大香线蕉影院| www一区二区三区| 99精彩视频| 啊V视频在线观看| 五月天婷婷在线AN| 久久AV无码精品人妻系列试探| 色啪影院| 99超级碰碰| 久久久久视剧HD| 这里只精品| 婷婷色五月噜噜| 91肏| 五月婷婷黄色毛片| 国产成人va在线| 蜜臀AV在线观看| 26UUU一区二区| 五月婷婷久久综合| 操逼巨乳91| 五月婷婷激情视频| 熟女色色一区二区| 婷婷亚洲五月丁香综合在线 | 色婷婷狠狠爱| 欧美性久| 久久a热| 九97免费视频| 五月丁香六月婷婷网站| 欧美性猛交99久久久久99按摩| 青青草性爱视频| 99在线精品观看99| 五月丁香无码| 色五月天丁香婷婷| 九热电影av| 婷婷社区五月天| 性爱网六月丁香| 婷婷性色| 九九偷拍网| 天天日综合| 九九九九中文字幕| 色欲色香综合网| 亚洲视频1区| 亚洲五月花| 怡红院成人AV| 激情综合五| 99久久视频| 精品网站:999WWW| 亚州操操| 99综合| 国产片天天爽夜夜爽| 色综合天天| 深夜婷婷五月丁香| 欧美顶级少妇做爰HD| 99福利视频| 色护士综合| 婷婷久久精品|