精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

微內核架構在大型前端系統中的應用

開發 架構 前端
架構和框架是獨立的,本文僅僅是提出一種架構思路,而且這個架構也在百度的某款用戶量很大的復雜前端產品中得以應用。基于這一套彈性架構并結合Vue/React的現代化開發理念,可以很好的完成高復雜度的前端系統。希望本文可以給你們提供了除微前端之外的構建高彈性前端系統的另外一種思路。

[[248348]]

只討論架構,不討論框架

1、名詞解釋

由一群盡可能將數量最小化的軟件程序組成,他們負責提供、實現一個操作系統所需要的各種機制和功能。這些最基礎的機制,包括了底層地址空間管理,線程管理,與進程間通訊。

2、設計理念

將系統的實現,與系統的基本操作規則區分開來。它實現的方式是將核心功能模塊化,劃分成幾個獨立的進程,各自運行,這些進程被稱為服務。所有的服務進程,都運行在不同的地址空間。

讓服務各自獨立,可以減少系統之間的耦合度,易于實現與除錯,也可以增進可移植性。它可以避免單一組件失效,而造成整個系統崩潰,內核只需要重啟這個組件,不至于影響其他服務器的功能,使系統穩定度增加。同時業務功能可以視需要,抽換或新增某些服務進程,使功能更有彈性。

就代碼數量來看,一般來說,因為功能簡化,核心系統使用的代碼比集成式系統更少。更少的代碼意味更少的潛藏程序bug。

3、具體應用

微內核架構在使用時主要考慮兩個方面『核心系統』和『插件模塊』。應用邏輯被劃分為獨立的『核心系統』和『插件模塊』,這樣就提供了良好的可擴展性與靈活性,應用的新特性和基礎業務邏輯也會被隔離。

一、核心系統

核心系統通常是一個可以獨立運行的最小化模塊,操作系統(Windows NT、Mac OS X)就是這么實現的。從商業應用的角度來看,核心系統為那些特定的場景、規則、復雜的條件判斷提供了通用的業務邏輯,而插件模塊則提供了更為具體的業務邏輯。可以增加或擴展核心系統以達到產生附加的業務邏輯的能力。

二、插件模塊

插件模塊通常是一個專業處理額外特性的獨立組件。通常,插件模塊之間是沒有依賴的,當然你也可以創建一個依賴其他插件模塊的插件,但不管怎么樣,讓插件模塊之間可以彼此通訊又不產生依賴是一個很重要的問題。

三、獲取插件模塊并判斷可用性

核心系統需要知道每個插件的可用性并且知道如何獲取它們,一個通常的實現方式是使用一組注冊表。注冊表包括了每個插件的基本信息,包括名稱、數據規范、遠程訪問協議(取決于插件模塊如何和核心系統進行連接)以及其他自定義數據。比如百度網盤中用于上傳文件的上傳插件提供了插件名稱、數據規范(輸入、輸出數據)、數據格式(json、xml),如果這個插件是通過異步進行加載的,那么還會有一個具體遠程HTTP訪問協議地址。

四、連接到核心系統

插件模塊可以通過多種方式連接到核心系統,包括OSGI(open service gateway initiative)、消息機制、web服務以及點對點的綁定(對象實例化,既依賴注入)。使用何種方式主要取決于具體的應用場景和特殊需求(單機部署、分布式部署),微內核架構默認沒有要求具體的實現方式,但是必須保證插件模塊之間不能產生任何依賴。

五、通信規范

插件模塊和核心系統之間的通信規范分為標準規范和自定義規范,自定義規范通常是指某個插件模塊是由第三方服務開發的。這種情況下,就需要在自定義規范和標準規范之間提供一個Adapter,這樣核心系統就不需要關心每個插件模塊的具體實現。在設計標準規范之前制定一個版本策略很重要。

六、事件模式

核心系統提供了多種事件模式,主要包括常用的點對點模式、發布訂閱模式。同時,事件的類型分為全局(系統級)事件、系統內部事件以及插件模塊內部事件。由于點對點模式中發送者和接收者之間沒有依賴關系并且一條消息只對應一個接收者,所以可以用作廣播全局(系統級)事件,比如調起某個插件模塊。而發布訂閱模式中訂閱者和發布者之間存在時間上的依賴性,可以用于系統內部事件和插件模塊的內部事件。此外,核心模塊也可以通過發布訂閱模式向外發布某些屬于業務基本操作規則的事件。

