99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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
返回資訊列表
五月伊人91| 天天日天天爽| 激情五月天啪啪| 天堂综合久久 | 天天 青草 丝袜制服 在线| 97午夜一区二区| 色婷另类| 五月天婷婷丁香社区| 操操自拍| 久久久久9久无码视频| 99精品大片| 久久九九综合| www,com,五月色色| 人人干人人操人人摸人人做| 久9热在线视频| 97干干干丁香| 婷香五月激情视频| 97色在线观看视频| 五月婷婷中文| 这里只有精彩视| www九九| 被强行糟蹋的女人A片| 亚洲中文乱字字幕在线永久| 狠狠色狠狠操| 五月婷婷五月天亚洲无码| 久草性爱| 外国碰视频网站97| 久草五月天| 777精品久无码人妻蜜桃| 日本成人噜噜噜噜噜| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 丁香五月天激情五月天激情五月天激情网| 97电影99热| 国产精品成人AV在线观看春天| 99色综合| www.色婷婷.com| 五月婷成人网| 久久AAAA片一区二区| 婷婷狠狠狠爱| 五月婷婷之综合激情| 色久播播| 天天干,天天舔| 97人人爱人人操| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 情欲禁地| 日比网免费国产| 亚洲AV成人精品日韩在线播放| 九九热九九| 大香蕉大香蕉在线影院| 丁香六月婷婷开心婷婷网| 久久久久久久久久久久久9| 色五月丁香婷婷| 五月六月丁香激情| 色九月婷婷丁香| 婷婷激情五月天在线| 色在线五月天免费| 天天摸日日舔狠狠添婷婷婷| 欧美亚洲婷婷五月| 色色日本| 色哟哟精品| av人人干| 久久xx| 99热99精品| 亚洲综合视频八| 99热在线观看| 嫩草免费视频| 狠狠99| 狠狠 久久| 日本黄色三级片内射| 九九黄色网| 四色五月婷婷| 久久九九激情五月天 | 五月婷婷|欧美| 99爱视频| 99无码视频| 婷婷五月成人| 丁香五月 性爱| 90色免费视频| 婷婷黄色| 亚洲婷婷五月天激情综合| 亚洲欧洲自拍图片专区五月天| 99精品视频在线6| 亚洲色婷婷激情| 99久久思思| 伊人婷婷色激情丁香| 逼逼AV| 五月色婷婷激情| 五月综合缴情网| www.av骚货| 色婷婷六月丁香综合欲精品| 久99| 成人国产网站在线免费看| 五月丁香本色在线观看| 婷婷天堂综合| 天天做天天爱高潮片| 激情五月天在线观看婷婷| 天天色爽| 国产欧美va| 国产在线黄色| 六月丁香婷婷尤物| 超碰资源在线| 国产精品电| 婷婷五月天涩涩| 丁香色成人| 激情婷婷五月女| 婷婷激情啪啪| 亭亭玉月丁香| 99热碰碰| 欧美综合五月丁香六月婷| 色婷婷AV久久久久久久| 噼里啪啦在线观看免费完整版视频 | 777影视理论片大全在线观看| 国产美女无遮挡裸体毛片A片| 激情婷婷99| 日本久久婷婷| www.com五月天| 99在线精品免费视频| 成人丁香婷婷| 亚洲色色图片| 亚洲超碰在线| 婷婷丁香五月天影院| 精品网站99| 六月丁香五月天| 国产67194| 五月伊人91| 色色丁香五月天| 五月丁香人人婷婷在线观看| www.99热这里只有精品| 九九热10| 久人人操| 五月丁香婷婷激情澎湃四射| 丁香五月激情综合| 熟女乱论网| 五月婷婷免费在线观看视频| 日本道久久91| 五月丁香久久综合| 狠狠狠狠狠干| 五月丁香婷婷爱激情综合网| 五月伊人网| 国内熟女黄色系列| 丁香五月激情无码视频| 丰满少妇乱A片无码| 9久视频| 色五月丁香伊人五月| 99精品在这里| 五月丁香网av| www,天天干| 五月天激情啪啪| 激情婷婷人妻| 国产亚洲成AV人片在线观黄桃| 五月天伊人综合| 深情五月天| 天天射影院| 91av视频在线观看最新网址| 色久天| 色婷婷成人做爰A片免费看网站| 91丨九色丨高潮丰满日本| 六月婷婷在线视频| 婷婷久久图片| 中文字幕在线资源| 激情综合网五月天| 这里只精品| www.日日夜夜.com| 色五月婷婷久久爱| 久久九九激情五月天 | 色色色色色色色色色色色色色色,网站| 天天色伊人| 色香蕉影院| 新97人人上人人| 麻豆雪千夏| 久久国产AV| 思思国产99| 久久曰9| 99久久久国产精品免费蜜乳tv| 激情婷婷| www,99热| 超碰超碰在线| 丰满少妇猛烈A片免费看观看| 天天天天天天天干| 一本久久婷婷| 国产白丝在线一区| 激情99热| 五月亭亭色| A久久| 婷婷九月丁香天堂丁香天堂| 久久综合五月天| 91狠狠色| 久久婷婷老| 99视频只有这里精品| 色婷婷狠狠久久综合五月| 六月丁香婷婷五月| 96丁香六月婷婷蜜桃综合久久| 97人人干| 久久丁香久久| 成片免费播放| 这里只有精品久久| 狠狠搞狠狠操| 五月天丁香网| 天天精品视频免费观看| 欧美久久婷婷| 在线视频九色97| 丁香午夜天| 日韩综合久久| 日韩二区搞逼插逼毛片| 97色女人在线| site:publishdd.com| 欧美三级视频| 五月天激情网图片| 日本一级一片免费视频| 99视频这里只有久久精品 | www.狠狠| 色综合五月| 噜噜噜噜婷婷五月天| 人妻丰满精品一区二区A片| 开心五月激情婷婷| 欧美激情xxxXX| 欧美久久久中文字幕| 久久与婷婷| 五月激情婷婷六月丁香| 99免费综合网| 67194中文字幕| www.夜夜| 色色五月婷婷久久| 丁香五月婷婷成人色区| 99久久99久久综合| 97干视频在线| 极品少妇婷婷五月| 日本黄色一级| 这里只有精品视频视频在线观看| 久久久免费图片视频| 99re思思热久久| 伊人色综在线| 色综合爱综合| 久久色五月天| 色婷婷欧美| 91无码一起草| 亚洲综合五月天婷婷| 十一月婷婷激情四射| 婷婷丁香五月激情图片| 色婷婷成人丁香| 丁香五月天激情四射网| 久久全色| 婷婷香蕉视频| 99九九这里有免费视频| 香蕉人妻AV久久久久天天| 99热亚洲精品| 久热69| 另类综合婷婷五月天欧美视频| 色一区高清| 在线观看欧美| 色五月偷偷| 久久ri精品| 蜜桃人妻无码AV天堂三区| 久久婷色| 亚洲精品大片| 狼人久草| 成人做爰A片免费看视频| 另类视频综合| 操人91| 天堂综合久| 激情深爱综合网| 丁香五月在线视频黑人| 夜夜骑福利资源| 天天色伊人| 九月丁香婷婷综合激情| 六月亚洲| 激情网综合| 五月丁香六月激情网| 亚洲中文字幕av| 激情婷婷丁香五月天| 丁香五月激情婷婷婷婷在线观看| 色综合色| 午夜大香蕉| 人人操插| 99视频自拍| 久久XX| 久热人妻| 欧美成人精品A片免费一区99| 欧美色色色色色| 激情五月天视频| 99碰超| 九九热在线观看视频| 美女五月天| 久久综合激情| 91丨九色丨首页| 久久这里只有精品视频15| 亚洲激情四谢| 色色婷婷丁香五月天| 色婷婷免费视频| 在线成人网址| 色视五月天婷婷| 热久久66| www.天天干| 色五月婷婷操逼| 9l视频自拍九色9l视频自拍九色9l社区| www.99热在线观看| 香蕉AV福利精品导航| 香蕉久久国产AV一区二区| 亚洲午夜在线视频| WWW.99视频| 99 r热| 婷婷狠狠五月综合| 亚洲五月天婷婷| 婷婷综合久久| 激情美女五月天激情在线| 综合激情网激情五月。| 51国精产品自偷自偷综合| 免费看欧美成人A片无码| www.婷婷久久五月天| 久久影视婷婷五月| 亚洲色情网站| 亚洲、欧美、国产另类笫二区| 97色啪| 色播婷婷五月天| 99色色热| 人人爽天天爽| 97精品人人A片免费看| 婷婷六久久| 天堂色婷婷| 丁香综合伊人| 免费黄色AV| 99精品久久| 欧美激情久| 人人草公开操| 91日日日| 91在线看片| 久久五月天激情美女| 色综合日日| 一区二区免费看| 国产精品18久久久| 五月丁香婷婷福利| AV在线观看网站| 99欧美热| 99色视频在线观看| 色五月婷婷基地| 日韩欧美婷婷丁| 777色婷婷爱五月| 深夜激情网| 久久久五月天| 97人妻碰碰碰久| 色七色九九| 综合色色色| 嫩草AV久久伊人妇女超级A| 五月天婷婷AV| 26uuu另类亚洲欧美日本一| 97人人操人人爽| 欧美成人精品一区二区| 国产偷人爽久久久久久老妇APP| www99在线观看视频| 五月四色婷婷| 久久精品国产AV一区二区三区 | 五月天激情偷拍| 五月婷婷丁香五月| 9在线9在线婷婷在线国产| 丁香久久AV| 超碰人妻在线| 99热爱爱干干日| 99只有精品| 玖玖九九9999在线观看视频精品| 开心五月婷婷在线| 久操香蕉| 久久五月天色| 激情五月丁香色色去久久| 五月丁香五月天现场视频| 日日做A爰片久久毛片A片英语| 婷婷五月天黄色| 丁香婷婷激情| 91狠狠综合网| 久久只有18视频| 亚洲99综合| 激情婷婷久久| 五月婷久久| 久月婷婷| 五月天婷婷基地综合网| 色欲天天综合网| 99久久精品国产色欲| 色屌丝中文字幕| 婷婷五月乱交换| 日日爽日日爽| 97香蕉人人在线观看| 99精品小视频| 原琪琪色影院| 欧美25p| 超碰av在线| www.99热| 色婷婷丁香五月| 五月天激情影院| 欧美日韩999| 综合网色| 色五月丁香婷婷综合| 熟女人妻一区二区三区免费看| 亚州视频九九99| 内射激情在线| 久久久九九视频精品18| 91在线日| 少妇婷婷五月天| 久综合4| 黄色激情五月天| 色婷婷久久7777| 思思热精品在线| 五月丁香六月婷婷久久| 可以看的AV| 一本久久亚洲五月婷婷| 任你搞在线观看视频| 日日撸夜夜操| 99热精品在线播放观看| 高清国产AV| 成人在线不卡| 99热只有精品在线观看| 一起草无码| 婷婷五月天亚洲| 2020久久婷婷五月| 538任你爽视频不一样的| 99操逼| 婷婷热婷婷色| XX久久| 99热综合| 狠狠色五月天| 六月婷伊人| 91紱請| jizzdr| 丁香五月自拍| 桃色五月婷婷| 超碰碰碰碰| 亚洲色色色色| 五月丁香六月久久| 中文字幕亚洲-区久久99婷婷| 婷婷久久综合久| 热久久视频99| 99热成人永久免费| 丁XX 成人| 888精品福利地址| 99九九热视频免费| 国产肥白大熟妇BBBB视频| 五月丁香亚洲综合| 激情伊人五月婷婷久久| www.91色| 久草九九| 影音先锋男士资源网一区| 99re这里| 激情床戏| 天天狠狠夜夜狠狠2023| 99视频精品全部免费 在线| 五月丁香色婷婷色| 97在线/日本| 丁香五月成人| 激情五月婷婷视频一区二区三区| 欧美日比视频| 最新va在线播放| 操日本人妻视频| 4438成人电影| 日本nghangse中文字幕| 爱99干99| www婷婷| 久久婷婷五月天激情四射| 丁香五月AV综合激情| 五月婷婷色综图片| 狠狠色丁香久久| 91丨九色丨首页| 五月天婷婷影院| www.日韩国产| 人妻久久久| 多精窝99在线视频| 色婷婷六月性| 激情婷婷五月亚洲| 九九日本视频| 狠狠操天天操| 五月婷婷深深爱爱| 五月天大香蕉| 婷婷狠狠操| 婷婷五月激情欧美| 99热主页日本| 综合久久婷婷| 九九这里有精品| 丁香九月婷| 玖玖婷婷五月| 99热精品在线观看| 婷婷五月婷婷| 99热免费| 丁香五月婷婷激情97| 狠狠干综合| 六月丁香网| 亚洲无码99| 香蕉久久国产AV一区二区| 超碰人人艹| 久草五月婷婷| 天天综合精品| 开心五月婷婷激情| 狠狠爱综合网| 亚洲A片成人无码久久精品青桔| 日日夜夜干| 日本不卡高字幕在线2019| 强辱丰满人妻HD中文字幕| 五月天激情国产综合婷婷婷| 亚洲深喉aV| 久久免费少妇高潮99精品| 欧美五月婷婷综合| 九九精品热播| 欧洲激情网站| 五月天合网| 天干天天干天天天天天| 天天久| nvrentiantang av| 久热超碰| 日韩黄在免| 九九综合九色欧美狠狠| 色五月婷婷操逼| 91精品久久久久久综合五月天| 欧美噜噜免费观看| 五月天激情视频网站| 色色婷婷丁香五月天| 亚洲综合在线视频| 国产日产亚洲系列最新| 五月婷婷日本| 五月婷伊人| 久久久人妻门| 色婷婷久久综合| 99区视频| 国产精品爽爽久久久久久| 色婷久久| 九九中文色色| 五月丁香六月色婷婷综合五月天 | 九热视频免费观看| 91丨九色丨东北熟女| 狠狠色官网| www.操.com| 天天日天天干天天操| 九九爱精品网站| 91欧美日韩综合| 99久久a线观| 五月天国产婷婷精品视频在线| 欧美五月婷婷| 丁香五月婷婷av影院| 五月婷久久草| 亚洲综合色丁香婷婷六月| 激情丁香五月婷婷| 人妻无码视频网| 九九精品综合| 婷婷狠狠干| 99热自拍| WWW久久久| 人妻自慰高清合集| www.色五月| 国产精品人妻在线网址| 人人爽亚洲| 色人久久| 超碰在线视屏| 激情五月婷婷五月| 日本三级99人妇网站| 色婷婷手机在线| 色综合色色| 午夜无码熟熟妇丰满人妻| 国产99久9在线| 亚洲女婷婷五月基地综合久久久| 激情婷婷六月天| 国产黄色一级片| 久久人妻情侣| 亚洲日本韩国| 色七色九九| 丁香婷婷九月| 97性视频| 色色色色色色色色色色色色色97| 日韩三级视频一区二区| 狠色狠色综合久久| 婷婷情色开心五月天99| caopeng97日韩| 开心五月天激情网| 开心激情网五月天| 丁香激情网| 五月天激情视频| 91人妻人人操| 久久这里只有精品1| 五月综合激情婷婷六月色窝| 色婷婷五月天天天天天| 久久婷五月天| 婷婷五月激情综合| 色五月激情| 91久操| 五月丁香婷婷基地| 99热老网站| 亚洲欧美999| 狼人伊人天堂| 五月丁香啪啪综合| 丁香花婷婷五月天| 99成人精品视频| 丁香五月综合网| 丁香五月天欧美| 日本乱子人伦在线视频| 亚洲精品五月| 日韩精品呦呦va| 久久婷婷五月综合伊人| 色婷婷文字幕| www.99久久久| 色情·com| 99久热| WWW.桔色成人.COM入口| 久久久久久五月天| 人妻久久久久久久久久| 青青草婷婷久久| 99视频| www.五月婷婷.com| 色色亚洲| 丁香五月五婷| 色婷婷久久综| 91五月天| 久久免费视频62| 婷婷伊人綜合| 丁香五月激情综合| 天天综合天天做天天综合| 91精品国产综合久久久不卡电影| 亚洲色情网站| 五月婷婷六月综合| www.婷婷五月天.com| 91久操| www,五月天激情| 人人叉久| 色九九综合| 五月天婷婷在看| av人人操| www.婷婷五月| 国产精品婷婷午夜在线观看| 九热精品| 激情综合网激情五月婷婷| 月婷婷婷婷五月| 丁香五月婷婷基地| 淫视馆av三区| 99热这里是精品| 亚洲婷婷婷| 伊人久热91| 国产亚洲色婷婷久久99精品9j| 玖玖婷婷精品| 北京熟妇搡BBBB搡BBBB| 色香欲综合| 99国产小视频2013| 九月激情综合婷婷| 激情五月丁香社区| a久久免费视频| 五月天啪啪视频| 色和综合网| 久久久香| 狠狠色狠狠操| 天天射射夜| 99精品丰满| 可以免费观看的AV| 婷婷刺激综合| 91小黄书网址在线观看| 99re66热这里只有精品| 五月天婷婷色综合| 精品一区二区三区免费毛片爱| 丁香五月AV| 婷婷五月丁香综合激情小说| 99色视频在线观看最新| 婷婷五月综合网激情| 亚洲1区| 操逼在线视频| 99re99热| 99综合久久| 五月天婷婷激情四射综合| 五月激情小说| 欧美精品999| 天天干天天色综合| 久热精品视频| 婷婷激情伍月网| www.sebowuyue| 十二区无码| 亚洲a色| 久9热视频| 99热这里只有精品免费观看| 久热只有这里精品| 九热视频这里只有精品| 五月天激情小说电影| 色五月网址| 丁香五月网址| WWW久久久| 色天堂在线| 99热99| 色九月丁香婷婷蜜桃在线观看| 图片区 小说区 区 亚洲五月| 六月丁香五月婷婷| 99热首页| 午夜亚洲国产精品av一区二区| 日韩无码色色| 日本在线va| 色播激情五月天| 人人人人人人人草| 色五月婷婷内射| 可以直接看的AV网站| 五月天色在线| 99精品22| 美女五月天| 五月激情婷婷国产精品久久久久久| 日日艹思思热| 五月色亚洲| 九九99热| 伊人五月天| 91干在线| 激情五月丁香五月| 4399成人黄A片| 婷婷五月天AV| 公的粗大挺进了我的密道| 精品一二三区久久AAA片| 搡BBBB搡BBB搡五十| 五月天激情小说| 开心五月激情网| 婷婷丁香18| 婷婷黄色网| 婷婷丁香社区| 久久婷婷丁香五月宗合| 五月丁香av中文| 五月色丁香综合| 婷婷五月天视频在线观看| 国产成人+亚洲+欧洲| 日本va欧美va国产激情| 免费视频无码| 亚洲国产精品VA在线看黑人| 成人午夜天| 二区成人视频| 色婷婷综合视频| 天天插天天狠| 婷婷六月天亚州| 欧美va亚洲va在线播放| 婷丁香五月天| 79精品视频在线观看,| 激情内射人妻1区2区3区| 中文字幕精品推荐免费在线观| 久大香蕉| 丁香激情六月天婷婷| 五月天综合视频| 小视频久久久aaa| 国产精品久久久久久久久久免费| 欧美日本高清视频99| 五月天丁香六月综合| 五月婷婷花| 大香蕉网站,大香蕉综合| 欧美成人精品A片免费一区99| 免费日本aⅴ中文字幕 | 激情久久五月网| 天天爽天天爽| 国产精品涩涩涩视频网站| 69精品人人人人人人| 久久99热只有精品| 日韩1区2区| 伊人久久婷婷| 黄色一级影片| 五月天玖玖狠狠色色| 九九九九毛片| 噜噜狠狠色综合久| 99re这里只有精品视频了| 色噜噜综合网| 色综合com| 五月天激情婷婷| 日本性视频| 欧美婷婷五月激情| 五月婷婷综合网| 亚洲AV综合在线观看| 综合图片色色| 六月五月天婷婷涩播在线| 婷婷综合偷拍| 另类色网| 五月激情婷婷综合| 色婷狠狠| 五月婷婷色吧!| 人妻啪啪啪| 日韩久综合| 99国产小视频| 伊人激情AV一区二区三区| 超碰在线免费| 色欲午夜无码久久久久久张津瑜| 97luluse| 五月天成人手机在线视频| 丁香在线视频| 日本3级片偷拍网站| 无码任你操| 黄色AAAA韩国guochansanji | WWW.99热| 色九月欧美| 精a品a| 91无码一起草| 丁香五月天啪啪激情综和网| 熟妇人妻中文字幕无码老熟妇| 91Chinese在线| 五月色婷婷影院| 久久加勒比| 这里只有精品无码| 五月天婷婷Av| 全亚洲最大的婷婷五月天网站COM| 九九精品在线观看视频6| 99re欧美精品| 色五月婷婷激情综合网| 99精品视频偷拍| www.99精品视频| 丁香五月欧美| 五月综合激情图片| 综合网激情五月天| 午夜少妇在线观看视频| 亚洲色五月天是什么| 婷婷五月天小说| 欧美欧盟性爱网| 色五月五月婷婷| 大香蕉婷婷色| 色五月综合在线| 天天舔天天插天天爱| 激情五月天视频| Se.婷婷五月天| 熟妇内谢69XXXXXA片| 九九热99精品| 丁香婷婷综合影院| 九色啦蜜臀| 久久久久网站| 九九九九这里只有精品| 色综合综合色| 免费视频WWW在线观看网站| 色五月成人在线| 1024成人在线观看| 97人人操人人干| 天天夜夜操| 五月天色综合| 香蕉AV777XXX色综合一区| 亚洲精品国产精品乱码视99| 久久久激情视频| 国产无遮挡又黄又爽免费网站| 婷婷深爱五月丁香| 婷婷香香五月| 五月丁香婷婷狠狠操| 久久停停超碰| 99热这里只有的精品视| 中文字幕在线免费| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 精品A√| 91成人视频| 婷婷五月激情欧美大胆视频| 婷婷五月色综合| 开心五激情网| 久久婷婷五月天激情四射| 青青草视频免费观看| 人人干女人| 五月丁香六月激情网| 天堂在线9| j五月香在线| 九九五月天| 大陆肏屄视频| 婷婷五月天视| 五月婷婷婷综合网| 狠狠婷婷综合| 五月婷婷丁香| 啪色综合| 操熟女成人网| 久久久久婷婷五月热综合| www.精品久9| 天海翼中文字幕高| 成人短视频在线| 婷婷开心久久| 丁香五月婷婷色五月| 五月婷在线影院| 色婷婷亚洲综合天堂| 五月丁香| AV九九| www.夜夜操| 色婷婷视频综合| 2025最新亚洲激情在线| 国产 码在线成人网站| 无码A片一区二区免费| 99操九九网| WWW.桔色成人.COM| 深爱五月激情| 亚洲操逼片| 天天日天天插| 婷婷成年人免费视频| 五月天久久www| 色五月久久成人婷婷| 久久综合爱| 超碰色婷婷| av在线免费网站| 日韩AV中文字幕在线| 拍色综合| 人操综合| 成人在线观看国产| 黄色片久久| 国产精品久久欧美久久一区| 五月天婷婷基地| 亚洲六月色| 99在线观看| 五月久久婷婷| 久久精品视频99| 久色激情| 99干日本| 丁香婷婷五月综合色情| 99久在线精品99re8| www.色综合.com| 九九人人精品| 青青草原伊人网| 丁香五月综合激情啪啪| 色婷婷亚洲| 日韩成人网址| 婷婷五月天成人网| 777精品久无码人妻蜜桃| 成人做爰A片免费看视频| 麻豆AV一区二区三区| 成熟妇人A片免费看网站| 成人国产欧美大片一区| 丁香五月五月婷婷欧美大香蕉| 任你躁XXXXX麻豆精品| 95精品区一区二| 激情五月婷婷丁香综合网| 91VIP在线观看| 婷婷五月综合啪| 91操片| 色五月xxx| 天天做天天爰天天爽天天无遮挡| 91啪级电影| www.99成人视频| 丁香婷婷六月男男| 91九色首页| 国产日韩欧美| 婷婷不卡基地| 9l视频自拍9l视频自拍九色学生| 久婷婷| 青青草深爱激情网| 五月天婷婷在线观看| 亚洲AV网址| 99免费在线视频| 久久9情免费| 五月婷婷色啪| 色久播播| 思思热99在线视频| 亚洲综合另类| 另类图片五月天| 91日婷婷在线| 色五月91| 狠狠操.COM| 播五月开心婷婷欧美综合| 天天日天天爽夜夜爽| 久久婷婷五月综合色欧美| 亚洲AV无码影院| 亚洲精品网站色视频| 日日夜夜天天爽| 久久艹99| 久久人妻熟女一区二区| 一本色道久久综合狠狠躁小说| 亚洲人妻AV| 欧美成人精品一区二区| 婷婷黄色| 五月天操逼激情| www.婷婷五月天| 五月天激情中文字幕| 玖玖婷婷五月| 国产69久久久欧美黑人A片| 国产性爱色| 久久婷婷六月| 欧美xx激情视频在线观看| 大香蕉啪啪网| 精品九九久久| 天天五月香欧美| 日欧大屏操| 久久视频在线视频| 丁香五月天狠狠操| A色色| 五月丁香啪| 婷婷丁香综合色AV| 日本狠狠爽| 1024操逼视频| 五月丁香综缴情性爱| 五月婷婷干干干| 思思热视频| 亚洲精品又粗又大又爽A片| 97极品在线| 色色免费网战视频| 操操碰| 激情六月婷婷| 狠狠插狠狠操| aV直接看| 怕怕av| 四虎成人精品永久免费AV九九| 人人操人人妻| A一级操| 东京热免费视频| 久草丁香婷婷五月天婷| 色综合网综合| 99精品成人无码A片观看金桔| 99热这里都是精品| 国产精品色色| 抽插特写| 99秘 在线| 色五月婷婷在线| 婷婷亚洲影院| 99男人的天堂| 精品九九网| 亚洲va欧洲va国产va不卡| 这里只有精品96| 婷婷五月俺要去| 天天干,天天日| 五月丁香六月婷| 婷婷久久99| 中文字幕激情综合| 夜夜骑天天操| 丁香六月婷婷色XXXXX| 操逼棍操逼| 2050人人操免费工开爱| 夜夜爽日日躁| 国产无遮挡又黄又爽免费网站| 色婷丁香五月| 五月开心激情| 色婷婷狠狠| 精品久久99| www.日本久久videos| 色婷婷香蕉| 伊人干综合| 97人人草| 亚洲一个色| 99久热| 色色色精品无码区| 99热9| 亚洲婷婷丁香五月亚洲| 夜夜爽77777妓女免费下载| 色综合播放| 97在线观看| 少妇人妻凹凸视频| 丁香av网| 欧美婷婷成人| 182TV大香蕉| 99久久综合网| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 婷婷五月天AV网| 色情五月综合婷婷| 婷婷色系婷色| 99青青草99| 夜夜爱网站| 久草视频一,二三四| av在线资源| 五月天伊人av| 密着浓厚中出乚交尾GvG935| 996热re视频精品视频这里| 中文字幕精品推荐免费在线观| 天天操天天干天天日| 久久色天堂| 九九AV| 日韩十国产极品久久| 五月婷婷国产| 六月婷婷激情| 99高级会所久久| 91制片厂久久久国产电影| 婷婷天天日婷婷| 亚洲综合九九| 亚洲12p| 激情五月天综合| 99爱爱| 亚洲精品无人区| 五月婷婷色五月| 另类视频在线| av高清无码| 久久五月天网| 精品婷婷五月视| 蜜乳AV成人| 亚洲网视屏| 深爱五月天 开心网| 丁香激情五月少妇| www.夜夜| 深爱激情五月婷婷| 激情丁香五月天综合| 99ri网站在线观看| 久久精典| 色婷婷色五月综合| 一级性感黄色内射视频| 日本乱子人伦在线视频| 人人草人人爱| 婷婷五月天激情在线观看 | 激情五月天伊人影院| 亚洲综合激情五月久久| 骚逼视频一区2区| 色五月激情综合网| 久热网站| 蜘蛛女免费观看完整版高清电影| 97sese婷婷| 天天射影院| 日本爆乳片手机在线播放| 99久久a线观| 色婷婷色九月| 99热 精品在线| www.超碰在线| 26uuu最新地址| 思思热99er在线视频| 久久性刺激| 精品99*| 99性色| 99ri精品在线| 五月婷婷福利| 色八月婷婷| 狼人婷婷综合| 天天肏天天舔AV| 伊人五月天| 99热国产精品| 婷婷开心激情| 九九热视频免费的| 成人操呦av| 午夜九九九九九九九九九九九九九| 超碰在线50| 色啪网| 操99| 人妻久久婷婷| 99re8这里只有精品99re8热视频| 熟女五月天久久综合| 激情久久久| 另类综合激情| 懂色av蜜臀av粉嫩av永陈冠希| 亚洲六月综合激情久久下卡| 五月丁香综合| 九九色综合九九色| 婷色五月天| 激情影院丁香五月| 午夜丁香五月天综合| 九九热在这里只有精品| 日日操夜夜操狠狠操| 99色婷婷视频| 碰碰91| 色域五月婷婷丁香| wWW九九在线播放| 超碰高清在线| 婷婷久久在线| 久久蜜臀婷婷| 激情五月天.色网| 成人草榴视频| 综合aV在线| 91夫妻视频| 久久综合久色欧美综合狠狠| 99久久婷婷| 亚洲激情综合| 久青草影院| 九九成人| 日欧一片内射VA在线影院| 亚洲中文字幕在线观看| 天天日日夜夜| 国产精品久久久久9999小说| 欧美在线| 久久婷婷午夜| 婷婷九月久久| 九九Y精品热播| 久久精品噜噜噜成人A∨色欲| 五月婷婷亚洲色图| 丁香五月婷婷天堂大香蕉| 九月婷婷激情| 五月丁香婷婷基地| 婷婷五月激情四月综合| 天天五月香欧美| 激情综合综合综合| 操逼123网| 丁香五月婷中字幕| 性热视频99精品| 久久视频婷婷视频| 天天干,天天日| 亚洲区,视频区,视频区免费| 久草狼人| 久久大香蕉同僚| 激情AV| 激情99| 99精彩视频网站在线| 六月婷婷综合网2| 婷婷五月天涩涩| www久久艹| 五月婷婷黄色| 色婷婷综合五月| 婷婷丁香人妻天天| 五月天成人在线视频网站| 日夜操B| 丰满少妇猛烈A片免费看观看| 色综合婷婷99| 色七七九九| 亚州激情网站无码| 26uuu欧美激情另类| 激情六月天| 色婷五月| 操逼综合激情网| 大香蕉天堂| 色五月天中文字幕| 精a品a| 久久婷五月| 婷婷五月丁香图片人人操| av线电影| 综合五月丁香久久| 色五XX| 色婷婷丁香五月| 丁香五月婷婷欧美性爱| 91日视频| 色国产五月| 99综合网| 天天综合精品| 国内久久亭亭| 天天拍天天做视频| 五月婷婷六月丁香五月| 青青青在线视频国产| 情一色一乱一伦一91A| 丁香五月天色综合| 野战毛片三一3| 久久丁香| 97日在线视频| 天天日,夜夜爽| 久99久在线| 9999热免费视频视频| 婷婷激情伍月网| 久久偷拍综合五月天| 激情网五月天| 色婷久九| 婷婷色五月情| 五月丁香婷婷基地| 99啪在线视频| 婷婷五月天Av| 午夜激情综合| 另类图片五月天激情| 色婷婷丁香五月天在线视频| 色五月婷婷大香蕉| 色五月丁香91| 色激情综合狠狠婷婷| 五月丁香在线| 182.t午在线观看| 乱女乱妇熟女熟妇综合网站| 视频一二区| 丁香五月婷婷总啪啪| 六月丁婷婷| 婷婷亚洲影院| 4399欧美另类视频| 综合五月激情| 99爱视频| 婷婷激情中文综合| 婷婷的色色五月天| 七七久久婷婷| 精品人妻久久久| 久久久久9| 色婷操逼| 丁香五月婷婷激情尤物| 久久无意婷婷| 深爱丁香激情| 欧洲色区| 欧日美女Va| 久/久精品99看9| 久久久久久久久久久97| 亚洲天码视频www蛋播视频| 1024在线一区| 激情校园 亚洲| 五月丁香激情综合网| 狠狠色综合网| 五月色婷婷影院| 99久精品| 五月天婷婷社区| 五月天久久激情| 五月婷婷综合久久| 嫩模草| www.ppypp| 人妻在线观看视频| 五月香六月婷| 91热久88| 日本熟女内射| 奇米色大香蕉| 另类五月激情| 超级碰碰碰久久网站| 日日日天天干| 996黄色片| 婷婷性爱五月天| 日韩精品VIP| 天天做夜夜爽| 日本久久99久久| 久婷久婷| 999婷婷综合| 色五月网址| 色婷婷中文字母五月丁香| 狠狠穞A片一區二區三區| 丁六月激情| 欧美一级a |