国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

前綴樹在前端路由系統(tǒng)中的應(yīng)用

共 11721字,需瀏覽 24分鐘

 ·

2022-11-15 01:17

術(shù)    


背景

本人自己曾經(jīng)造輪子搞過一個 Node.js 端的應(yīng)用層 Web 框架,里面涉及到一個路由系統(tǒng)的實現(xiàn),當(dāng)時是通過一個叫前綴樹的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)便捷的路由查找與匹配機制,這里跟大家分享一下。

前綴樹介紹

前綴樹,即字典樹,又稱 Trie 樹。這種數(shù)據(jù)結(jié)構(gòu)通常用來儲存字符串,并且是以路徑字符節(jié)點的形式來儲存。擁有公共前綴的字符串,會共享同樣的父節(jié)點路徑。前綴樹是通過利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的。

前綴樹的 3 個基本性質(zhì):

  • 根節(jié)點不包含字符,除根節(jié)點外每一個節(jié)點都只包含一個字符。
  • 從根節(jié)點到某一節(jié)點,路徑上經(jīng)過的字符連接起來,為該節(jié)點對應(yīng)的字符串。
  • 每個節(jié)點的所有子節(jié)點包含的字符都不相同。

路由匹配的場景

這個問題是在做 Web 框架的路由時碰見的,所以這里的請求路徑的形式可以當(dāng)做就是一個個 URL 刨去協(xié)議名、域名、端口號(有的話)之后的部分,一般是通過斜杠 ("/") 來鏈接一個個元素,形如:

  • /api/user/nameList
  • /api/user/addressList

而且在大部分時候,路由的路徑是根據(jù)模塊的層級來劃分功能,以達到顧名思義的目的,因此路由的路徑其實是會有很多公共的前綴。比如,上述例子中同屬于一個二級模塊 User 的接口:

/api/user/list/api/user/create ,它們便有共同的前綴 /api/user ,聯(lián)系到上述前綴樹的性質(zhì),我們便可以通過前綴樹來儲存和搜索這些路由信息。

應(yīng)用到路由匹配中

根據(jù)上面的一個結(jié)論,可以得到一個基本思路:

把路由路徑當(dāng)做是用斜杠連接起來的 Component 的組合,因此前綴樹當(dāng)中的節(jié)點,儲存的就不再是單個字符,而是一個個 Component,但這不會影響我們?nèi)ナ褂眠@種數(shù)據(jù)結(jié)構(gòu)來進行搜索。

按照上面的描述,將這兩串路徑用 / 分割,形成一組 Component,同時它們擁有兩層的公共路徑,那么將會形成這樣的樹結(jié)構(gòu):(葉子節(jié)點儲存的是對應(yīng)的 handler)

將路由聲明添加到 Trie 樹中

下面是將路由聲明的 Component 添加到 Trie 樹中的代碼:

router.get( '/api/user/nameList', xxx);

addToTree(urlPattern: string, handler: any) {
    let p = this.root;
    // Padding an element to the rear of the array to make the leaf node.
    const urlPatternComponents = [...urlPattern.split('/').filter(Boolean), LEAF_SIGN];

    urlPatternComponents.forEach(component => {
      const { quickMap } = p;

      // If quickMap has this component, it means the route has the same namespace
      // with existed route, so get to the next level directly. If the node is a leaf
      // node, just return cause it means redundant route is adding to the tree, we dont need it.
      if (p.quickMap.has(component as string)) {
        const node = p.quickMap.get(component as string)!;
        if (isLeafNode(node)) {
          return;
        }
        p = node;
        return;
      }

      if (component === LEAF_SIGN) {
        const newNode = new RouterTreeLeafNode(handler);
        quickMap.set(LEAF_SIGN, newNode);
        return;
      }

      const newNode = new NTreeNode(component as string);
      p.quickMap.set(component as string, newNode);
      // When the expression like ':id' shows in the route, it should
      // treat it as a parameter node.One tree node can only have one parameter node.
      if ((component as string).indexOf(':') > -1) {
        p.paramNode = newNode;
      }
      p = newNode;
    });
  }