七、接口設計

當插件模塊注冊到核心系統之后,通過系統級事件可以調起具體的某插件模塊。此時就需要核心模塊提供屬于基本操作規則的接口供插件模塊使用,同樣的,插件模塊也必須按照通信規范提供運行入口(類似于java的Main方法)和數據規范(參數格式,返回的數據格式),以此保障插件模塊可以在核心系統上正確運行。插件模塊是獨立于核心系統之外的,但是根據具體的需求(提供單純的數據服務、處理系統數據和信息)可能會需要操作核心模塊的系統服務做一些定制化功能,此時核心系統需要提供一個上下文對象(Context),且插件模塊與外部進行交互只能通過此上下文對象。上下文對象提供了基礎操作(調起其他插件模塊、調起系統服務、獲取系統信息)的API和事件。

4、在前端系統中使用

把前端系統當成一個操作系統,業務基本操作的業務邏輯抽象成一個可以獨立運作的系統內核,而不屬于業務基本操作的業務邏輯都當成一個應用程序,完成安裝、卸載、禁用、調用以及開機啟動等功能。

在功能越來越多,依賴越來越負責的大型前端系統中,如果在項目初期沒有很好地考慮后期兼容的靈活性、擴展性以及彈性,很容易出現項目難以維護或者誰都不想碰的尷尬場面,所以初期的設計很重要。

目前的大型前端單頁面系統使用的都是根據業務劃分獨立組件,進行解耦和復用,最后通過組件進行堆疊、編譯、上線。這樣雖然完成依賴良好的組件化設計考慮到了系統的擴展性和靈活性以及彈性,但是整個系統還是緊緊綁在一起的,并沒有根據基礎業務和附加業務進行很好的拆分。當然很多優秀的前端工程師也考慮到了這一方面,提出來微前端的概念。不過微前端還是一個比較新的技術概念,沒有經過很多大型前端系統的實踐。而微內核架構已經在操作系統和很多的產品的后端服務及前端APP中經過了很多的實踐。

一、定義核心模塊和系統服務

上面提到核心模塊是一個可以獨立運行起來,包含系統基本操作規則的最小化模塊。沒有任何插件模塊依然可以正常運行并處理基本的業務邏輯,所以在大型前端系統中將基礎頁面以及基礎功能單獨包裝起來,組成一個最小化的模塊,稱之為core system。而這個core system可以通過包方式在多個系統間進行復用(NPM、bower、bundle、js chunk)。同時,將那些和業務相關的操作按照類型和場景封裝為多個系統服務,并掛載(依賴注入)到核心系統中,稱之為system service。需要注意的是core system可操作system service,而system service不可操作core system。

此外,core system根據具體的模塊規范(AMD、CMD、CommonJS、ESM、SystemJS、UMD)向外部暴露了可交互的API和事件,稱之為標準接口。后續在編寫插件模塊時要嚴格按照標準接口進行開發。

二、定義插件模塊

插件模塊是一個獨立于核心系統的專業處理不屬于系統基本操作的業務的模塊(組件),比如網盤中的上傳、下載、分享等功能。每個插件模塊必須遵照定義好的標準接口和通信規范進行開發,而且每個插件模塊都是相互獨立的,所以沒有對每個插件的實現細節做過多要求,如A插件模塊使用React開發,B插件模塊使用Vue開發,C模塊使用jQuery開發。

每個插件模塊都應該提供一個包含本插件模塊簽名信息(Mainfest)的JSON文件,簽名信息包括了這個插件的名稱、數據規范、依賴、遠程訪問地址(異步加載的js下載地址)和其他自定義字段。在前端加載核心系統時將該Mainfest文件注冊進去,完成核心系統和插件模塊的連接。

每個插件模塊都應該提供一個統一名稱的運行入口,比如start方法。也可以按照標準接口提供插件的生命周期事件,方便更細粒度的控制。

三、注冊和調起

