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
返回資訊列表
九九国产精视频| www99热| 无码少妇高潮喷水A片免费| 26UUU精品一区二区c〇m| 五月婷婷欧洲| 色色激情| 黄色成人网站在线播放| 国产片色| 六月婷婷狠狠| 深爱女色婷婷丁香五月亚洲图区| 日韩另类在线观看| 996黄色片| 天天操比比| 色丁香影院| 大香蕉五月天婷婷| 久久99综合网| 亚洲黄3级片网站欧美| 精品一二三区久久AAA片| 超碰高清在线| 亚洲五月停停| 亭亭玉月丁香| www.天天干| 激情五月天婷婷视频| 激情丁香社区| 狠狠色婷婷| 激情五月天色色色| 久久婷婷电影| 九九中文字幕九| 欧美私人家庭影院| 天天天日天天天干| 九九热区一区二区三区| 夜夜骑日日夜夜| 99久热| AV免费在线网站| www。久久久久一b。Cc| 影音先锋 萱萱| www.成人婷婷综合| 日本a片网址| 日韩色色一区| 五月丁香六月激情综合| 91免费看片| 色婷婷91激情小说| 综久久久| 激情图片婷婷| 这里有精品99| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 色色色色色色色色色影院| 综合色色网| 狠狠高潮精品亚洲1| 婷婷五月天激情综合深爱激情| 97色色色色色色色色色色色色色| 天天成人丁香美女AV| 婷婷97狠狠干| 五月激情久久综合网| 五月婷在线色视频| 色婷狠狠| 色99在线视频| 超碰renrenai| 夜夜夜叫天天天做| 天天爱天天做天天操| 色色色综合色| 九九这里只有精品| 午夜微拍福利| 激情婷婷久久| 色宗合,宗合网| 99re思思在线视频| 天天干天天操| 色欲天天综合| 色噜噜丁香| 天天操天天插天天射| 色婷婷在线视频观看| 亚洲色99综合天堂| 色999亚洲人成色| 五月天激情综合在线| 五月天色色网站| 五月天色色网站| 97碰啪啪| 五月草影视| 色色99| 久久婷.com| www.夜夜操.com| 777影视理论片大全在线观看| 夫妇交换刺激做爰| 黄色片精品| 永久思思热在线| 激情五月五月五月婷婷| 久久婷五月婷| 激情精品久久| 成人片久久网站| www.人人操人人看人人想人人摸 人人人人操,COM| 日日夜夜青青草| 久久性爱视频久久性爱视频| 可以直接看的AV| 最近中文字幕大全免费版在线 | 国产一区18| 国产亚洲在线观看| 婷婷另类小说| 狠狠婷婷日韩| 另类小说五月天综合| 91色情播放| 亚洲色图五月丁香| 亚洲热久| 亚洲人妻五月丁香婷婷| 欧美人与性动交CCOO| 超碰A V在线| www.超碰在线| 伊人网碰碰| BBWCUCKOLD精品熟妇 | 欧美性爱一区| 六月丁AV| 日本黄色三级片内射| 伊人久热91| 九九热10| www.夜夜操| 色婷婷第四色| WWW.99热| 99re6在线视频精品免费| 波多野结衣AV无码Porn| 日韩精品无码AV| 久久99久久99精品免观看粉嫩| 99re思思热这里| 超碰大香蕉网| 五月婷婷激情| 91ncm视频| 伊人丁香在线| www.色擼擼.com| 五月天婷婷色综合| 丁香五月亚洲AV| 婷婷国产成人| 色五月色情| 久久婷婷五月综合激情国产| 五月丁香成人网| 超碰av天堂| 婷婷五月丁综合| 97香蕉碰碰人妻国产欧美| 超级黄色片| 五月丁香婷婷综合视频| 99热99思午夜精品| 婷婷五月天久久久| 久久WW| 色五月婷婷五月天激情综合| aaa9区免费在线观看| 久99久热只有精品国产99| 九月激情综合| 四色综合网| 日日综合网| 9福利性视频欧美| 精品无吗va视频免费观看| 青青草婷婷五月天| 婷婷五月天激情网站| 人人艹艹艹| 婷婷丁香第一页| 欧美久热| 97好吊操| 大香蕉欧美在线| 婷婷婷婷色| 99操不停| 超碰成人电影| 中文字幕丰满乱孑伦无码专区| 超碰久热| 丁香5月啪啪| 日韩AV中文在线观看| 婷婷五月天com| 伊人久久丁香狠狠婷婷综合香蕉 | 极品人妻VIDEOSSS人妻| 天天爽夜夜爽夜夜爽精品视频 | 九月婷婷激情| 亚洲九九免费| 五月色激情综合网| 久操操| 欧美日本综合网| 免费看欧美成人A片无码| 深爱丁香网| 99精品国产乱码久久久人妻| 另类小说色婷婷| 五月丁香久人妻中文| 天天操天天操天天操天天操天天操| 欧美在线视频99| 日本欧美成人片AAAA| 五月婷婷中文网| 婷色综合| 91久久久久久| 日韩免费99| 天天操天天操天天操天天操天天操| 久久九九精彩| 欧美激情综合五月色丁香| 婷婷五月天另类网站| 99在线爽| 蜜桃五月天| 久久婷婷五月综合伊人| 视频这里只有精品| 91无码高清| 天天插天天射| 天天爽天天| 丁香五月图片| 999激情视频| 96精品成人无码A片观看金桔 | 99国产精品久久久久久久久久久 | 丁香五月 六月婷婷首页| 精品婷婷丁香五| 综合久久影院| 色播五月| 婷婷五月婷婷五月| 婷婷丁香69精华| 五月天福利影院导航| 五月天国产| 另类五月婷婷| 狠狠色狠狠| 五月婷婷丁香91| 色五月色图| 五月丁香少妇网| 五月婷婷综合社区| 欧美激情-区二区三区| 4399成人黄A片| 禁欲电影完整版在线播放| 五月天婷婷7米| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 激情五月婷婷六月丁香| 亚洲激情高潮| 99热 这里只有精品 国产 日韩| 九97免费视频| 欧美天堂婷婷日韩| 99ER热精品视频| 丁香婷婷五月综合色情| 中文字幕丰满人妻无码专区| 丁香五月激情啪啪| 五月丁香婷婷三级| 射久久丁香五月| 草操AV在线| 色噜噜五月天| 日本97在线| 在线中文字幕免费视频| 中字幕视频在线永久在线观看免费| 91精品在线看| 99热这里都是精品| 91狠狠综合网| 国产操碰| 亚洲1区| 婷婷 丁香 精品| 婷婷五月天激情五月天深爱五月天| 色九区| 婷婷六月天激情| 六月丁香激情婷婷| 五月天婷婷视频30| 久久婷婷五月综合色和| 99热综合网| 婷婷五月视频| 综合网亚洲| 丁香成人色情五月天| 免费久久这里只有精品99| 久久99激情| 无码se| 日韩欧美一级大黄网站| 久99| 婷婷五月天六月综合| 夜夜操夜夜爽| 天天爽综合| 婷婷五月激情欧美大胆视频| 久久婷婷六月综合| 九九精品热播| 九九99在线免费在线观看视频| 久久九九@| 91大屁股精品| 99热在线看| 99热色精品| 国产激情久久| 久综合九综合99| 婷婷五月丁香综合亚洲| 好色婷婷| 国产夫妻操逼内射视频| 激情五月四色| 任你爽视频| 五月丁香六月婷婷网| 日韩无码专区| 久久日婷婷| 韩日AV片| 激情五月婷黄版| 99人这里只有精品| 激情五月天影院| 色综合久久综合中文综合网| 精品夜夜澡人妻无码AV| 九月婷婷综合在线| 激情五月天婷婷直播| 婷婷五月丁香五月丁香| 激情小说视频图片网| 色色网站在线| 日韩成人精品中文字幕| 99热在线网站| 激情婷婷五六月天| 人人草人人舔| 国产又粗又大又爽又黄| 97超级操操| 99久热| 天天噜天天爱| 超碰网站在线观看| 一本色综合色| 激情婷婷五月天。| 99热在线只有精品| 99爱在线视频| 日韩欧美一道四区中文字幕| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 成人丁香五月天| 伊人无码高清| 五月丁香操婷逼| 色狠狠六月| AV操操操| 在线视频婷婷| 婷婷色五月婷婷姐妹| WWW.夜夜| 婷婷综合五月天| 色婷婷综合在线| 婷婷五月天在线看| 大香蕉久久婷婷精品综合| 乱岳熟女50岁| 9 1超碰九色| 战争与艾拉电影免费观看| 婷婷五月亚洲综合| 91九色中文| 婷婷五月丁香五月天| 五月丁香好婷婷A片网| 精品人妻午夜一区二区三区四区| 免费黄色片子| 五月狠狠| 888久久久| 九九视频这里是精品五月| 99热.com| 婷婷五月天综合久久日| 五月婷婷六月激情网| 五月丁香琪琪| 国产免费av在线| 婷婷色情小说| 99热每日| 亚洲成人va| 99久久国产宗和精品1上映| 婷婷综合另类| 天天做天天爱天天要| 色婷婷五月综合| 久久草中文日韩欧美| 99热久久这里只有精品2010| 欧美A A A A A| 丁香五月天色| 成人片在线播放| 久久人人超| 91日日日| 99资源在线视频| 天天操夜夜橾| se色综合网| 亚洲一区二区无码蜜乳av| 五月婷丁香| 狠狠干综合| 六月婷婷av| 久九九热| 色欲丁香| 激情五月天婷婷久久久久久久久久久 | 天天玩夜夜操| 精热在线综合网| 91欧美日韩综合| 五月婷婷婷综合网| 色五月激情综合网| 婷婷日在线观看| 天天干天天干天天干天天干天| 免费播放片大片| 色婷婷色99国产综合精品| 三级99热| 99在线精品观看99| 欧洲亚洲最新精品| 九九精品9| 狠狠五月天激情| 97在线日韩| 91精品国产综合久久密臀| 久久人人添人人爽添人人片αV | 久久99久久99久久99人受| 天天搡日日搡aaaaⅩ| 日韩在线视频网站| 这里都是精品99| 超碰在线国产| 开心五月色婷婷综合开心网| 青青草原伊人网| 婷婷五月大香蕉| 91精品无码| 99热这里只有精品99| 久久色五月| 综合AV网| 爽极品色| 激情图片婷婷| 婷婷伊人五月丁香天堂网| 99热20| 思思热AV| 丁香五月天堂网| 国产精品18久久久| 天天影视天天爽天天草| 国产99美少妇| 九月大香蕉| 99re免费精品视频| 亚洲五月情| 五月丁香综合中文| 亚洲精品V天堂中文字幕| 婷婷十月丁香| 噜一噜免费视频| 丁香伍月婷电影全集| 欧美丁香五月夫妻天| 五月天色色网站| 五月天丁香久久综合| 婷婷成人五月天成人文学| 六月99天天婷婷激情综合| 成人精品在线观看| 婷婷久久免费| 五月婷婷无码专区| 色婷婷视频| 色综合网页| 色色婷婷五月| 思思热在线| 99色这里| 精品成人在线观看| 日日噜噜久久婷婷五月天| 亚洲激情五月天| 九九热99热| 天天网站天天爽| 婷婷色在线播放| 裸体做A爰片毛片A片免费| 五月六月丁香激情| 天天爽人人爽| caopeng超碰| av成人在线播放| 无码AV久久久久久久久| 欧美99| 欧州色色| 五月天色婷婷基地| 久久6这里只有精品| 性爱人人网| 青柠影视免费高清电视剧| 91色色色18| 这里只精品热在线18| 夜夜爽天天| 久久五月婷婷丁香| 五月天久久激情| 成人无码精品1区2区3区免费看 | 无码中文一区二区三区| 99久久久| www.99视频| 91操在线观看| 精品导航在线x不卡| 欧美性猛交99久久久久99按摩| 亚洲性爱电影| 91色逼| 婷婷丁香五月色| 一区二区三区四区无码| 五月婷在线色视频| 六月丁香五月激情网| 影音先锋按摩| 一起草无码视频| 超碰九九热| 91精品人妻少妇无码影院| 热久久婷婷| 婷婷五月天VI| 久久男人网婷婷| 九九九激情综合| 99久re热视频精品98| 欧美99热| 天天色播| 国产毛片精品一区二区色欲黄A片| 超碰久热| 五月婷婷六月天| 五月婷在线观看| 久青草影院| 色色色综合网| 黄网在线免费观| 无码少妇高潮喷水A片免费| 依人大香蕉| 91久热| AA片在线观看视频在线播放| 久综合4| 天天色凹凸| 婷婷久久婷婷色五月| 99久久婷婷综合| 色色婷婷婷丁香五月天| 五月丁香六月综合基地| 婷婷五月天在线看| 五月丁激情| 婷婷综合五月色播| 久久婷婷视频| 激情综合五月| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 久久大大香| 色婷婷小视频| 神马欧美精| 色999;丁香五月| 秋霞黄色一级久久| 天天操天天日天天操| 色色a| 91九色国产| 色婷婷色99国产综合精品| 国产日韩欧美| 欧美WW在线网| 久久AAAA片一区二区| 激情五月婷婷综合网| 99er精品视频| 激情五月天在线视频| 777精品久无码人妻蜜桃| 人人肏逼视频在线一区二区| 五月婷婷偷拍| 五月婷婷影视| 色六月婷婷| 五月天激情国产综合婷婷婷| 激情骚五月| 色婷婷成人| 五月婷婷乱| 婷婷五月综合啪| 亚洲精品V天堂中文字幕| 亚洲AV日韩AV永久无码网站| 婷婷五月激情四月综合| 日婷婷久久开心| 色婷婷电影网| 超碰在线综合| 就爱射中文字幕资源网| 久久婷婷伊人| 人人草碰| 91视屏在线观看com.wwwvv| 伊人婷婷五月天| 天天插综合网| 无码yw| oVV4WIB3vFi8D| 免费AV在线| 超碰9799| 久久色在线视频| 色婷婷www| 人妻体体内射精一区二区 | 亚洲最大视频| 99久久人妻精品无码二区| 99热免费精品| 亚洲精品大片| 日韩丁香涩| 色婷婷成人| 婷婷五月天久久| 乱岳熟女50岁| 五月天亚洲图片婷婷| 久久机热/这里只有精品| 99精品在线播放| 久热91精品| 婷婷激情五月天小说校园| 99热最新| 全亚洲最大的婷婷五月天网站COM| 天天操人人干| 色色色色色九九九九九| 中文aV网| 国产真实乱对白精彩| 五月激情视频| 久综合色| 大香蕉久久草| 操97免费超级视频| 久久婷婷五月天激情| 婷婷丁香五月亚洲免费| 亚洲xx在线| 五月丁香WWW| 六月婷婷色综合| 9热视频在线观看| 色色色色色色网| 91大操| 久久这里有精品99| 99久操视频| 丁香五月婷婷激情123| 激情丁香五月婷婷| 99久久黄色顶级视频| 丁香五月天堂| 这里只有精品,日韩视频| 天天天天天日| 久婷婷五月激情| www.激情| 丁香五月瑟瑟| 亚洲操女| 开心五月深爱五月| 九九色之九九色88| 人妻人人操| 538任你爽| 九九碰九九爱97超碰| 色五月成人| 五月婷婷成人| a v色婷婷| 性欧美大战久久久久久久83| 互月天综合| 色色草97| 丁香花五月天激情| 日韩无码一区二区三区四区| 成人在线观看国产| 五月天桃色深爱网| 欧美精品999| 丁香五月天激情综合| 三区激情四射av| 国产精品激情AV久久久青桔| 天天摸色吧天天摸色吧| 日本一毛片| 久久久久人妻| 丁香六月天之亚州热女| 丁香婷婷91在线观看视频| 婷婷伊人网| 99国产小视频免费观看| 免费一区二区三区| 国产成人AV在线| 亚洲激情无码久久| 五月婷婷丁香网| 深夜男女福利刺激影院一区| 99热视| 在线亚洲综合| 五月婷丁香| 操日本人妻视频| av成人在线播放| 亚洲综合另类| 丁香色婷婷五月天| 日日日日做夜夜夜夜无码| 97色精品视频 | 九九九成人在线视频| 色色色五月| 97自拍视频在线| 日日操人人操| 婷婷久久网| 7777国产盗摄农村女人| 丁香六月色婷婷| 操逼在线视频| 国产日比| av第一二区| 99热久久这里只有精品| 婷婷五月天奸女| 婷婷丁香人妻久久在线观看| 婷婷五月天最新综合你懂的| 综合久久首页| 国产精品久久欧美久久一区| 丁香五月婷婷亚洲色图| 狠狠狠五月婷婷六月丁香| 婷婷精品在线| 欧美婷婷综合网| 国产乱人偷精品人妻A片| 五月丁香六月天| 五月婷婷婷婷婷婷艺术| 丁香九月综合| 五月久久婷婷| 国产精品色婷婷久久久精品| 拍色综合| 成人丁香婷婷| 99精品偷自拍| 五月色丁香| 成人网在线视频| 五月婷婷二月丁香| 欧美Va在线| 亚洲精品欧洲精品| 无码九九| 操99| 大香蕉五月天婷婷丁香91| 亚洲岛国电影| 色色色色色色色色色影院| 丁香五月五月婷婷| 无码任你操| 伊人激情啪啪| WWW.99视频| 停婷丁五月在线| 噜噜噜久久亚洲精品国产品91| 激情99热| 91精品熟女| 国产中文亚洲欧美日韩性交| 五月丁香婷婷综合| 丁香婷婷五月激情| 五月婷婷三级| 欧美婷婷| 色色色777| 激情五月深爱五月观看| 色婷婷电影网| 亚洲日韩国产黑丝黑丝AVAV一区二区三区 | 婷婷丁香五月天哟啪| 99视频九九热| 91一起艹| 99激情网| 一本道综合网| 岛国av电影网站| 婷婷五月婷婷五月天| 五月激情婷婷播播网| 激情五月婷婷伊人| 呦呦AV| 66精品成人免费网站在线观看| 天天爽天天透天天爱| 思思热在线精品视频网站| 99视频在线观看视频| 五月婷婷影视| 婷婷色五月天在线观看| 99成人| 久久久91| 嫩BBB槡BBBB搡BBBB| 免费视频在线观看的网站| 久久五月天激情| 亚洲免费成人电影AV| 亚洲精品另类| 久久久久8888| 婷婷五月天改成什么了| 呦呦视频无码播放| 亚洲综合99| 色欲婷婷五月天| 开心五月婷婷激情| 九月丁香八月婷婷加勒比| 色婷婷AV久久| AAA久久久| 亚洲精品乱码久久久久久综合| 婷婷五月婷婷五月天| 五月婷视屏在线观看| 操操国产| 成人片黄网站色大片免费毛片| 亚洲AV日韩在线观看| 九月久久婷婷| 久久激情综合| 久久久久人妻网址| 超碰在线国产| 一级七香蕉| 激情婷婷五月天。| 激情5月婷婷| 一区二区乱视频码| 大香蕉九九| 五月丁香婷婷久久| 性热视频99精品| 久热无码| 十区AV| 婷婷五月欧美综合| 欧美99视频| 国产精产国品一二三在观看| 婷婷欧美激情| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 婷婷激情五月天小说| 亚洲综合字幕色色| 激情五月天伊人影院| 丁香五月手机在线| 亚洲 欧洲 国产 伦综合| 五月综合激情久久| 欧美色色色色色色| 久久六月婷婷| 激情五月深爱五月| 五月丁香六月婷婷激情网| 六月色婷婷| 色你久久| 丁香六月情| 久久er99热精品一区二区| 久9热视频| 五月天激情婷婷小说| 99精品热| 婷婷情色五月天| 五月丁香无码视频| 日本强伦片中文字幕免费看| 亚洲色情久久| av在线中文| 激情五月婷婷色色| 婷婷日日天天| 专区无日本视频高清8| 亚洲不卡| 天天综合色丁香| 男同色五月开心五月激情五月| 这里有精品99| 无码激情| 日本久久婷婷| 六月婷婷五月丁香| 五月开心啪啪| 狠狠色噜噜| 五月开心播播网| 99久热这里有精品| 国产无套精品一区二区| 婷婷五月丁香啪啪| www.99精品视频| 秋霞三及片| 六月婷婷毛片| 亚洲 小说 欧美 激情 另类| 啊v视频在线观看| 另类图片色五月| 大香蕉五月婷婷| 超碰在线中文字幕| 热99在线精品| 91久久五月天| 久热黄色| 玖玖综合网| 91碰碰视频| 激情99| 久热 91| 色婷婷av在线| 激情五月婷婷综合| 亚洲高清在线| 五月天综合| 99热欧美在线观看| 欧美色五月| 欧美大奶熟女噜噜噜噜| 色色婷婷丁香| 天天成人综合| 亚洲成人AV高清字幕| 五月丁香伊人网| 伊人网色婷婷五月天| 先锋av性爱成人电影| 婷婷五月激情基地| 婷婷开心激情五月激情网| 婷婷丁香婷婷97| 五月天色综合| 久久久99久久| 亚州美女| 婷婷久久综合久色| 日本人人干| 久久这里都是精品| 婷婷丁香五另类网站| 91碰碰视频在线观看| 六月激情久久| 久久久久久综合88| 蜜桃人妻无码AV天堂三区 | 极品人妻VideOssS人妻| 久久免费操| 91久久久久久久| 国产片色| www.色婷婷.com| 六月丁香激情网| 五月婷婷影视| 操比激情五月综合| 大香蕉520| 青青草原精品久久| 人人综合久| 久久久GOGO无码啪啪艺术| 五月丁香花开综合网| 草榴视频网| 91久久久久久| 黄色激情五月天| 色欲婷婷五月天| 九九成人电影婷婷| www.henhenl| 婷婷五月天视频小说| 青青日韩| 99精品偷自拍| 成人在线视频一区| 欧美天天干五月丁香| 五月丁香趴趴| 99色视频| 激情 婷婷| 激情五月天之六月婷婷| av无码电影| 少妇大叫太大太粗太爽了A片| 亚洲精品永久久久久久| 天天激情视频| 丁香五月最新地址| 久久5 9视频免费观看| 伊人久久大香网| 激情网综合| 99综合视频一体| 久久久久久9热不雅视频| 色日本五月天| 五月天激情小说| 婷婷丁香基地在线| 九九热超碰| 日本三级色| 亚洲日韩一页精品发布| 九九99免费视频| 日本va欧美va欧美va| 98毛片| 色噜噜狠狠色综合成人网| 久久综合26p| 激情第四色| 五月丁香久| 直接看的AV| 色插综合网| 秋霞电影一级黄| 综合激情五月婷婷| 五月天堂六月丁香亚州中文字幕久久| 久久婷婷伊人| 操久久网| 婷婷的色色五月天| 婷婷综合五月天亚洲综合| 天天在线久久综合| 日日骑夜夜撸| 97久久人人操| 丁香色综合| 色五月婷婷激情基地| 亚州欧美黄色电影| caop视频| 韩国情人在线电视剧免费观看高清版全集 | 小色小蛇伊人婷婷色香五月| 成人AV播放| 成人超碰网| 中文字幕丰满孑伦无码专区| 可以免费观看的AV| 99热6这里只有精品| 婷婷丁香花五月天| 九色无码| 日亚二欧美| 欧美成人日韩| 婷婷色五月开心五月| 九九热视频这里只有精品| 婷婷开心久久| 久久视频在线| 婷婷五月丁香基地| 综合一本道| 婷婷五月天欧美| 婷婷五月天伊人网| 欧美25p| 99久在线精品99re8| 五月天婷婷影院影院观看| 26uuu精品国产| 激情五月天综合| 国产精品VA在线| 天天干天天做| 九九自拍网| 综合久| 婷婷成人视频| 日本乱子人伦在线视频| 内射在线CHINESE| 婷婷香蕉精品| 色五月婷婷91在线| 久草狼人| 欧美久热| 六月香五月婷| 色综合综合网| 久久婷婷视频| 九月婷婷久久| 色五月婷婷五月天| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 99高级会所久久| 这里只有精品热| 婷婷五月天亚洲激情戏精品| 色婷婷久久综合丁香五月| 26uuu在线观看| 97视频久久| 99久re热视频精品98| 深夜婷婷 丁香| 人人看人人97| 天天开心天天色| 五月色婷婷AV| 五月丁香综合激情| 天天久| 五月天色丁香| 成人五月天在线视频在线观看| 丁香六月 人妻| 九九热精品6| 97碰| 欧美 日韩 人妻 高清 中文| 亚洲日比视频| 99精品久久久| 狠狠色狠狠鲁| 这里只有精品视频| 99精品在线观看| 色色综合五月| 丁香五月天堂| 丁香五月综合亚洲| 99这里有精品视频| 97超碰免费超级在线观看| 91九色在线观看免费| 丁香综合网| 久久久五月激| PORNY九色9l自拍视频成人| 99精品网| 五月天婷综合| 五月婷婷激情色情网| 婷婷免费视频| 国外亚洲成AV人片在线观看| 色噜久| 久久与婷婷| 亚洲性视频| 天天肏在线| 99激情在线| 综合五月激情网| 99re思思久久| 青青999| 五月丁香婷色| 亲子乱AV一区二区三区下载| 五月天丁香婷婷久久九| 97碰碰视频在线观看| 久久人妻视步| 26uuu欧美| 久久婷婷五月综合色奶水99啪| 第四色婷婷五月| 色日本五月天| 亚洲成人网站在线| 丁香五月六月激情| 天天做天天爱天天高潮| 久久婷网| 亚洲AV色婷婷人禽五月天| 天天插天天干| 91九色网| 婷婷射综合| 婷婷五月综合网激情| 就爱操www com| 97久久久久| 成人在线视频男人的天堂4399| 日韩欧美四五区| 大香网伊人久久综合| 五月亭亭欧美女人| 深爱激情网综合| 青草视频在线观看视频| 亚洲婷婷视频| AV在线资源| 一本色道久久综合狠狠躁小说| site:ornaments52.com| 99精品视频在线观看| 啪啪91| www.精品99| 婷婷久久伊人| 亚洲操B| 色站9/| 深爱激情婷| 在线综合亚洲欧美65| 婷婷5月天激情综合| 久久性爱视频| 99热思思久| 26uuu精品一区二区| 久99久在线| 黄网免费看| 亚洲愉拍99热成人精品| 97色女人在线| 99a级片| 9久热在线视频精品| 小骚穴电影| 久久电影4399| 人人摸人人操人人爽| 久久久久亚洲AV成人无码电影| 9热在线观看| 久艹大香蕉| 色射影院| 99精品视频网| 精品九九在线观看| 欧美日韩中文国产一区发布| 米奇激情婷婷| 亚洲成人在线在线| www.热99热| 天天射天天操天天干| 青青草原精品久久| 综合婷| 色天堂在线| 五月丁香色色网| 欧美色色色| 婷婷五月天亚洲激情戏精品| 日本美女97在线视频| 欧美va在线| 亚洲婷婷基地| 狠狠插狠狠操| 青娱乐美女福利视频美臀| 亚洲丁香花五月丁香花| 亚洲另类视频| 久99视频在线观看| 色五月婷婷在线| 激情综合网,婷婷五月天| 热99.com婷婷| 丁香五月最新地址| 99热这里只有精品26| 国产乱人偷精品人妻A片| 99青青草| 久久精品91视频| 色婷婷丁香五月| 久久66精品| 狠狠色丁香久久婷婷综合五月| 激情另类综合| 伊人狠狠狠综合| 久久精品噜噜噜成人A∨色欲| 欧美三日本三级少妇三99| 五月丁香在线视频观看| 以及AA大片看看| 97碰碰在线看视频免费| 六月欧美综合色情| 3DAV亚洲香蕉久久 一区二区| 七七色色综合| 丁香五月天天日| 综合色视频| 婷婷五月天久久| 9久热这里只有精品| 久久Xx| 久久精品国产一区二区三区四区| 婷婷五月情天| 99色综合网| 久久天堂女人| 六月丁香网| 国产午夜一区二区三区| 午夜丁香丁香婷婷| 日本97在线观看| 五月天狠狠| 99久久激情视频| 色波激情五月天| 亚洲AV另类| 国产精品VIDEOSSEX久久发布| 中文AV网站| 色五月婷婷丁香国产在线| 亚洲精品网址| 国产AV一区二区三区日韩| 色婷婷五月天在线观看| WWW.桔色成人.COM入口| 大香蕉婷婷久久| 教师性爱毛片| 激情色色色| 亚洲六月婷婷| www.五月婷婷久久.com| 五月丁香六月婷综合成人综合| 色综合99无码| 久久色情| 激情五月综合网最新| 丁香五月婷婷色| 五月香蕉综合| 欧洲亚洲免费视频9 | 第四色色六月色综合| 99热只有| 久久婷婷国产| 美女天天爽| 五月丁香欧美| 妻久久久久| 97碰| 99九九中文字幕视频| 久99久视频精品| 人人操AV| 色九区| 97婷婷丁香| 天天干天天日天天操| 青草热视频这里只有精品| 亚洲综合视频天天精品| 999热在线视频| 日本久久99久久| 色yeye欧美| 婷婷五月天桃花网| 开心激情站| 色播五月天激情| 九月丁香| 丁香五月最新地址| 五月天婷婷小说| 色狠狠综合入口| 伊人色综在线| 久色网五月| Jh7Uf088VHafNm| 久久这里只有精品无码| 黄色99网| 丁香五月天在线直播观看| 操人妻90p| 插插插丁香五月婷婷| 黄色大片又大粗又爽| 色色色色色热| 久久大香蕉| 香蕉综合网| 97色色色色| 欧日美女Va| 99久热这里有精品| 99精品这里只有免费视频| 九九家庭影院| 99热成人精品| 婷婷综合成人五月天| 精品99爱免费视频在线观看| 五月天成人在线精品| 五月天开心婷婷久久 | 天天天天操| 激情综合网激情五月天| 深爱激情综合| 五月天婷婷操逼视频| 久久五月天婷婷| 九色在线五月婷婷网址| 无码免费人妻A片AAA毛片西瓜| 久久久久久久久久8888| 乱岳熟女50岁| 香蕉婷婷五月| 91主播在线| 天堂爱啪啪| 色综合激情| 婷婷久久午夜网| 色婷五月天亚洲| 色爱终和网| 99热这里只有精品免费| 婷婷丁香花五月天| 日韩aaa| 韩国真做片在线观看| 蜜桃五月天| 另类亚洲电影| 久久狠狠干| 婷激情五月天视频导航| 6080av| 夜夜爱网站| 97碰碰人人| 丰满少妇乱A片无码| 色九九中文字幕| 六月大香蕉| 亚洲 综合中文| www.lingjunshare.com| 五月婷在线观看| 五月婷婷六月丁香综合在线| http:色情日本com| 成人一区在线观看| 亚洲天堂热| www,婷婷五月天777me,com| 五月激情婷婷在线| 激情婷婷色色| 中文字幕在线aⅴ免费观看| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | va中文资源在线观看| 色婷婷狠狠干芒果TV| 久激情网| 久久婷婷七月丁香| 激情五月天啪啪| 激情综合色五月六月婷婷| 五月婷婷丁香俺日污视频| www.久久爱| 免费在线观看av网站| 激情黄色小说色五月| 亚洲99在线| 五月婷婷AV| www.ywav| 婷婷放心五日爱| 久久综合丁香激情五月| 无码99| 热热99爱爱| 丁香五月六月婷婷自拍| 日亚二欧美| 久久人妻少妇嫩草AV| 秋霞A V毛片| 五月天色视频| 色无码| 亚洲成人av在线播放| 人人舔人人色人人高潮| 九九精品热播| 精品热九九| 婷婷国产综合| 欧美色色色色色色| 五月天丁香色色| 九九精品在线视频观看| 五月丁香六月情| 色香蕉精品五夜婷| 午夜丁香丁香婷婷| 婷婷五月天在线观看| 操日本99| 欧洲激情五月天婷婷| 久99视频在线观看| 91N 一起草| 五月丁香婷婷激情在线| 99热精品中文字幕| 色哟哟性爱av| 日本激情五月天‘| 亚洲无码99| 狠狠色色| 六月丁香婷婷综合狠狠爱夜夜爱| 91呦呦呦| 中国AV性爱观看| 欧美成人va| 大香蕉啪啪| 丁香五月开心亚洲| 9色免费网| 婷婷五月天在婷| 风流少妇A片一区二区蜜桃 | 五月天色色网站| 狠狠色丁香久久婷婷综合五月| 蜜臀嫩草| 九九九九九999999| 狠狠肏综合网| 99热综合| 综合丁香婷婷五月天| 九九色逼| 日本久久人人| 大香蕉久久久| 天天se在线视频| 色五月欧美| 久艹伊| 中文av网| 激情久久网| 婷婷在线激情| 丁香五婷| 91无码高清| 91岛国片| 久久色9| WWW色色色COm| 99啪| 99操逼| 丁香五月色| 天天日天天狠狠操| 久久丁香五月| 久青青久| 五月婷婷深深爱| 丁香五月aV| 99国产精品白浆在线观看免费| 婷婷丁香人妻| 日本色啪| 性色五月天| 九九精品综合|