router.get(' /api/hi/:name'

這里用一個 quickMap 來儲存子節(jié)點,keyComponent,value 為節(jié)點,用于在匹配過程中快速查找到與 Component 值相匹配的節(jié)點。注意在 urlComponents 數(shù)組末尾填充了一個叫 LEAF_SIGNSymbol,看上面的樹結(jié)構(gòu)圖就知道,實際路由聲明的 Component 遍歷完之后,葉子節(jié)點的值儲存的是最后一個 Component,因此我們需要給它添加一個子節(jié)點,用來儲存實際匹配的結(jié)果,也就是路由的 Handler。paramNode 放到動態(tài)路由匹配一節(jié)再解析,這里可以先不管。

靜態(tài)路由匹配

在匹配時,也實際的請求路徑同樣按照上面的分割方式切分成一組 Component,從 Trie 的根節(jié)點開始,它的子節(jié)點必定只有一個,將指針指向它的唯一子節(jié)點,并將遍歷 Component 的指針往后挪,根據(jù)遍歷到的新的 Component 去匹配下一層的子節(jié)點。直到 Component 被遍歷完,若最后可以找到相匹配的子節(jié)點,則該節(jié)點為葉子節(jié)點,將其值取出作為結(jié)果返回。若未能匹配,在靜態(tài)路由匹配的情況中就是 Route not found 的情況了,但是實際場景肯定沒有這么簡單粗暴,這里先留個坑,后面會講到。

代碼如下:

getHandlerFromTree(url: string): any{
    const [urlWithParams, _] = url.split('?');
    const urlComponents = urlWithParams.split('/').filter(Boolean);
    let p = this.root;
    let i = 0;
    let res;
    let path = '';
    while (p) {
      const component = urlComponents[i ++];

      // If the quickMap has the component, return it if it's also a leaf node.
      // Or just move to the next level and store the path.
      if (p.quickMap.has(component)) {
        const node = p.quickMap.get(component)!;
        if (isLeafNode(node)) {
          res = node.value;
          break;
        }
        path += '
/' + node.value;
        p = node;
        continue;
      }

      const leafNode = p.quickMap.get(LEAF_SIGN);

      if (leafNode == null) {
        // If quickMap has other node, it means static route cannot be matched.
        if (p.quickMap.size > 0) {
          const err = { message: '
Route not defined', statusCode: 404, statusMessage: 'Not found' };
          throw err;
        }
        
        // Else it means no handler was defined.
        const err = { message: '
Handler not defined', statusCode: 500, statusMessage: 'Not found' };
        throw err;
      }

      res = leafNode.value;
      break;
    }

    return {
      handler: res,
      path
    };
  }

動態(tài)路由匹配

我們在使用 Express 或是 Koa.js 時,會用到形如 /api/user/:id 這樣的動態(tài)路由聲明,這是一個實用的功能,來看下如何在基于 Trie 樹的路由系統(tǒng)中實現(xiàn)動態(tài)路由。

還是剛才的兩條路由聲明,現(xiàn)在我們加上一條新的:

/api/user/nameList

/api/user/addressList

/api/user/:id

得到這樣的結(jié)構(gòu):

對這樣的動態(tài)參數(shù)路由聲明,將其作為一個特殊節(jié)點,用一個單獨的指針 paramNode 保存,我們限制一種路由聲明只能有一個動態(tài)參數(shù),就是不能既有 /api/user/:id 又有 /api/user/:name,這樣的話在實際匹配時無法得知,路徑中對應(yīng)位置的 Component 代表的是什么含義。

接上面的坑,實際匹配時,當(dāng)碰見無法匹配的 Component 時,那么代表這個 Component 是一個動態(tài)參數(shù)的實際值,所以無法跟任何靜態(tài)聲明匹配,這時就直接去找該節(jié)點的 paramNode 指針指向的節(jié)點,也就是說當(dāng)碰到這種情況時,我們直接把它歸類為動態(tài)參數(shù)匹配的場景。

看一下加入動態(tài)參數(shù)匹配的代碼,省略共同部分:

getHandlerFromTree(url: string): any {
    // ...
    if (p.quickMap.has(component)) {
        const node = p.quickMap.get(component)!;
        if (isLeafNode(node)) {
          res = node.value;
          break;
        }
        path += '/' + node.value;
        p = node;
        continue;
    }
    if (component) {
        path += '/' + p.paramNode.value;
        p = p.paramNode;
        continue;
    }

    const leafNode = p.quickMap.get(LEAF_SIGN);
    // ...
}

那么這時又有一個坑,如果 paramNode 不存在,該怎么辦?下面來說下一種場景:正則表達式匹配。

正則表達式匹配

router.get( /hi/all/ , xxx)

因為正則表達式是可以直接進行字符串匹配的,所以這種路由聲明將會脫離 Trie 樹的數(shù)據(jù)結(jié)構(gòu)特點而存在,我們選擇將這種節(jié)點全部儲存在根結(jié)點下方,避免不必要的查找。上面說到,如果一個節(jié)點的 paramNode 指針不存在,那么我們只好做最后一種選擇,將整個路徑進行正則表達式匹配,如果仍然無法匹配,就只好拋出路由未找到的異常,由依賴路由的代碼去處理這個異常。

getHandlerFromTree(url: string) {
    // ...
    if (component) {
        // If no parameter node found, try regular expression matching.
        if (!p. paramNode ) {
 const { handler, matched } = this . getHandlerFromRegExpNode (url);
res = handler
path = matched;
 break ;
}
        path += '/' + p.paramNode.value;
        p = p.paramNode;
        continue;
    }

    const leafNode = p.quickMap.get(LEAF_SIGN);
    // ...
}

添加正則表達式節(jié)點到樹中:

addRegExpToTree(urlPattern: RegExp, handler: Function) {
    const root = this.root;

    root.children.push(new RouterRegExpLeafNode(urlPattern, handler));
}

得到的結(jié)構(gòu)是這樣的:

這樣就實現(xiàn)了一個支持靜態(tài)、動態(tài)、正則表達式三種匹配方式的路由機制。

簡單分析

使用 Trie 樹來做路由匹配就是比較折中的方案,通常來說路由聲明都會按照模塊來做分類,在同一個一級模塊下面的多個二級模塊路由,然后每個二級模塊下面會有多個三級模塊路由,就會產(chǎn)生公共前綴,就給了 Trie 樹節(jié)省空間的機會,并且重復(fù)率越高節(jié)省的空間越多(聽起來怎么像 gzip 壓縮),Trie 樹的最壞查找效率取決于所儲存的序列的最長長度,也就是樹的最大深度,是一個線性級別的時間復(fù)雜度。這里會有另一個問題,如果所有路由聲明都是分散的,沒有公共前綴,假設(shè)有 m 條長度為 n 的記錄,在彼此沒有公共前綴時,Trie 樹的空間復(fù)雜度會達到 O(mn),故在使用時應(yīng)盡量收斂路由聲明的 namespace 數(shù)量。

總結(jié)

一開始內(nèi)心有個問題,為什么不直接用哈希表儲存靜態(tài)路由,然后動態(tài)路由就使用遍歷查找的方式?后面對這個問題有了一些自己的理解:

使用哈希表儲存靜態(tài)路由,查找速度是常數(shù)級別的,非??欤切枰€性空間來儲存,而且每一條靜態(tài)路由都需要完整儲存,那么就浪費了公共前綴這個特性。其次,對動態(tài)路由使用遍歷匹配的方式太過暴力,動態(tài)路由沒有辦法去很好地做緩存,而路由匹配是個高頻的動作,這種方式的性能開銷相對來說比較大,也是不夠合適的。

代碼倉庫

https://github.com/divasatanica/auf/blob/main/packages/core/src/router/prefix-tree/index.ts

有興趣的小伙伴可以去瞅瞅。

?? 謝謝支持

以上便是本次分享的全部內(nèi)容,希望對你有所幫助^_^

喜歡的話別忘了 分享、點贊、收藏 三連哦~。

歡迎關(guān)注公眾號 趣談前端 收貨大廠一手好文章~


從零搭建全??梢暬笃林谱髌脚_V6.Dooring

從零設(shè)計可視化大屏搭建引擎

Dooring可視化搭建平臺數(shù)據(jù)源設(shè)計剖析

可視化搭建的一些思考和實踐

基于Koa + React + TS從零開發(fā)全棧文檔編輯器(進階實戰(zhàn)




點個在看你最好看


瀏覽 78
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 91妻人人澡人人爽人人精品| 99热免费精品| 西西西444www无码视频| 淫荡少妇美红久久久久久久久久 | 亚洲AV无码精品成人| 婷婷五月天影视| 欧美日韩一级二级三级| 人人爽网站| 日欧美美女逼| 一区不卡| 欧美久草| 怡红院综合网| 黄色视频网站在线看| 国产成人精品久久二区二区91| 怕怕怕视频| 中文字幕在线看成人电影| 超碰免费97| 91精品国产综合久久久蜜臀九色 | 无码人妻一区二区| 99久久久久久久| 三级无码中文| 日本综合视频| 一级欧美黑人大战白妞| 美女超碰| 国产免费观看AV| 久9久9| 五月天青青草超碰免费公开在线观看 | 国产无遮挡A片又黄又爽小直播 | 猫咪AV成人永久网站| 人成视频在线免费观看| 成人v| 久草黄色| 操逼视频网站免费| 超碰免费99| 欧美一级特黄真人做受| 亚洲精品色婷婷| 中文字幕在线播放AV| 详情:绿帽夫妻多人运动开淫啪-91n| 亚洲AV免费在线观看| 久久草视频| 一级欧美日韩| 亚洲高清无码在线播放| www一级片| 黄色在线免费观看网站| 欧美日韩中文字幕在线视频 | 国产三级| 国产精品成人电影| 91无码人妻传媒tv| 成人黄色电影在线观看| 中文字幕乱视频| www.一区二区三区| 另类毛片| 日本三级中文字幕| 成人超碰| 国产福利91| 黄色理论片| 久久久成人网站| 大香蕉性爱网| 国产毛片久久久久久久| 久久大鸡| 国产熟女av| 日韩在线女优天天干| 成年人免费毛片| 日韩av综合| 久久久久久久久久久国产精品 | 欧美一区三区| 夜夜操夜夜| 亚洲视频五区| 嫩草入口| 欧洲一区在线观看| 操逼爽| 爆操网站| 狠狠色噜噜狠狠狠7777| 日韩人妻无码电影| 99re66| 探花极品无套大学生| 五月丁香六月激情综合| 精品成人在线视频| 又黄又湿的视频| 国产又粗又猛又爽又黄91精品| 粉嫩小泬粉嫩小泬在线| 台湾毛片| www.97超碰| 国产一级片网站| jzzijzzij亚洲成熟少妇在线播放 黑人猛躁白人BBBBBBBBB | 2025国产成人精品一区| 亚洲综合天堂| 99色综合| 国产精品无码专区| 精品在线免费视频| 中文字幕日韩有码| 四川少妇搡bbbbb搡多人| 国产毛片视频| 四虎精品一区二区三区| 免费亚洲婷婷| 国产黄色电影| 伊人AV在线| 不卡一二三区| 夏目あきら被续侵犯7天| 欧美肏屄网| 国产尤物在线| 国产精品做爱| 少妇一级婬片内射视频| 加勒比一区二区三区| 免费的一级片| 亚洲A片电影| 欧美国产一区二区| 激情内射网站| 影音先锋av资源网站| 青娱乐国产在线视频| 中文字幕11页| 西西人体大胆ww4444| 特级无码| 久久久久久亚洲| 91福利在线观看| 久久久久久久久久久久久自慰小片| 91双飞会所双飞在线| 特级毛片AAAAAA蜜桃| 国产精品一品二区三区的使用体验 | 日韩欧美亚洲一区二区三区| 亚洲AV成人网| 亚洲精品秘一区二区三小| 操东北女人逼| 成人av免费在线观看| 影音先锋AV啪啪资源| 午夜激情在线观看| 成人在线乱码视频| 日韩AV无码免费| 日韩成人无码特集| 欧美视频久久| 精品国产女人| 国产香蕉视频在线观看| 免费观看黄色电影| av免费播放| 玉米地一级婬片A片| 亚洲色情网站| 天堂亚洲精品| 精品国产AV色一区二区深夜久久| 精品在线播放视频| 久久蜜桃视频| 操东北女人逼| 三级网址在线观看| 中文人妻| 69视频在线观看免费| 中文字幕乱在线| 蜜桃传媒入口| 日日骚av一区二区三区| 你懂的在线观看视频| 午夜高清无码| 男人的天堂在线| 久久日av| 超碰永久| 精品无码一区二区三区蜜桃李宗瑞 | 中文字幕99页| 精品视频91| 91精品国产综合久久久蜜臀九色 | 伊人激情影院| 无码国产+白浆| 东京热91| 日韩黄色电影网址| 91乱子伦国产乱子伦!| 一区二区三区四区在线| 丁香激情视频| 国产又粗又大又长| 国产视频在线播放| 国产精品色8| 成人网站免费在线| 天堂在线社区| 中日韩精品A片中文字幕| 91一起草高清资源| 猫咪AV大香蕉| 老熟女-ThePorn| 亚洲电影在线观看| 11孩岁女精品A片BBB| 超碰8| 色婷婷五月天激情| 亚洲性爱一级片| 九九视频免费在线观看| 亚洲视频日韩在线观看| 啪啪啪网址| 另类老妇性BBwBBw图片| 国产Av高清| 国产在线观看国产精品产拍| 无码一区精品久久久成人| 国产AV美女| 在线视频A| 超碰免费观看| 成人天堂| 少妇被躁到高潮无码| 日韩无码中文字| 国产视频高清无码| 91久久久久国产一区二区| 51妺嘿嘿午夜福利| 欧美毛视频| 樱桃Av| 欧美三级一级| 亚洲AV电影网| 国产又爽又黄免费视频网站| 男女www| 99久久精品国产毛片| 一本免费视频| 99久久久无码国产精品性波多| 欧美日韩国产中文字幕| 天堂网在线视频| 黑人无码一二三四五区| 国产SM视频| 亚洲女人视频| 国产欧美日韩在线观看| 天堂素人约啪| 成人H动漫精品一区二区无码| 91国产乱伦| 国产在线导航| 女人的天堂AV在线观看| 成人H视频| 中文字字幕在线中文| 陈冠希和张柏芝mv| 国产十欧洲十美国+亚洲一二三区在线午夜 | 免费欧美A片| 91人妻人人澡| 精品国产乱子伦一区二区三区,小小扐 | 婷婷九月| 黄色一级大片| 午夜人妻无码| 91视频在线网站| 亚洲综合免费观看高清| 久久中文字幕电影| 久久久久亚洲AV无码专区| 丝瓜av| 国产性色| 在线免费亚洲视频| 国外成人性视频免费| 久色国产| 日本黄色视频电影| a√天堂资源中文8| 国产一级A片久久久免费看快餐 | 成人才看的在线视频| 欧亚免费视频| 亚洲精品一区二三区不卡| 大鸡巴日| 国产乱子伦精品久久| 免费操逼视频在线观看| 成人视频网| 久福利| 亚洲精品无码a片| 国产高清在线观看| 91人人妻人人做人人爽| 大鸡巴免费视频| 无码专区一区二区三区| 黄色视频网站亚洲| 欧美三级一级| 亚洲一卡二卡| 精品亚洲一区二区三区| 蜜臀av在线播放| 中文字幕av无码| 操逼视频国产91| 国产无遮挡又黄又爽又色视频 | 四虎精品成人无码A片| 天天色天天日| 美女av网站| 欧美性爱小说网| 人妻人玩| 九九九九九精品| 在线免费观看一区| 中文字幕高清在线中文字幕中文字幕| 色情小电影免费网站观看网址在线播| 东京热无码免费视频| 色多多毛片| 三级A片视频| 夜夜嗨av| 五月六月丁香激情视频| 91精品国产一区二区三区| 先锋成人资源| A一级黄片| 极品一线天小嫩嫩真紧| 北条麻妃在线无码| 丰满人妻-区二区三区| 18av在线观看| 久久永久免费精品人妻专区| 国产美女福利| 亚洲免费高清视频| 国产在线观看mv免费全集电视剧大全| 大香蕉1024| 国产第1页| 先锋AV资源在线| 日韩欧美二区| 国产精品乱码毛片在线人与| 麻豆视频一区二区三区| 欧美色图在线播放| 亚洲欧美日本在线| 在线天堂AV| 成人av小说网站| 免费无码在线视频| 自拍偷拍亚洲| 亚洲免费视频在线看| 波多野结衣91| 欧美性交一区二区| 69久久久久| 欧美在线黄色| 亚洲色激情| 91午夜视频| 一级做a爰片毛片A片| 国产成人无码Av片在线公司| 国产激情小视频| 91探花秘入囗| 国产精品久久久久久久久久九秃 | 骚逼影视| 99国产在线观看| 黄色片视频日韩| 国产艹逼视频| YOUjiZZ欧美大全| 无码人妻精品一区二区三区蜜桃91 | 国产成人免费视频在线| 成人在线网站| 无码视频在线免费播放| 香蕉视频色| 免费看国产黄色| 亚洲无码小电影| AV1区二区| 射死你天天日| av逼网| 午夜AV福利| 亚洲va在线va天堂va偷拍| 亚洲午夜无码久久久| 午夜激情视频| 欧美视频久久| 午夜香蕉视频| 日韩蜜桃视频| 欧美亚洲激情| 国产精品黄视频| 波多野结衣东京热| 五月丁香中文字幕| 国产成人A∨| 桃色五月天| 人妻无码一二三区免费| 国产亲子乱XXXXimim/ | 美女啪啪网站| 在线观看中文字幕AV| 欧美日韩高清丝袜| 日韩操操操| 亚洲人操逼| AV手机在线| 手机看片福利一区二区| 丰满人妻一区二区三区免费| 欧美国产日本| 加勒比无码人妻| 少妇喷水视频| 日本高清无码| 在线视频A| 久久综合99| 内射一区二区三区| 三级无码在线观看| 无码人妻一区二区三区| 婷婷五月天丁香在线| 成人性爱在线观看| 欧美国产第一页| 亚洲AV无码专区一级婬片毛片| 99激情网| 无码电影网站| www.久热| 大香蕉啪啪| 日本一级片| 欧美福利视频| 国产老女人操逼| 色色网欧美| 最近中文字幕在线中文字幕7| 最近中文字幕在线视频| 欧美在线视频播放| 日韩成人片无码| 亚洲图片在线观看| 婚闹不堪入目A片| 亚洲色天堂网| 无码在线播放视频| 91无码电影| 九九九av| 国产v片| 亚洲AV无码乱码国产精品| 成人午夜免费视频| 日韩在线一区二区三区四区| 亚洲一区| 91成人看片| 最新中文字幕在线播放| 成人做爰黄AA片免费看三区| 无码在线播放观看| 国产精品成人免费精品自在线观看| 久久久91人妻无码精品蜜桃ID| 久久人妻熟女中文字幕av蜜芽 | 激情小说五月天| 欧美V视频| 亚洲高清AV| 中国a一片一级一片| 精品二区| 亚洲一级二级三级片| 玩弄大乳乳妾高潮乳喷视频 | 日韩视频免费| a片视频免费| 中文字幕国产| 国产迷奸视频| 欧美A片在线免费观看| 99re在线观看视频| 亚洲成人a| 五月丁香六月激情| 国产女主播在线| 黑人中文字幕| 免费高清无码在线观看| 欧美aaa在线| 91人人澡| 五月天亚洲色图| 国产超碰免费| 欧美另类激情| 日韩无码AV一区二区三区| 北条麻妃一区二区三区-免费免费高清观看 | 精品黄色电影| 三级片在线看片AV| 97人妻精品一区二区三区视频| 蜜桃性视频| 尤物视频网址| 国产成人AV在线观看| 国产毛片欧美毛片高潮| 亚洲自拍电影| www.99在线| 人人妻人人澡人人爽久久av| 超碰天天操| 特黄一级A片| 免费一级电影| 操屄网站| 国产人妻精品一区二区三区不卡 | 国产免费一区二区三区网站免费 | 激情五月天丁香| 天天A片| 国产a区| 在线亚洲小视频| 16一17女人毛片| 欧美级毛片一进一出| 日韩性爱A片| 黄色A片网| www.黄色在线观看| 男女乱伦视频| 国产精品久久久久久久久久二区三区 | 日韩一级A片| 成人av中文字幕| 亚洲无码中文字幕视频| 91久久国产综合久久91| 东方AV在线免费观看| 国产精品一卡二卡三卡| 精品人妻中文字幕| 韩国中文无码| 亚洲jiZZjiZZ日本少妇| 美女被操网站| 激情综合婷婷久久| 久久久WWW成人免费无遮挡大片 | 黄色网页免费观看| 国产77777| 国产在线网址| www在线视频| 91成人片| 无码成人av| 内射网站在线看| 午夜福利2025| 成人国产在线观看| ww免费视频| 免费+无码+精品| 亚洲人成在线观看| 亚洲第一黄片| www.毛片| 柠檬福利第一导航| 97香蕉久久国产超碰青草专区| 天天狠狠操| 好吊视频一区二区三区红桃视频you | 亚洲成人久久久| 蜜桃Av噜噜| 成人片天天看片欧美一级| 日韩超碰在线| 天堂av在线免费观看| 亚洲影音先锋资源| 男人的天堂在线视频| 先锋影音成人| 一级无码免费| 免费成人AV| 91精品视频在线播放| 高清无码第一页| 91香蕉视频在线看| 欧美成人午夜无码A片秀色直播| 激情五月天丁香| 丰滿人妻-区二区三区| 人妻丝袜蕾丝高跟双飞| 国产福利网| 日韩A片免费看| 蜜芽成人精品久久久视频| 中文字幕午夜福利| 91精品久久香蕉国产线看观看| 99久久99久久精品免费看小说。| 爱搞搞就要爱搞搞| 亚洲免费清高| 亚洲精品456| 亚洲码无人客一区二区三区| 无码欧美人XXXXX日本无码| 亚洲午夜福利视频| 一级爱爱片| 河南熟妇搡BBBB搡BBBB | www.18av| 中文字幕五月天| 2015中文字幕黄色视频| 91看片| 国产精品久久久999| 人妻中文字幕av| av久| 激情五月天成人| 日韩精品免费观看| 天堂网婷婷| AA免费视频| 日韩精品在线播放| 久久93| 91精品国产乱码香蕉黄瓜草莓 | 亚洲av高清| 驲韩在线视频免费观看| 一区二区三区四区无码视频| 高清成人无码| 日韩在线成人中文字幕亚洲| 欧美精品无码一区二区| 麻豆乱婬一区二区三区| 中文字幕第2页| 青青草精品在线视频| 一级A毛片| 五月伊人婷婷| 手机av在线| 日韩免费在线播放| 国产精品国产三级国产专区53| A片黄色毛片| 亚洲无码视频在线观看高清| 97超碰大香蕉| 免费一级无码成人片| 久久偷拍网| 人人爽人人爽人人| 婷婷色情网| 一级片免费| 婷婷五月在线观看| 豆花视频免费观看| 国产一区二三区| 亚洲中文免费| 另类老妇性BBBWBBW| 国产精品成人无码免费| 最近2019中文字幕mv第三季歌词 | 黄色免费在线网站| 91精品国产91久久久久久吃药| 国产AV无码区亚洲| 亚洲视频一区二区| 爆操熟女| 欧美日韩成人一区二区三区| 亚洲第一色播| 超碰a片| 亚洲二区后入极品| 69视频网站| 男人AV在线| 91热久久| 人与禽一级A片一区二区三区| 免费观看成人毛片A片直播千姿| 色妞视频精品一区| 中文字幕福利| 日韩欧美操逼| 在线免费看黄色视频| 东方av在线播放| 精品国产香蕉| 九九热精品视频99| 国外成人视频| 欧美在线天堂| 日韩在线综合| 久草视| 东京热91| 日本一区二区在线视频| 国产欧美一区二区三区特黄手机版| 91性爱嫩逼视频| 亚洲欧美久久| 精品婷婷| 亚洲欧美国产日韩字幕| 综合大香蕉| 热久久在线观看| 国产乱子伦一区二区三| 国产精品久久久久久最猛| 女人自慰在线观看| 高清无码免费在线观看| 永久免费黄色| 一级大片| 日韩家庭乱伦| 亚洲乱伦图片| 可以免费看的黄色| 日本无码精品| 人妻丰满熟妇av无码| 在线亚洲免费观看| 一区二区三区操逼| 97人人艹| 亚洲黄色影院| 最近中文字幕免费MV第一季歌词怀孕 | 深爱开心激情| 亚洲AV综合色区无码国产播放 | 秋霞福利网| AV黄色片| 亚洲无码一卡二卡| 人妻夜夜爽天天爽| 日韩综合精品| 亚洲超级高清无码第一在线视频观看| 亚洲精品色色| 思思久久高颜值| 国产欧美在线观看| 亚洲无码视频播放| 天天看天天日| 五月深爱| 亚洲成人无码一区| 国产亚洲91| 先锋影音资源AV| 成人无码精品亚洲| 在线观看亚洲中文字幕| AV国产精品| 日韩激情视频在线观看| 精国产品一区二区三区A片| 人人爱人人妻人人操| 视频一区乳奴| 欧美日韩国产在线| 色老板网站| 国产天堂在线| 国产区av| 亚洲无码一二三区| 3344gc在线观看入口| 日本一本不卡| 欧美高清视频| 国产一级A| 日韩射| 一级A色情大片| 一级a免一级a做免费线看内祥 | 久久久久久久免费无码| 五月天综合久久| 日本親子亂子倫XXXX| 国产精品黄视频| 国产黄色一区| 久了中文字幕| 北条麻妃精品青青久久价格| 99re视频精品| 在线成人亚洲| 精品国产一区二区三区性色AV| 性A免费在线播放| gogogo高清在线观看免费直播中国| 久久人人操| 成人视频网站在线观看| 日韩人妻精品中文字幕免费| 天堂中文在线观看| www操逼| 国产成人视频在线观看| 黄片久久| 中文字幕人妻日韩在线| 久草免费在线视频| 在线视频一区二区三区| 人人妻人人澡人人爽人人DVD| 在线永久看片免费的视频| 欧美福利| 亚洲中文网| 国产在线视频你懂的| 91爽爽| 亚洲天堂无码在线观看| 人妻体内射精一区二区| 国产伊人大香蕉| 久热精品在线观看| 亚洲第一色网站| 老熟女乱伦| 天天噜| a国产| 丰滿老婦BBwBBwBBw| 亚洲性爱AV| 欧美另类色图| 一本道无码在线| 天天干天天日天天操| 成人在线网站| 2025四虎在线视频观看| 三级片青青草| 色a视频| 日韩大屌操| 蜜桃视频网站在线观看| 国产精品3| 国产婬片一级A片AAA毛片AⅤ | 亚洲AV成人无码精品| 日本精品黄色视频| 99国产热| 欧美国产日韩在线观看| 一级一级一级做a免费一级做a| 亚洲精品999| 天天干天天色天天日| 人人爽夜夜爽| 国产成人免费在线观看| 亚洲骚货| 国产日批| 免费黄色小视频| 三级电影久久麻豆| 日本一区二区网站| 成人在线视频一区| 91色人妻| 91大吊| 国产精品扒开腿做爽爽爽视频| 亚洲A片一区二区三区电影网| 美女极度色诱图片www视频| 综合婷婷久久| 国产一级操逼视频| www.一区二区三区| 黄色小视频免费看| 波多野结衣黄色视频| 丁香五月天激情| 色多多毛片| 影音av在线| 一级A片久久久免费直播间| 国产精品视频导航| 成人精品秘久久久按摩下载| 精品无码视频在线| 天天射天天操天天干| 久久成人三级片| A级毛片在线观看| 国产美女自拍视频| 亚洲日韩一区二区| 无码国产精品一区二区| 国外亚洲成AV人片在线观看| 日日视频| av无码av天天av天天爽| 91久久精品日日躁夜夜躁欧美 | 噜噜色色噜噜| www色色| h片在线观看| 人妻无码91| 在线日韩| 蜜桃人妻无码AV天堂二区| 51妺嘿嘿在线电影免费观看| 久久无码一区二区| 国产V在线观看| 黄色激情视频网站| 成人AV天堂| 亚洲中文字幕在线播放| 国产一精品| 国产无遮挡又黄又爽又| 少妇人妻一区二区三区| 欧美极品另类| 精品一区二区三区在线观看| 97视频在线观看免费| 色伊人| 免费在线a| 11孩岁女精品A片BBB| 精品无码一区二区三区四区五区| 久久免费看| 中文字幕精品视频在线观看| 深爱激情网五月天| 操逼网站在线观看| 精品小视频| 韩国高清无码60.70.80| 黄色的视频网站| 翔田千里无码免费播放| 熟女老阿V8888AV| 亚洲1区2区| 91做爱视频| 国产精品一区二区三区四区| 日韩一级无码毛片| 亚洲三级AV| 黄片无码视频| 色拍拍视频| 国产乱子伦一区二区三精品| 91白浆| 秋霞日韩| 日日夜夜综合| 国产乱子伦一区二区三区在线观看| 91在线免费视频观看| 欧美大香蕉网| 天天射综合| 熟妇高潮一区二区高潮| 欧美操逼电影| 黄色视频在线观看免费网站| 欧美性爱-熊猫成人网| 国产熟妇搡BBBB搡BBBB毛片 | 成人精品福利| 国产美女一级真毛片酒店| 国产一卡二卡在线观看| 国产suv精品一区二区6| 日本操骚逼| 欧美日韩视频免费观看| 精品无码蜜桃| 亚洲小说区图片区都市| 日韩综合精品中文字幕66| 亚洲无码人妻| 亚洲插逼视频| 国产美女福利| 男人天堂手机在线| 精品大香蕉| 三级片青青草| 国产乱色精品成人免费视频| 人妻斩り43歳| 大伊人久久| 一区二区三区日韩| 欧美,日韩,中文字幕| 日韩v片| 国产第一页在线播放| 国产黄在线观看| 91成人电影| 人人看人人摸人人插| 婷婷五月天影视| 91人妻人人人人爽| 日韩av在线免费观看| 成人国产AV网站| 色综合成人| 日韩在线视频91| 伊人色五月| 国产美女一级特黄大片| 天天爱天天插| 国产视频1区| 99在线观看免费视频| 高清无码1区| 国产内射久久| 五月婷婷六月丁香综合| 婷婷一区二区三区| 中文字幕人妻精品一区| 欧产日产国产swag| 深爱激情网五月天| 三级网站免费| 精品欧美片在线观看步骤| 久久青草免费视频| 五月天成人网址| 久久精品福利视频| 在线观看免费欧美操逼视频| 好好日视频| 欧美口爆视频| 天天天操| 亚洲日韩中文无码| 四川少BBB搡BBB爽爽爽| 色色爱爱| 五月丁香在线视频| 一级片电影网站| 草草浮力院| 亚洲午夜成人| 中文字幕高清在线中文字幕中文字幕| 俺去也在线播放| 在线毛片网站| 亚洲综合中文| 爱五月| 91AV免费在线观看| 午夜精品18视频国产17c| 成人色播播| 国产成人视频免费在线观看| 久久免费视频播放| 人人做人人爱人人做人人乐的意思| 亚洲色婷婷五月| 日日搔av一区二区三区| 在线观看你懂得| 激情小视频国产在线播放| 免费一区视频| 亚洲AV秘无码苍井空| 日本操逼网| 色情综合| 五月婷婷丁香在线| 91人人妻| 午夜免费无码视频| 国产黄色视频在线观看免费| 久久精品视频在线观看| 内射学生妹J亅| 一级欧美黑人大战白妞| 影音先锋成人av| 欧美色色影院| 亚洲免费人妻| 色天堂网站| 国产日本欧美韩国久久久久| 操老女人逼视频| 亚洲无码成人片| 东京热在线观看| 亚洲国产成人久久| 国产一级A片免费视频| 甘肃WBBBB搡wBBBB| 蜜桃久久久亚洲| 日本精品中文字幕| 久久天堂| 欧美高清一级| 毛片3| 99re视频播放| 亚洲中文中出| 自拍偷拍一区| 久久精品水多多www| 蜜臀久久99精品久久久| 嫩BBB搡BBB槡BBB小号| 欧美亚洲黄色| 青青青青青操| 激情网站在线观看| 老太色HD色老太HD.| www.热久久| 久热中文字幕| 人人射人人射| 一级特黄大片色| 久色无码| 操逼爽| 丰满欧美熟妇免费视频| 黄色视频免费在线看| 91国产在线播放| 中文字幕AV在线播放| 欧美性xxxxx| 波多野结衣东京热| 成人毛片在线播放免费| 91瑟瑟| 91丨九色丨东北熟女| 影音先锋女人资源| 九色PORN视频成人蝌蚪自拍| 欧美午夜福利| 亚洲日韩字幕|