每個插件都提供了各自的Mainfest簽名文件和可執行文件(JS文件、CSS文件)。所以當服務器接收到瀏覽器請求時可以將所要求的插件Manifest進行merge,合并成一個大的JSON結構,然后返回給瀏覽器。瀏覽器接收后,執行核心系統并注冊Manfiest信息,然后啟動。在注冊過程中可以按照需求完成開機啟動(默認執行)、預加載以及后臺運行等不同類型的操作。

在業務邏輯和插件內部邏輯中可以能存在調起其他插件模塊的需求,由于插件模塊之間不產生依賴并且獨立于核心系統,所以無法直接進行調起。不過由于注冊表和點對點事件模式的存在,可以通過核心系統向外暴露的API傳入插件名稱和組、插件模塊ID等信息進行調起。在調起之前先判斷該插件在是否已注冊,是否已加載(同步加載、異步加載),是否為單例和互斥,參數信息和數據格式,保證它可以正確的調起。

在插件運行過程中出現異常時,通過系統級事件通知核心模塊。核心模塊根據簽名信息中的標識選擇重啟或關閉該插件模塊。

四、多入口管理

在復雜的前端系統中同一個功能可能會存在過個入口的情況,比如上傳、下載、分享等功能都是通過不同位置的按鈕點擊進行調起。通常,將具體功能(插件模塊)和插件模塊入口的UI展示進行隔離。首先,在基礎頁面結構中按照需求進行分塊,分成不同的功能塊,如菜單欄、右鍵菜單、列表項、右側區域、左側區域,并為這些區域定義唯一的名稱和ID。在需要進行入口展示的插件模塊的Manifest中,標識入口的區域和展示方式(按鈕、圖片、引導塊、菜單項、下拉菜單)。

核心系統在注冊表注冊完畢后,解析那些需要展示入口的的字段并交給專門渲染插件模塊入口的系統服務,這樣就通過配置完成了多入口的管理,在后續需求變動和修改時,只需要更改Manifest文件即可,更加完善了系統的擴展性、靈活性、彈性。

5、技術選型

架構是獨立于框架和類庫的存在。

微內核架構的核心就是使業務的基本操作和專業處理額外特性的操作相隔離,提高系統的擴展性、靈活性和彈性。所以在技術選型時我們需要考慮三個方面:核心系統、系統服務、插件模塊。

核心系統通常包含一個項目所需要的基本功能,包括基本的展示頁面、交互操作、業務處理,代碼量通常很少;系統服務提供業務處理的通用功能,比如列表操作、彈框、提示、異步化接口處理等,通常將系統中通用的需求抽象到這一層中;所以,這兩個方面可以使用目前常見的react或vue通過webpack工具進行規范化開發,但如何向外部暴露核心系統的API和事件給插件模塊調用是一個十分重要的問題。

插件模塊更傾向于一個專業處理額外特性的lib庫,所以推薦使用rollup或者webpack的lib模式進行開發和打包,產出一個『干凈』的bundle(也可以發布到NPM中,實現獨立發布和維護)。需要注意的是,如果這個bundle按照定義好的標準規范進行開發,那么它可以在任意一個微內核架構下運行,達到跨系統的能力。就像按照X86規范編寫的程序可以在任意一個X86架構的系統上運行一樣。

調起插件模塊時如何異步加載插件模塊bundle?

一、插件模塊開發階段

方案一:source code

插件模塊的代碼放置在一個根文件夾中,通過源代碼進行開發和編譯。每次更改后通過rollup或webpack產出一個bundle與Manifest文件,然后將它們上線更新即可。

這種模式下,插件模塊的代碼更新后,對應的Manifest文件也會更新,所以核心系統加載到插件模塊也會被更新,不需要基礎業務邏輯執行任何操作。

優點:不需要更新并上線基礎業務代碼。

缺點:沒有版本號的管理功能以及不方便測試。

方案二:npm install

插件模塊發布到github、gitlab等其他托管平臺中,通過npm進行安裝到基礎業務邏輯中。插件模塊每次更改后需要重新發布到托管平臺,并在需要在業務邏輯中更新版本號重新執行npm install xxx,然后重新編譯業務代碼進行上線。

插件模塊更新后,不需要像方案一那樣上線插件模塊。而是更新業務邏輯的依賴,安裝最新版本的插件模塊。

優點:可以通過版本號加載不同的階段的插件模塊以及方便測試。

缺點:更改后需要重新安裝插件模塊,并對依賴此插件模塊的業務邏輯重新進行編譯和上線。回歸成本大,除了回歸插件模塊還要回歸其他基礎業務邏輯(當然也可以像方案一那樣做,但是這樣就拋棄了npm的最大優點 -> 版本號管理)。

二、獲取插件模塊的Manifest簽名信息

方案一:服務器渲染直出到HTML中

服務器收到瀏覽器的頁面請求時,將該頁面需要的插件模塊的Manifest簽名文件進行Merge操作,然后統一輸出到HTML中并返回給瀏覽器。

方案二:通過異步化獲取

通過script標簽的async和defer功能或AJAX,異步從服務器獲取Merge之后的Manifest簽名信息集合。

三、遠程訪問協議

核心系統調起插件模塊時,可以通過插件聲明的遠程訪問協議的HTTP地址,進行異步加載。

方案一:Manifest簽名文件

在Manifest簽名信息中放置插件模塊的遠程訪問協議,比如上傳插件模塊的簽名示例: 

  1.     // 插件名稱 
  2.     "name""upload"
  3.     // 組 
  4.     "group""com.xxx.xxx"
  5.     // 預加載插件模塊資源 
  6.     "preload"true
  7.     // 數據規范,要求輸入的參數 
  8.     "arguments": { 
  9.         // 核心系統提供的上下文對象 
  10.         "ctx": { 
  11.             "type""Object"
  12.             "required"true 
  13.         }, 
  14.         // 需要上傳的文件信息 
  15.         "file": { 
  16.             "type""Object"
  17.             "required"false 
  18.         } 
  19.     }, 
  20.     // 遠程訪問協議 
  21.     "entrance""http://www.a.com/static/plugin-bundles/upload-0.0.1.min.js" 
  22.  

方案二:異步化接口 + import()

該方案是系統插件模塊的遠程訪問協議不放置在插件模塊的Manifest中,而是額外通過異步化接口請求得到遠程訪問協議。然后通過webpack提供的require.ensure()或esm的import()加載插件資源。 

  1. // ctx為核心系統上下文對象 
  2. ctx.loadPlugInAdapter = (pluginName, group) => { 
  3.     // 通過接口請求上傳插件模塊的遠程訪問協議 
  4.     fetchEntrance(pluginName, group).then(url => { 
  5.         // 核心系統執行插件模塊 
  6.         ctx.invoke(pluginName, url); 
  7.     }); 
  8.  
  9. // 調起插件模塊 
  10. ctx.loadPlugInAdapter('upload''com.xxx.xxx');  

最后

架構和框架是獨立的,本文僅僅是提出一種架構思路,而且這個架構也在百度的某款用戶量很大的復雜前端產品中得以應用。基于這一套彈性架構并結合Vue/React的現代化開發理念,可以很好的完成高復雜度的前端系統。希望本文可以給你們提供了除微前端之外的構建高彈性前端系統的另外一種思路。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2019-07-04 13:05:18

MySQL設計數據庫

2014-06-17 14:01:34

Mysql網站架構

2024-05-28 09:05:31

2016-08-08 13:59:02

MySQL架構數據庫

2011-04-12 10:52:43

布線系統

2010-10-28 09:05:10

ASP.NET

2011-09-29 13:52:57

服務器HPC浪潮TS850

2010-08-10 10:10:28

系統架構

2018-08-30 09:00:00

開源Apache Kafk數據流

2020-12-28 08:51:06

操作系統微內核Dubbo

2018-12-14 10:06:22

緩存分布式系統

2012-12-14 08:46:14

微博PageRank算法

2014-09-26 09:53:41

系統架構架構架構演變

2025-01-08 09:23:03

2022-08-19 14:06:56

前端架構技術

2020-08-14 10:00:34

Node前端應用

2022-02-20 22:16:44

ESLint工具JavaScript

2012-05-24 09:18:34

ibmdw

2023-11-20 08:12:15

2020-07-21 08:20:23

系統架構編輯器
點贊
收藏

51CTO技術棧公眾號

亚洲人成在线观看网站高清| 亚洲无人区一区| 国产欧美日韩免费| 国产这里有精品| 国产精品tv| 色久综合一二码| 青青在线视频免费观看| 精品三级久久久久久久电影聊斋| 久久精品99国产精品日本| 欧美片一区二区三区| 日韩精品无码一区二区三区久久久| 伊人久久高清| 亚洲国产中文字幕在线视频综合| 日本一区二区在线视频观看| 99久久夜色精品国产亚洲| 翔田千里一区二区| 免费av在线一区| 国产真人做爰视频免费| 国产精品玖玖玖在线资源| 欧美日韩一级片网站| 国产美女主播在线播放| 二区三区在线观看| 久久精品水蜜桃av综合天堂| 成人天堂噜噜噜| 国产suv精品一区二区33| 黄色一区二区三区四区| 色噜噜亚洲精品中文字幕| 特大黑人巨人吊xxxx| 二区三区精品| 欧美午夜视频网站| 欧美牲交a欧美牲交aⅴ免费真| 中文字幕免费高清电视剧网站在线观看| 国产亚洲精品7777| 精品免费国产| 高清乱码毛片入口| 国产精选一区二区三区| 国产男人精品视频| 在线观看亚洲黄色| 久久久久久自在自线| 91成人国产在线观看| 久久久久亚洲AV| 你懂的国产精品| 久久精品电影网| 中文字幕精品亚洲| 日本成人小视频| 在线日韩av观看| 日本二区在线观看| 久久99国产精品视频| 日韩成人免费视频| 加勒比精品视频| 久久精品色综合| 亚洲国产成人精品一区二区| 91精品啪在线观看国产| 国产成人tv| 亚洲激情第一页| 一级特黄a大片免费| 日本中文字幕在线一区| 日韩精品免费在线视频| 国产三级视频网站| 女厕嘘嘘一区二区在线播放 | 日韩在线视频观看免费| 粉嫩绯色av一区二区在线观看| 超碰97在线资源| 东京干手机福利视频| 成人午夜电影久久影院| 精品免费一区二区三区蜜桃| 黄色国产在线| 国产精品区一区二区三区| 亚洲午夜在线观看| 国产激情小视频在线| 亚洲国产成人av好男人在线观看| 国产av人人夜夜澡人人爽麻豆| 日本不卡免费高清视频在线| 色综合天天综合色综合av| 国产精品人人爽人人爽| 国产精品视频首页| 亚洲精品一区二区在线观看| 成人影视免费观看| 91欧美国产| 精品国产一区二区三区久久| 国产亚洲色婷婷久久99精品| 亚洲永久网站| 国产一区玩具在线观看| 国产91免费在线观看| 91老司机福利 在线| 亚洲欧美日韩在线综合| 在线观看小视频| 福利视频第一区| 中文字幕66页| 粉嫩精品导航导航| 国产一区二区三区在线观看视频 | 国产精品日日做人人爱| 国产超碰人人模人人爽人人添| 99热99精品| 夜夜爽99久久国产综合精品女不卡 | 日本香蕉视频在线观看| 美女福利一区二区| 欧美一区二区三区视频在线观看 | 国产精品午夜电影| 日本一本中文字幕| 电影在线观看一区二区| 亚洲二区中文字幕| 欧美成人短视频| 最新国产拍偷乱拍精品 | 老汉色老汉首页av亚洲| 色七七影院综合| 国产a∨精品一区二区三区仙踪林| 麻豆成人免费电影| 国产综合动作在线观看| 麻豆av免费在线观看| 欧美天堂在线观看| 色哟哟免费视频| 成人三级视频| 欧美性做爰毛片| 精品国产乱码一区二区三| 久久亚洲私人国产精品va媚药| 亚洲小视频在线播放| 国产欧美一区二区三区精品酒店| 日韩欧美三级在线| 九一在线免费观看| 亚洲一区一卡| 国产精品免费一区二区三区| 欧美一区二区三区| 在线国产电影不卡| 国产福利在线观看视频| 精品电影一区| 91九色对白| 在线免费观看黄| 在线看日本不卡| 中文字幕丰满孑伦无码专区| 在线观看视频免费一区二区三区| 91久久偷偷做嫩草影院| 日本中文在线| 欧美日韩一区视频| 少妇无套高潮一二三区| 国产女优一区| 久久久久久久久久码影片| 久久久123| 日韩一区二区免费在线电影| 亚洲AV成人无码网站天堂久久| 日精品一区二区| 激情小说综合网| 欧美男人天堂| 日韩精品日韩在线观看| 制服.丝袜.亚洲.中文.综合懂色| 成人丝袜视频网| 日韩精品一区二区在线视频| 日韩在线成人| 欧美精品www| 狠狠综合久久av一区二区| 亚洲一区中文日韩| 美女扒开腿免费视频| 国内精品99| 国产日韩在线一区二区三区| ****av在线网毛片| 日韩精品视频免费| 久久久久久久久久一级| 国产精品高潮呻吟久久| 日韩成人精品视频在线观看| 国产韩日影视精品| 亚洲一区二区三区视频| 欧美女同一区| 日韩成人在线观看| 波多野结衣日韩| 国产精品毛片无遮挡高清| 手机免费av片| 欧美 日韩 国产 一区| 国产二区一区| 中文字幕乱码在线播放| 中文字幕精品网| 国产视频在线观看免费 | 国产精品成人无码| 中文字幕亚洲在| 三级黄色片免费看| 亚洲精品乱码| 日韩欧美三级一区二区| 精品91福利视频| 欧美激情在线狂野欧美精品| 三级视频网站在线| 欧洲视频一区二区| 亚洲综合网在线| 成人丝袜高跟foot| 国内自拍视频网| 中文字幕一区二区三三| 久久riav| 91成人在线网站| 性色av一区二区三区免费 | 牛牛视频精品一区二区不卡| 国产精品扒开腿爽爽爽视频| a天堂中文在线官网在线| 亚洲成人精品久久| 国产偷人爽久久久久久老妇app| 亚洲特级片在线| 中文字幕一区二区久久人妻网站 | 丰满少妇一区二区三区| 免费在线观看一区二区三区| 久青草视频在线播放| 久久久久9999| 热三久草你在线| 精品一区免费av| 成人免费看片'免费看| 偷拍亚洲色图| 成人在线视频网| 超碰资源在线| 日韩专区在线观看| 天堂成人在线视频| 在线观看日韩av先锋影音电影院| 男人操女人的视频网站| 久久综合狠狠综合久久激情| 污视频在线观看免费网站| 亚洲免费影院| 日本免费成人网| 日韩欧美大片| 欧美久久综合性欧美| 日韩中文字幕| 国产精品视频永久免费播放| 91九色美女在线视频| 久久人人爽亚洲精品天堂| av女名字大全列表| 日韩欧美在线网站| 亚洲男人天堂网址| 天天做天天摸天天爽国产一区| 国产免费久久久久| 国产人成一区二区三区影院| 在线免费观看a级片| 国产99久久久久| 日韩av一卡二卡三卡| 日韩中文字幕麻豆| 干日本少妇首页| 亚洲国产一区二区三区a毛片| 最新视频 - x88av| 日韩三级在线| 日本最新一区二区三区视频观看| 老牛精品亚洲成av人片| 超碰在线97av| 亚洲精品18| 99精品国产高清一区二区| 日本a人精品| 国产精自产拍久久久久久| 日韩欧美2区| 国产精品看片资源| 伊人网在线播放| 国产91精品高潮白浆喷水| 麻豆mv在线观看| 97在线观看视频| 男人天堂视频在线观看| 97精品在线视频| 男人av在线播放| 欧美自拍视频在线观看| 范冰冰一级做a爰片久久毛片| 日本韩国欧美精品大片卡二| 在线男人天堂| 欧美综合激情网| 欧美××××黑人××性爽| 日本精品免费观看| 丝袜美腿一区| 国产精品免费观看在线| 久久99国产精品二区高清软件| 国产精品欧美日韩一区二区| 日韩五码电影| 亚洲www视频| 视频精品一区二区三区| 国产精品果冻传媒潘| 欧美18免费视频| 欧美日本韩国在线| 青草国产精品| 300部国产真实乱| 狠狠入ady亚洲精品经典电影| 精品少妇在线视频| 久久九九国产| 加勒比av中文字幕| 国产成人精品综合在线观看| 中文字幕在线播放视频| 国产亚洲1区2区3区| 亚洲欧洲综合网| 依依成人精品视频| 久久国产精品免费看| 欧美在线影院一区二区| 国产日韩欧美一区二区东京热| 精品国产亚洲在线| 欧美日韩在线中文字幕| www国产精品视频| 国产亚av手机在线观看| 国产成人97精品免费看片| 四虎精品永久免费| 精品乱色一区二区中文字幕| 日韩欧美不卡| 5月婷婷6月丁香| 看电视剧不卡顿的网站| 国产伦精品一区二区三区88av| 久久亚洲一级片| 性欧美激情精品| 欧美日韩va| 国产视频精品网| 奇米影视亚洲| 18精品爽国产三级网站| 欧美大片专区| 浮妇高潮喷白浆视频| www.色在线| 日韩美女毛茸茸| 国产一区二区三区| 欧美日韩在线观看一区二区三区| 91精品推荐| 青青在线视频免费| 国产91丝袜在线18| 色噜噜噜噜噜噜| 午夜欧美2019年伦理| 国产精品无码久久av| 亚洲欧美www| 肉肉视频在线观看| 国产精自产拍久久久久久| 日韩精品社区| 大荫蒂性生交片| 国产在线国偷精品免费看| 少妇久久久久久久久久| 亚洲午夜免费电影| 一区二区精品视频在线观看| 亚洲欧美在线免费观看| av2020不卡| 1卡2卡3卡精品视频| 日韩精品欧美激情一区二区| 成人av一级片| 成人毛片视频在线观看| 综合五月激情网| 欧美精品三级日韩久久| 成人h小游戏| 国产精品18久久久久久麻辣| 日韩欧美影院| 日韩中字在线观看| 成人av网站在线观看| 久热这里有精品| 91麻豆精品国产自产在线观看一区| 国产福利在线| 国产91网红主播在线观看| 日韩欧美影院| 欧美精品久久久久久久免费| 国产99久久久精品| 欧美成人精品欧美一级私黄| 在线综合+亚洲+欧美中文字幕| 欧美激情办公室videoshd| 国产精品男女猛烈高潮激情| 国际精品欧美精品| 污污视频网站免费观看| 91麻豆swag| 九九热最新视频| 中文字幕日韩视频| 精品176极品一区| 亚洲国产精品www| 麻豆精品视频在线| 侵犯稚嫩小箩莉h文系列小说| 3atv一区二区三区| 中文字幕伦理免费在线视频| 99精品国产一区二区| 亚洲精品1区2区| 极品白嫩丰满美女无套| 色婷婷久久久亚洲一区二区三区| 韩国三级在线观看久| 国产精品视频免费在线观看| 99精品综合| 国模大尺度视频| 五月天一区二区| 国产黄色免费在线观看| 国产中文日韩欧美| 欧美午夜不卡影院在线观看完整版免费| 丰满人妻一区二区三区免费视频棣| 欧美日韩国产黄| 9色在线视频网站| 亚洲va欧美va国产综合剧情| 亚洲精品乱码| 日韩精品电影一区二区三区| 91精品国产综合久久久久久久 | 在线播放日韩欧美| 亚洲精品三区| 免费人成在线观看视频播放| 久久久久久久网| 一区二区日韩视频| 久久久亚洲精选| 精品一级毛片| 深夜做爰性大片蜜桃| 欧美视频一区二区三区…| 91大神在线网站| 成人91视频| 免费美女久久99| 日本网站在线播放| 色视频www在线播放国产成人 | 欧美日韩精品一区| 九九国产精品视频| 日韩毛片在线视频| 日韩中文字幕在线| 国产精品视屏| 一级黄色特级片| 午夜精品久久久久久久久久| 日本在线www| 精品视频高清无人区区二区三区| 免费在线观看一区二区三区| 日韩欧美一区二区一幕| 久久视频在线直播| 欧美精品乱码| 国产乱淫av麻豆国产免费| 欧美色精品在线视频|