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

iframe 接班人-微前端框架 qiankun 在中后臺(tái)系統(tǒng)實(shí)踐

共 8590字,需瀏覽 18分鐘

 ·

2020-11-29 02:52


背景

在轉(zhuǎn)轉(zhuǎn)的中臺(tái)業(yè)務(wù)中,交易流轉(zhuǎn)、業(yè)務(wù)運(yùn)營(yíng)和商戶賦能等功能,主要集中在兩個(gè)系統(tǒng)中(暫且命名為 inner/outer )。兩個(gè)系統(tǒng)基座(功能框架)類似,以 inner 系統(tǒng)為例,如圖:

inner系統(tǒng)基座

業(yè)務(wù)現(xiàn)狀問(wèn)題

維護(hù)迭代,隨時(shí)間延續(xù)是不可避免的

至今,inner/outer 均有以下特點(diǎn):

  • 頁(yè)面結(jié)構(gòu)繁雜 分類較多,菜單頁(yè)面多;布局五花八門(mén),不統(tǒng)一
  • 技術(shù)棧不統(tǒng)一 歷史原因,存在 jquery靜態(tài)模板、react 等技術(shù)棧
  • 權(quán)限不統(tǒng)一 不同用戶,權(quán)限不一樣,使用的功能模塊不同
  • 項(xiàng)目管理不統(tǒng)一 部分功能模塊是由業(yè)務(wù)方維護(hù);同一功能模塊面向不同用戶角色,也需要在不同系統(tǒng)中使用

初次接觸上述問(wèn)題時(shí),閃現(xiàn)在腦海里的是:用 iframe 呀。確實(shí),剛開(kāi)始也是這樣做的。

問(wèn)題暴露,在維護(hù)迭代中是個(gè)契機(jī)

系統(tǒng)在一個(gè)長(zhǎng)時(shí)間跨度的運(yùn)行下,隨著維護(hù)人員的變遷、使用人群的增多,更多的問(wèn)題也接踵而至:

  • 樣式不統(tǒng)一

由于沒(méi)有統(tǒng)一規(guī)范,每個(gè)功能模塊在不同的開(kāi)發(fā)者鍵盤(pán)下設(shè)想的結(jié)構(gòu)不同,輸出的風(fēng)格也不統(tǒng)一,使整個(gè)系統(tǒng)看起來(lái)略顯雜亂。

  • 瀏覽器前進(jìn)/后退

首先,iframe 頁(yè)面沒(méi)有自己的歷史記錄,使用的是基座(父頁(yè)面)的瀏覽歷史。所以,當(dāng)iframe 頁(yè)在內(nèi)部進(jìn)行跳轉(zhuǎn)時(shí),瀏覽器地址欄無(wú)變化,基座中加載的 src 資源也無(wú)變化,當(dāng)瀏覽器刷新時(shí),無(wú)法停留在iframe內(nèi)部跳轉(zhuǎn)后的頁(yè)面上,需要用戶重新走一遍操作,體驗(yàn)上會(huì)大打折扣。

  • 彈窗遮罩層覆蓋可視范圍

iframe 頁(yè)產(chǎn)生的彈窗,一般只能遮罩 iframe 區(qū)域。

  • 頁(yè)面間消息傳遞

與基座非同源下,iframe 無(wú)法直接獲取基座 url 的參數(shù),消息傳遞需要周轉(zhuǎn)一下,如使用postmessage來(lái)實(shí)現(xiàn);而動(dòng)態(tài)創(chuàng)建的 iframe 頁(yè),或許還需要借助本地存儲(chǔ)等。

  • 頁(yè)面緩存

iframe 資源變更上線后,打開(kāi)系統(tǒng)會(huì)發(fā)現(xiàn) iframe 頁(yè)依舊是老資源。需要用時(shí)間戳方案或強(qiáng)制刷新。

  • 加載異常處理

與基座非同源下,onerror 事件無(wú)法使用。使用 try catch 解決此問(wèn)題,嘗試獲取 contentDocument 時(shí)將拋出異常


以上問(wèn)題,從業(yè)務(wù)價(jià)值看,對(duì)用戶的使用體驗(yàn)會(huì)有損失;從工程價(jià)值看,希望能通過(guò)技術(shù)提升業(yè)務(wù)體驗(yàn)的同時(shí),也提高系統(tǒng)的維護(hù)性。

改進(jìn)實(shí)踐 - 微前端

實(shí)踐新技術(shù),在問(wèn)題暴露時(shí)是方向

大多數(shù)工程師,包括我,一邊兒嘴里說(shuō)著:學(xué)不動(dòng)啦!一邊兒想嘗試一些新方式來(lái)優(yōu)化系統(tǒng)。

結(jié)合問(wèn)題分類,有思考一些嘗試方向,如:

  • 中后臺(tái) UI 規(guī)范:歷經(jīng)迭代,百花齊放,然而更需要的是找到合適我司的風(fēng)格,保持一致性。

    此部分這次不再細(xì)說(shuō),可以 關(guān)注我們公眾號(hào) - 大轉(zhuǎn)轉(zhuǎn) FE,后續(xù)我們會(huì)有專門(mén)的文章講這部分。

另外,大互聯(lián)網(wǎng)時(shí)代,從工程角度看,社區(qū)對(duì)類似系統(tǒng)的探索有很多,除了 iframe 外,也有不少相對(duì)成熟的替代方案:

1. single-spa

2. qiankun

提起這兩個(gè),就要提一下微前端理念,目前社區(qū)有很多關(guān)于微前端架構(gòu)的介紹,這里簡(jiǎn)單提一下:

Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently. — Micro Frontends

大致是說(shuō),微前端有以下特點(diǎn):

  1. 技術(shù)棧無(wú)關(guān):基座不限制子應(yīng)用的技術(shù)棧
  2. 完全獨(dú)立:子應(yīng)用獨(dú)立部署維護(hù),接入時(shí)基座同步更新;又可獨(dú)立運(yùn)行

基于此,不難想到:iframe 也是符合微前端理念的。那其他方案又是如何做的呢?

single-spa

社區(qū)里 single-spa 介紹也不少。根據(jù) demo 比葫蘆畫(huà)瓢,可以知道它的架構(gòu)分布:

single-spa架構(gòu)

啟動(dòng)服務(wù)的配置主要是在single-spa-config 文件中,包含項(xiàng)目名稱、 項(xiàng)目地址、路由配置等:

//?single-spa-config.js
import?{registerApplication,?start?}?from?'single-spa';

//?子應(yīng)用唯一ID
const?microAppName?=?'react';

//?子應(yīng)用入口
const?loadingFunction?=?()?=>?import('./react/app.js');

//?url前綴校驗(yàn)
const?activityFunction?=?location?=>?location.pathname.startsWith('/react');

//?注冊(cè)
registerApplication(
??microAppName,
??loadingFunction,
??activityFunction
);

//singleSpa?啟動(dòng)
start();

single-spa 讓基座和子應(yīng)用共用一個(gè) document,那就需要對(duì)子應(yīng)用進(jìn)行改造:把子項(xiàng)目的容器和生成的 js 插入到基座項(xiàng)目中。

  • 不需要 HTML 入口文件
  • js 入口文件導(dǎo)出的模塊,必須包括 bootstrap、mountunmount 三個(gè)方法
<div?id='micro-react'>div>
<script?src=/js/chunk-vendors.js>?script>
<script?src=/js/app.js>?script>

不過(guò)這種方式需要對(duì)現(xiàn)有項(xiàng)目的打包方式和配置項(xiàng)進(jìn)行改造,成本很大。所以,對(duì)于已有的工程項(xiàng)目,我選擇了放棄使用。

qiankun

qiankun 也是社區(qū)提到比較多的一個(gè)開(kāi)源框架,是基于single-spa 實(shí)現(xiàn)了開(kāi)箱即用。可以采用html entry 方式接入子應(yīng)用,且子應(yīng)用只需暴露一些生命周期,改動(dòng)較少?!?strong>少】這個(gè)點(diǎn),真是讓我躍躍欲試。

目前我司業(yè)務(wù)場(chǎng)景是單實(shí)例模式(一個(gè)運(yùn)行時(shí)只有一個(gè)子應(yīng)用被激活),我們可以根據(jù)一張圖來(lái)看看單實(shí)例下以html entry方式 qiankun 實(shí)現(xiàn)流程:

qiankun原理

如上圖所示,一個(gè)子應(yīng)用的全過(guò)程有:

  • 初始化配置,匹配出子應(yīng)用
  • 初始化子應(yīng)用,加載對(duì)應(yīng)的 html 資源,以及創(chuàng)建 JS 沙箱環(huán)境
  • 掛載子應(yīng)用,執(zhí)行生命周期鉤子函數(shù)
  • 卸載子應(yīng)用,當(dāng)切換路由時(shí),執(zhí)行各卸載鉤子函數(shù),以及卸載 JS 沙箱環(huán)境,清除容器節(jié)點(diǎn)

具體實(shí)現(xiàn)細(xì)節(jié),大家可以參考qiankun源碼。

實(shí)踐

  • 基座

從規(guī)范化開(kāi)發(fā)角度,我司的中后臺(tái)系統(tǒng)是基于 umi 開(kāi)發(fā)(詳細(xì)可參考我們之前的文章 umi 中后臺(tái)項(xiàng)目實(shí)踐)。在構(gòu)建主應(yīng)用使用了配套的 qiankun 插件:@umijs/plugin-qiankun

1. 初始化配置項(xiàng),注冊(cè)子應(yīng)用

插件安裝之后,我們可以在入口文件里配置:

此處主要以運(yùn)行時(shí)為例

//?app.js
export?const?qiankun?=?Promise.resolve().then(()?=>?({
??//?運(yùn)行時(shí)注冊(cè)子應(yīng)用信息
??apps:?[
????{
??????//?結(jié)算單管理
??????name:?'settlement',?//?唯一id,與子應(yīng)用的library?保持一致
??????entry:?'//xxx',?//?html?entry
??????history:?'hash',?//?子應(yīng)用的?history?配置,默認(rèn)為當(dāng)前主應(yīng)用?history?配置
??????container:?'#root-content',?//?子應(yīng)用存放節(jié)點(diǎn)
??????mountElementId:?'root-content'?//?子應(yīng)用存放節(jié)點(diǎn)
????},?{
??????//?公告消息
??????name:?'news',?//?唯一id,與子應(yīng)用的library?保持一致
??????entry:?'//xxx',?//?html?entry
??????history:?'hash',?//?子應(yīng)用的?history?配置,默認(rèn)為當(dāng)前主應(yīng)用?history?配置
??????container:?'#root-content',?//?子應(yīng)用存放節(jié)點(diǎn)
??????mountElementId:?'root-content'?//?子應(yīng)用存放節(jié)點(diǎn)
????}
??],
??jsSandbox:?{?strictStyleIsolation:?true?},?//?是否啟用?js?沙箱,默認(rèn)為?false
??prefetch:?true,?//?是否啟用?prefetch?特性,默認(rèn)為?true
??lifeCycles:?{
????//?see?https://github.com/umijs/qiankun#registermicroapps
????beforeLoad:?(props)?=>?{
??????return?Promise.resolve(props).then(()?=>?loading())
????},
????afterMount:?(props)?=>?{
??????console.log('afterMount',?props)
????},
????afterUnmount:?(props)?=>?{
??????console.log('afterUnmount',?props)
????}
??}
}))

2. 裝載子應(yīng)用,在路由配置中使用microApp來(lái)獲取相應(yīng)的子應(yīng)用名稱:

//?router.config.js
export?default?[
??{
????path:?'/',
????component:?'../layouts/BasicLayout',
????routes:?[
??????...
??????{
????????path:?'/settlement/list',
????????name:?'結(jié)算單管理',
????????icon:?'RedEnvelopeOutlined',
????????microApp:?'settlement',??//?子應(yīng)用唯一id
??????},
??????{
????????path:?'/settlement/detail/:id',
????????name:?'結(jié)算單管理',
????????icon:?'RedEnvelopeOutlined',
????????microApp:?'settlement',?//?子應(yīng)用唯一id
????????hideInMenu:?true,
??????},
??????...
??????...
??????{
????????component:?'./404',
??????},
????],
??},
??{
????component:?'./404',
??},
]

以上就是基座的改動(dòng)點(diǎn),看起來(lái)代碼侵入性很少。

  • 子應(yīng)用

在子應(yīng)用中,需要做如下的配置

1. 入口文件設(shè)置 baseName,及暴露鉤子函數(shù)

//設(shè)置主應(yīng)用下的子應(yīng)用路由命名空間
const?BASE_NAME?=?window.__POWERED_BY_QIANKUN__???"/settlement"?:?"";

//?獨(dú)立運(yùn)行時(shí),直接掛載應(yīng)用
if?(!window.__POWERED_BY_QIANKUN__)?{
??effectRender();
}

//?在子應(yīng)用初始化的時(shí)候調(diào)用一次
export?async?function?bootstrap()?{
??console.log("ReactMicroApp?bootstraped");
}

export?async?function?mount(props)?{
??console.log("ReactMicroApp?mount",?props);
??effectRender(props);
}

//卸載子應(yīng)用的應(yīng)用實(shí)例
export?async?function?unmount(props)?{
??const?{?container?}?=?props?||?{};
??ReactDOM.unmountComponentAtNode(document.getElementById('root-content')
??);
}

2. webpack 配置中,需要設(shè)置輸出為 umd 格式:

//?設(shè)置別名
merge:?{
??plugins:?[new?webpack.ProvidePlugin({
????React:?'react',
????PropTypes:?'prop-types'
??})],
??output:?{
????library:?`[name]`,?//?子應(yīng)用的包名,這里與主應(yīng)用中注冊(cè)子應(yīng)用名稱一致
????libraryTarget:?"umd",?//?所有的模塊定義下都可運(yùn)行的方式
????jsonpFunction:?`webpackJsonp_ReactMicroApp`,?//?按需加載
??}
}?//自定義webpack配置

OK,配置完成!

理論上,啟動(dòng)項(xiàng)目,部署等都應(yīng)該沒(méi)有問(wèn)題了。咦,打開(kāi)地址,頁(yè)面一直在 loading,控制臺(tái)一堆報(bào)錯(cuò),看起來(lái)要踩一踩坑了。

踩坑

1. 版本一致性

如果主應(yīng)用和子應(yīng)用都是基于 umi 框架,在使用 @umijs/umi-plugin-qiankun 插件時(shí),要使用同一個(gè)版本,否則子應(yīng)用報(bào)錯(cuò)。

2. 跨域

qiankun 是通過(guò) fetch 去獲取子應(yīng)用資源的,所以必須支持跨域

const?mountDOM?=?appWrapperGetter();
const?{?fetch?}?=?frameworkConfiguration;
const?referenceNode?=?mountDOM.contains(refChild)???refChild?:?null;

if?(src)?{
??execScripts(null,?[src],?proxy,?{
????fetch,
????strictGlobal:?!singular,
????beforeExec:?()?=>?{
??????Object.defineProperty(document,?'currentScript',?{
????????get():?any?{
??????????return?element;
????????},
????????configurable:?true,
??????})
????};
??})
}

比如:基座地址為 b.zhuanzhuan.com, 子應(yīng)用為 d.zhuanzhuan.com 。當(dāng)基座去加載子應(yīng)用時(shí),會(huì)出現(xiàn)跨域錯(cuò)誤。

曾經(jīng)有采用通過(guò) Node 服務(wù)做一層中轉(zhuǎn),跳過(guò)跨域問(wèn)題:

??....
??maxDays:?3,?//?保留最大天數(shù)日志文件
}

//?代理
config.httpProxy?=?{
??'/cors':?{
????target:?'https://d.zhuanzhuan.com',
????pathRewrite:?{'^/cors'?:?''}
??}
};

return?config

但考慮應(yīng)用的訪問(wèn)量,以及線上線下環(huán)境維護(hù)成本,覺(jué)得必要性不是很大,最終選擇通過(guò) nginx 解決跨域。

3. 子應(yīng)用內(nèi)部跳轉(zhuǎn)

子應(yīng)用內(nèi)部跳轉(zhuǎn),需要在基座路由上提前注冊(cè)好,否則在跳轉(zhuǎn)后,頁(yè)面識(shí)別不到。

{
??path:?'/settlement/detail/:id',
??name:?'結(jié)算單管理',
??icon:?'RedEnvelopeOutlined',
??microApp:?'settlement',
??hideInMenu:?true,
},

4. css 污染

qiankun 只能解決子應(yīng)用之間的樣式相互污染,不能解決子應(yīng)用樣式污染基座的樣式。比如:當(dāng)切換到某個(gè)子應(yīng)用時(shí),左側(cè)菜單欄突然往右移了。

系統(tǒng)右移

查看控制臺(tái),不難發(fā)現(xiàn),子應(yīng)用的相同模塊覆蓋了基座:

樣式覆蓋

這個(gè)問(wèn)題,可以通過(guò)改變基座的前綴來(lái)解決,搞一個(gè)postcss 插件給不同的組件添加不同的前綴。

這里補(bǔ)充一個(gè) css 隔離常用的方式如:css前綴、CSS Module動(dòng)態(tài)加載/卸載樣式表。

qiankun 中 css沙箱機(jī)制 采用的是 動(dòng)態(tài)加載/卸載樣式表

  1. 重寫(xiě) HTMLHeadElement.prototype.appendChild 事件
//?Just?overwrite?it?while?it?have?not?been?overwrite
if?(
??HTMLHeadElement.prototype.appendChild?===?rawHeadAppendChild?&&
??HTMLBodyElement.prototype.appendChild?===?rawBodyAppendChild?&&
??HTMLHeadElement.prototype.insertBefore?===?rawHeadInsertBefore
)?{
??HTMLHeadElement.prototype.appendChild?=?getOverwrittenAppendChildOrInsertBefore({
????rawDOMAppendOrInsertBefore:?rawHeadAppendChild,
????appName,
????appWrapperGetter,
????proxy,
????singular,
????dynamicStyleSheetElements,
????scopedCSS,
????excludeAssetFilter,
??})?as?typeof?rawHeadAppendChild;
....
  1. 當(dāng)子應(yīng)用加載時(shí),在 head 插入 style/link ; 當(dāng)卸載時(shí),直接移除。
//?Just?overwrite?it?while?it?have?not?been?overwrite
if?(
??HTMLHeadElement.prototype.removeChild?===?rawHeadRemoveChild?&&
??HTMLBodyElement.prototype.removeChild?===?rawBodyRemoveChild
)?{
??HTMLHeadElement.prototype.removeChild?=?getNewRemoveChild({
????appWrapperGetter,
????headOrBodyRemoveChild:?rawHeadRemoveChild,
??});
??HTMLBodyElement.prototype.removeChild?=?getNewRemoveChild({
????appWrapperGetter,
????headOrBodyRemoveChild:?rawBodyRemoveChild,
??});
}

看起來(lái)很完美,但有時(shí)候會(huì)出現(xiàn),基座樣式丟失的問(wèn)題。這個(gè)跟子應(yīng)用卸載的時(shí)機(jī)有關(guān)系:當(dāng)切換子應(yīng)用時(shí),當(dāng)前子應(yīng)用沙箱環(huán)境還未被卸載,但基座 css 已被插入,當(dāng)卸載時(shí)會(huì)連帶基座 css 一起被清除。

5. 錯(cuò)誤捕獲,降級(jí)處理

若子應(yīng)用加載失敗,需要給相應(yīng)的提示或動(dòng)態(tài)插入iframe頁(yè):

//?iframe.js
export?default?({?sourceUrl?})?=>
??<iframe
????src={sourceUrl}
????title="xxxx"
????width="100%"
????height="100%"
????border="0"
????frameBorder="0"
??/>


import?{?render?}?from?'react-dom';

//?全局未捕獲異常處理器
addGlobalUncaughtErrorHandler((event)?=>?{
??console.error(event);
??const?{?message,?location:?{?hash?}?}?=?event;
??//?加載失敗時(shí)提示
??if?(message?&&?message.includes("died?in?status?LOADING_SOURCE_CODE"))?{
????Modal.Confirm({
????content:?"子應(yīng)用加載失敗,請(qǐng)檢查應(yīng)用是否可運(yùn)行"
????onOk:?()?=>?import('./Inframe.js')
????});
??}
});

6. 路由懶加載樣式丟失

子應(yīng)用中存在按需加載的路由,在加載時(shí)頁(yè)面樣式丟失,這是官方庫(kù)產(chǎn)生的問(wèn)題,issue 里已有大佬提 PR 啦,可參考 https://github.com/umijs/qiankun/issues/857


以上,就是我們的不完全踩坑。

應(yīng)用間的通信,在我司的業(yè)務(wù)場(chǎng)景中復(fù)雜度不高,使用官方提供的方案就可以解決,此處沒(méi)有詳說(shuō)。

后續(xù)

持續(xù)性思考會(huì)帶來(lái)的技術(shù)紅利

此次接入 qiankun,也只是處于表面應(yīng)用。后續(xù)我們更要思考接入它之后更深的工程價(jià)值,如:

- 自動(dòng)接入 qiankun

結(jié)合我司已有的腳手架和 umi 模板,額外添加一個(gè)命令,自動(dòng)注冊(cè)子應(yīng)用,做到自動(dòng)化。

- 子應(yīng)用間組件共享

基座和子應(yīng)用大概率都用到了 react/dva 等,是否可以在基座加載完之后,子應(yīng)用直接復(fù)用?當(dāng)然,淺顯思考應(yīng)該少不了 webpackexternals。


?

瀏覽 81
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲色五月| 日韩欧美一级A片| 成人性生交大片免费看小芳| 日本一区二区三区视频在线观看 | 开心深爱激情网| 国产精品免费观看视频| 中文字幕久久人妻无码精品蜜桃 | 在线观看高清无码视频| 激情视频网站| 伊人青草视频9| 天天色色婷婷| 无码不卡一区| 国产3p露脸普通话对白| www.久久精品视频| 婷婷国产综合| 先锋影音一区二区| 国产成人精品免高潮在线人与禽一| 人妻天天爽| A片在线视频| 成人精品在线视频| 蜜桃91精品秘入口| 中文字幕视频在线直播| 亚洲无码手机在线| 五月天激情av| 人人色在线观看| 国产黄色视频网站在线观看| 3344在线观看免费下载视频| 中文字幕一区二区三区四区在线视频 | 亚洲天堂av在线免费观看| 国产精品久久免费视频| 麻豆国产91| 91探花在线播放| 69婷婷国产精品| 中文字幕-区二区三区四区视频中国| 国产免费AV片| 欧美成人视频| 久久成人一区| 人人操人人妻人人看| 中文字幕av免费观看| 先锋影音中文字幕| 麻豆人妻换人妻好紧| 超碰9| 欧美日韩国产不卡视频| 日逼高清视频| 无码人妻少妇| 成人无码一区二区三区| 91成人电影在线观看| 亚洲福利| 天堂成人av| 偷拍亚洲色图| 操屄视频在线| 97人妻精品一区二区三区| 亚洲黄色电影| 永久免费黄色视频网站| 色视频国产| 加勒比精品在线| 操逼免费| 91久久性奴调教| 欧美性猛交ⅩXXX无码视频| 99在线国产| 日朝无码| www.五月天婷婷| 免费观看在线黄片| 欧美第二页| 怡红院男人的天堂| 国产一级美女操逼视频免费播放| 麻豆视频在线播放| 婷婷综合久久| 亚洲AV高清无码| 欧美成人视频电影无码高清| 偷拍视频图片综合网| 婷婷精品国产一区二区三区日韩| 成人福利| 综合色综合| 日韩无码链接| 中文字幕AV播放| 日韩操B| 精品中文字幕视频| 在线观看亚洲专区| 无码群交东京热| 白丝在线观看| 神马午夜视频| 日韩AV毛片| 国产人成视频免费观看| 熟女人妻一区二区| 加勒比无码高清| www.五月天婷婷| 欧美成人无码一区二区三区| 日韩欧美中文在线| 欧美色啪| 红桃视频无码| 免费毛片基地| 99人人爽| 亚洲国产成人91PORN| 久久久999精品日韩一区二区| 国产精品色婷婷| 欧美日韩成人在线观看| 影音先锋成人资源| 久草高清视频| 国产午夜精品电影| 亚洲精品成人av| 国产草莓视频| 操逼免费网站| 成人天天爽| A片免费播放| 强伦轩人妻一区二区三区最新版本更新内容| av亚洲波多野结衣白嫩水多波 | 求毛片网址| 国产成人精品一区二| AV解说| 亚洲AV女人18毛片水真多| 无码免费一区| 激情一级片| 亚洲二区在线| 一区二区三区在线看| 中文字幕36页| 怡红院男人天堂| 国产av电影网| 亚洲色图成人网| 大香蕉精品欧美色综合2025| 北条麻妃JUX-869无码播放| 在线免费观看中文字幕| 狠狠香蕉| av免费网址| 午夜免费性爱视频| 无码成人精品| 亚洲福利| 免费看黄的网站在线观看| 免费看操逼| 抽插影院| 99视频免费在线观看| 免费黄色a片| 成人视频一区二区| 国产思思99re99在线观看| 国精品伦一区一区三区有限公司| 淫色网址| 99无码国产成人精品| 一区二区精品视频| a视频| 欧美精品18videosex性欧美| 青娱乐国产视频| 九九九九AV| 国产精品911| 欧美熟妇性爱视频| 影音先锋国产精品| 日韩无码黄色电影| 超碰在线人人操| 草久在线观看| 国产成人99久久亚洲综合精品| 天天艹av| 日本中文在线| 91最新地址| 嘿咻无码推油| 亚洲乱伦电影| 亚洲wwwwww| 欧美成人精品欧美一级私黄| 伊人99在线| 亚洲无码在线播放| 日韩小电影在线观看| 内射在线| 亚洲Av秘无码一区二区| 狠狠操综合网| 国产精品一区二区在线观看| 高清欧美日韩第一摸| 久久久成人片| gogogo免费高清在线偷拍 | 蜜桃免费网站| 国产成人精品一区二区| 中文字幕在线电影| 久久成人18免费网站波多野结衣 | 亚洲都市激情| 久久免费小视频| 特级特黄AAAA免费看| 日韩高清无码一区| 91国产乱伦| 大地8免费高清视频观看大全 | A片在线视频| 一区二区三级片| 欧美一级在线观看| 久草大| 国产一级操逼片| 九九九免费视频| 一区二区入口| www.伊人网| 西西特级无码444www| 欧美日韩在线视频一区| 99视频精品视频| 337p大胆色噜噜噜噜噜| 日本黄色A片免费看| 人妻在线你懂的| 特级A级毛片| 国产无码电影网| 69视频网站| 97人人干人人| 人妻人人干| 成人免费观看视频| 亚洲激情欧美| 亚洲国产色婷婷| www.日韩精品| 亚洲免费观看高清完整版在va线 | 强伦轩一区二区三区四区| 欧美一级A片在免费看| 北条麻妃无码视频| 口爆吞精在线| 国产视频999| 精品国产精品国产精品国产网站| 日韩AV在线电影| 毛片操逼视频| 伊人大香蕉网站| 看一级黄色毛片| 久久久久国产视频| 久久五月视频| 黑人毛片91久久久久久| 91操美女视频| 久久久国产精品黄毛片| 自拍偷拍AV| 国产一区二区不卡亚洲涩情| 亚洲中文自拍| 欧美精品久久久久久久多人混战| 国产无码Av| 俺去俺来也在线www色情网| 日韩欧美片| 无码一区二区三区四区五区| 亚洲成人网在线观看| 亚洲天堂无码AV| 男女抽插视频| 中文字幕++中文字幕明步| 丝袜足交视频| 伊人色播| 欧美在线视频a| 噜噜噜网| 欧美色成人免费在线视频| 欧美成人大香蕉| 色五月婷婷基地| 国产三级一区二区| 在线看毛片网站| 国产婷婷久久Av免费高清| 乱伦性爱视频| 一道本无码在线观看| 黄色操逼片| 亚洲成人免费在线视频| 亚洲一级二级| 久久精品国产视频| 国产精品爽爽久久久久| 狠狠干伊人| 想要xx视频| 日韩黄色片在线观看| 国产一级二级三级视频| 免费看欧美日黄片| 久久丁香| 777久久| 日本毛片视频| 亚洲欧美在线免费观看| 久热国产在线| 欧美级黑寡妇毛片app| 三级高清无码视频| 色吧视频| 苍井空亚洲精品AA片在线播放| 亚洲黄色精品| 免费一级做a爱片毛片A片小说| 亚洲av动漫| 国产一a毛一a免费观看| 想要xx视频| 亚洲综合一区二区三区| 激情婷婷在线| 91人妻无码视频| 亚洲日本黄色网址| 高清无码在线免费观看| 久久久国产精品黄毛片| 五月天丁香| 91九九九| 91精品国自产在线观看| 日韩国产中文字幕| 久99| www.久久久久| Av一区二区三区| 久草手机视频在线观看| 美女扣穴| 在线欧美日韩| 另类老妇奶性BBWBBwBBw | 欧美一级欧美三级在线观看| 免看一级a毛片一片成人不卡| 国产成人福利| 成人精品秘久久久按摩下载| 少妇搡BBBB搡BBB搡18禁| 2024无码| 黄色视频大全免费看| 在线成年人视频| 大香蕉啪啪啪啪| 日本三级片中文字幕| 天天日穴| 97香蕉久久夜色精品国产| 日逼高清视频| 亚洲色一| 国内自拍欧美| 日爽夜爽| 色综合婷婷| 豆花视频久久| 蜜桃视频网址| 青青草成人网站| 99Re66精品免费视频| 91麻豆香蕉| jk在线观看| 国产成人a亚洲精品无码| 色婷婷在线无码精品秘人口传媒| 91精品国产综合久久久蜜臀主演| 特级毛片WWW| 亚洲高清无码在线播放| 翔田AV无码秘三区| 蜜芽无码| 有码在线| 在线观看黄色片| 影音先锋一区| 中文字幕人妻精品一区| 91丨熟女露脸| jizz在线视频| TheAV精尽人亡av| 日韩欧美黄色电影| 操学生妹| 大香蕉超碰在线| 免费黄色视频大全| 国产高清无码视频在线观看| 男女日逼| 青榴视频免费观看| 日韩精品无码av| 黄色av网| 国产视频999| 亚洲.欧美.丝袜.中文.综合| 免费一级a| 欧美精品综合| 韩国色情中文字幕| 2020人妻中文字幕| 国产色拍| 亚洲激情片| 天天艹夜夜艹| 免费国产视频| 婷婷五月在线播放| 天天干天天日天天干天天日| 成人网大香蕉| 欧美性爱视频在线观看| 安徽妇女BBBWBBBwm| 男人天堂AV片| 操逼手机视频| 黑人一区二区| 日韩精品成人无码免费| 爱爱动态图| 国产成人精品视频免费看| 影音先锋91| 日本高清视频免费观看| 国产成人精品电影| 国产色片| 在线播放毛片| 国产日韩一区二区三区| 天天插天天射| 无码激情| 夜夜操天天| 国产一a毛一a免费观看| 91成人一区二区三区| 少妇精品无码一区二区免费视频| 国产成人精品片| 停停五月天| 欧美日韩综合| 洞av| 中国精品77777777| 国产9熟妇视频网站| 青青草无码成人天堂免费| 久久久久亚洲AV成人片| 丁香婷婷五月基地| 婷婷五月六月丁香| www.色老板| 3D精品啪啪一区二区三区| 99精品视频16在线免费观看| 小黄片免费| 久久香蕉综合在线| 久久亚洲精品视频| 无码人妻精品一区二区三区99仓| 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 久操国产| 特级西西| 狠狠干b| 黄片高清| 中日韩精品A片中文字幕| 骚逼无码| 黄片视频免费在线观看| 成年人免费黄色视频| 亚洲自慰| 亚洲性网| 国产黄色电影在线| jizzjizz欧美| 久久久久国产| 韩国gogogo高清在线完整版| 免费无码婬片AAAA片直播| 少妇精品无码一区二区免费视频| 99热激情在线| 99热99在线| 欧美日本激情| 青青草公开视频| 少妇搡BBBB搡BBB搡澳门| 国产欧美精品AAAAAA片| 国产精品免费人成人网站酒店| 看毛片网站| 久久另类TS人妖一区二区免费| 欧美日韩在线视频观看| 欧美五月在线网址| 青草视频网| 国产一区二区av| 亚洲区在线播放| 色婷婷一级A片AAA毛片| 女人的天堂AAA| 狠狠欧美| 黄色免费网站| 99久久精品国产一区二区三区| 中文字幕亚洲在线| 青青草在线免费视频| 色操人 | 爱爱亚洲| 日朝无码| 久久婷婷网站| 操操影院| 欧美三级片网| 亚洲乱码国产乱码精品天美传媒| 最近日本中文字幕中文翻译歌词| 亚洲黄片免费观看| 午夜丁香婷婷| 手机免费AV| 国产—级a毛—a毛免费视频| 国内精品久久久久| 亚洲成人性爱在线| 一二三区免费视频| 99在线观看| 青青操视频在线| 高清无码电影| 欧美一区二区三区四| 91久久久久久| 伊人久久久久久久久久久| 色婷婷视频在线播放| 91网站在线免费观看| 国产成人AV在线播放| 国产高清精品在线| 中文字幕AV播放| 先锋av资源在线| 免费AV大全| 中文字幕日韩有码| 九九热在线视频| 强伦轩一区二区三区在线观看| 久久三级电影| 成人aV无码精品国产一区二区 | 日韩在线视频免费观看| 亚洲A片一区二区三区电影网 | 青草香蕉视频| 97成人在线| 亚洲深夜福利| 久久久999精品日韩一区二区| 色婷婷播放| 中文字幕东京热加勒比| 无码窝在线观看| 青青草在线观看免费| 欧美性猛交XXXX乱大交3| 国产免费av网站| 神马午夜福利| 国产一级片在线| 91久久久久久久久久久| 91绿帽人妻-ThePorn| 亚洲AV图片| 亚洲综合伊人| 91久久久久国产一区二区| 欧美日韩综合| 中文字幕第5页| 撸一撸在线观看| 亚洲污网| 在线看黄网站| 日韩中文字幕视频在线观看 | 91成人在线免费视频| 日产精品久久久| 日日爽夜夜爽| 初尝人妻滑进去了莹莹视频 | 婷婷激情四射| 91亚洲精品在线观看| 狠狠操狠狠插| 亚洲激情网站| 超碰操| 婷婷日逼| 在线视频中文字幕| 欧美性爱xxxx| 亚洲天堂无码av| 国产777| 九色PORNY蝌蚪视频| 亚洲影音先锋在线| 92午夜福利天堂视频2019| 欧美一級黃色A片免費看| 亚洲成年人在线| 人妻丝袜中出北条麻妃| 亚洲一区二区三| 成人高清无码在线| 免费性网| 91无码人妻传媒tv| 亚洲区成人777777精品| 亚洲天堂一| 大鸡巴午夜爽视频电影| 一级欧美视频| 欧美性爱在线网站| 亚洲精品无码在线观看| 99热91| 中文字幕超清在线观看| 日韩AV免费在线播放| 色哥网在线一区| 无码人妻一区二区三区线花季传件 | 日韩欧美片| www.中文字幕| 青娱乐99| 国产成人a亚洲精品| 超碰人人妻| 91丨PORN首页| 日本不卡一区二区三区四区 | 爆乳尤物一区二区三区| 国产精品无码在线播放| 天天操人人操| 久久久XXX| 亚洲色图偷拍| 欧美精品在线视频| 大地影院资源官网| 免费啪啪网| 国产精品人妻无码久久久郑州天气网| 成人国产精品秘欧美高清| 日本成人视频在线免费播放| 久久精品视频在线观看| 欧美中出| 超碰人人爽| 起碰视频| 亚洲一级免费免费在线观看| 亚洲AV无码国产精品| 中文字幕乱视频| 超碰最新在线| 亚洲秘一区二区三区-精品亚洲二区-| 四川美人搡BBw搡BBw| 欧美成人手机在线观看| 亚洲va欧美ⅴa在线| 高清无码免费在线观看| 国产女人18毛片精品18水| 午夜h片| 国产精品黄视频| 三级乱伦86丝袜无码| 69视频网| 日韩综合另类| 性爱av天堂| 色婷婷播放| 亚洲国产精品尤物yw在线观看| 狠狠操一区| 日韩中文字幕在线| 久久精品免费观看| 国产精视频| 亚洲人妻一区二区| 91在线无码精品秘入口男同| 天堂av在线免费观看| 免费无码婬片aaaa| 免费操逼网址| 热99精品| 69式荫蒂被添全过程频| 伊人77| 亚洲av免费在线| 婷婷五月激情小说| 亚洲福利在线观看| 99在线视频免费观看| 亚洲精品成AV人片天堂无码 | 色五月AV| 国产在线播放av| 色五月婷婷五月天激情| 亚洲www| 免费看一级无码成人片| AV黄色在线观看| 成人免费视频国产在线观看| 人妻丰满精品一区二区| 欧美日韩AV| 北条麻妃无码在线| 五月天婷婷视频| 激情深爱| 日韩精品免费无码视频| 日韩AV电影网站| 日韩精品免费一区二区在线观看| 亚洲激情网址| 99热在线免费观看| 人人射人人| 最新av| 亚l洲视频在线观看| 尤物视频在线观看视频| 啪啪视频m3u8| 国产AV一区二区三区四区五区 | 操逼视频在线免费观看| 激情综合五月| 激情五月婷婷丁香| 久久伊思人在| 91久久人澡人妻人人澡人人爽| 国产免费激情视频| 人妻被午夜福利AV| 在线无码高清| 午夜看片| 最新国产在线| 亚洲女人在线| а中文在线天堂精品| 国产91无码精品秘入口| 国产成人内射| 欧洲肥胖BBBBBBBBBB| 久草视频在线播放| 天天干夜夜骑| 超碰人人操人人| 久久99久久99精品免视看婷婷 | 婷婷五月天在线播放| 国产成人在线免费| 亚洲熟女av中文字幕| 日韩AV中文字幕在线播放| 91麻豆国产福利在线观看| 日韩免费在线观看| 91人妻一区二区| 国产黄色在线观看| 日本在线免费观看| 99精品视频在线播放免费| 撸一撸在线| 三级免费| 五月婷婷六月丁香综合| 亚洲色热| 老司机一区二区| 91在线视频免费播放| 亚洲国产精品18久久久久久| 密臀福利导航| 国产欧美综合在线三区| www.中文字幕| yw在线观看| 免费A片在线观看| 婷婷网址| 人妻FrXXeeXXee护士| 亚洲欧洲成人在线| 国产精品无码av| 五月婷婷丁香在线| 狠狠操免费视频| 天天中文字幕| 蜜桃久久av一区| 夜夜骑天天| 亚洲国产成人视频| 久久成人影音先锋| 美国熟妇| 开心色播五月天| 国产AV日韩AⅤ亚洲AV中文 | 大香蕉久在线| 香蕉成人网站在线观看| 粉嫩小泬BBBB免费看| 亚洲AV成人无码| 中文在线字幕免费观| 青娱乐国产视频| 波多野结衣成人在线| 大香蕉777| 精品国产乱码久久久久夜深人妻| 久久久久久无码精品亚洲日韩麻豆 | 久久这里有精品| 日本久久婷婷| 亚洲最新AV网站| 亚洲精品久久久久久久久蜜桃| 午夜蜜桃人妻一区二区| 黄色av免费| 日韩欧美视频| AV青青草原| 麻豆一区在线| 国产精品久久久久久久久久久久久| 国产精品久久久久久亚洲影视| 国产成人精品免费视频| 午夜福利啪啪啪| 91丨PORN首页| 久久艹久久| 中文字幕一区二区6页| 精品人妻一区二区三区鲁大师| 97操逼网| 国产成人自拍偷拍视频| 亚洲色久悠悠| 日韩人妻无码一区| 午夜福利100| 人人爱人人干人人操| 久久精品视频一区| 大鸡巴操骚逼视频| 91香蕉视频| 东京热观看| 欧美日韩国产性爱| 蜜桃传媒一区二区亚洲| 午夜操逼| 2026AV天堂网| 亚洲一级免费视频| 丰滿老婦BBwBBwBBw| 亚洲wwwwww| 人人操人人摸人人爽| 蜜臀精品| 国产AV无码区亚洲| 五月天婷婷综合网| 亚洲狼人天堂| 先锋影音资源站| 91AV免费| 日韩婬乱片A片AAA真人视频| 国产美女操逼| 精品人妻人人操| 天天看片天天爽| 天天天天天天干| 91视频在线免费观看app| 国产一级麻豆| 国产裸体美女网站| 日本欧美成人片AAAA| 亚州天堂网| 色网在线| 中文免费高清在线| 麻豆自拍偷拍| 懂色午夜福利一区二区三区| 老妇槡BBBB| 亚洲AV动漫| 国产A级成人婬片1976| 国产黄色视频免费在线观看| 久久爱成人| 日韩在线小电影| 国产精品视频网站| 老女人操逼视频| 日爽夜爽| 91成人免费| 亚洲色成人中文字幕在线| 成年人视频在线免费观看| 蜜桃黄片AV在线观看| 97视频精品| 午夜成人在线| 91香蕉国产成人App| 九九国产| 久久一做爱| 中文字幕免费MV第一季歌词| 日韩黄色在线观看| 亚洲少妇性爱视频| 人人摸人人色| 伊人三级| 一区二区三区四区视频在线| 欧美五月在线网址| 91麻豆精品无码| 久久丁香| 97国产精品手机| 久久99久久99久久99国内少妇精品 | 视频一区二区三区免费| 西西4444www无码精品| 99国产热| 九九热毛片在线观看| 91久久电影| a在线观看| 青青草成人在线观看| 国产AV影视| 无码一区视频| 77777色| 黄色动漫在线免费观看| 欧美一区二区三区视频| 在线无码中文字幕| 99热国产精品| 国产精品美女久久久久AV爽| 国产一区二区精品| 激情爱爱网| 亚洲综合伊人| 国产理论片在线观看| 国产AV18岁| 五月天激情导航| 欧美一级片免费看| 国产成人一级片| 一区二区三区麻豆| 日韩无码首页| 深爱激情综合网| 豆花视频成人| 嫩BBB槡BBBB槡BBBB免费视频| 69AV在线| 上海熟妇搡BBBB搡BBBB| 就去色色五月丁香婷婷久久久 | 自慰一区二区| 成人在线视频网站| 91精彩视频在线观看| 俺去也| 亚洲在线高清| 成人国产精品秘欧美高清| 天天干天天色天天日| 无码不卡在线播放| 日韩操b| 久久婷婷婬片A片AAA| 日韩视频一级| AV在线免费观看网址| 国产精品v欧美精品v日韩精品| 老熟女痒到不行-ThePorn| 一区二区三区无码区| 亚洲综合免费观看高清完整版在线| 欧美在线成人视频| 高清无码网| 91日韩欧美| 国产精品秘久久久久久| 国产欧美毛片| 无码一区二区三区四| 婷婷成人视频| 丝瓜视频污APP| av无码电影| 91久久久久久久久久久久18| h片在线免费观看| 国产精品93333333| 中文亚洲视频| 日韩在线| 天天插天天狠天天透| 操逼激情视频| 日本不卡视频| 亚洲AV无码乱码国产精品蜜芽 | 自拍偷拍影音先锋| 国产亚洲综合无码| 日韩人妻无码专区| 国产视频第一页| 日产精品久久久| 伊人午夜| 九九操逼| 成人免费乱码大片a毛片蜜芽| AV性爱社区| 亚洲无码视频一区| 日韩操屄视频| 国产乱码一区二区三区| 操逼在线观看| 国产无码Av| 91精品啪| 久久成人一区| 99热这里只有精品9| 日韩AV免费电影| 97成人在线视频| 大香蕉伊人丁香五月| 操逼视频在线免费观看| 精品无码一区二区三区的天堂| 国产激情网址| 亚洲无码AV麻豆| 熟女人妻人妻HD| 欧美A片在线| 国产精品人妻无码一区牛牛影视| 国产亚洲视频完整在线观看| 五月丁香成人网| 高清无码视频18| 亚洲高清无码视频在线播放| 日韩精品一区二区三区四在线播放 | 亚洲精品免费观看| 青娱乐成人在线| 人人操人人妻人人看| 日韩免费在线观看一区入口| 成人激情在线| 婷婷久久亚洲| 色综合中文字幕| 色老板网址| 国产精品7777| 欧美XXXXBBBB| AV性爱社区| 操逼一区| 九九大香蕉| 免费一级黄色视频| 热热AV| 看黄片网站| 久久久久久久久久成人永久免费视频| 欧美性爱在线网站| 色色免费黄色视频| 亚洲资源在线观看| 少妇bbw搡bbbb搡bbbb| 欧美老女人性爱视频| 91在线一区| 五月天视频网| 五月天毛片| 人人操人人射| 午夜福利片| 午夜无码精品一区二区三区99午| 一区二区三区免费在线观看| 亚洲A∨无码无在线观看| 国产—级a毛—a毛免费视频| 三级片在线观看网站| 黑人操逼| 九九偷拍视频| 国产逼| 黄色视频在线观看国产| 你懂的网站在线观看| 成年人免费视频在线观看| 欧美日韩网| 中文字幕在线观看网| 色哟哟视频在线观看| 91日综合欧美| 色情欧美一级A片| 影音先锋亚洲无码| 免费观看av| 人人看人人做| 国产一级片在线播放| 熟女视频91| 激情深爱五月| 97人人精品| 人人看人人色| 欧美国产一区二区| 色婷婷久久综合| 亚洲欧美另类色图| 狠狠2021| 逼逼AV| 成人在线日韩| 欧美最猛黑A片黑人猛交蜜桃视频 色噜噜狠狠一区二区三区300部 | 婷婷久久综合| 51无码| www.四虎成人网站| 北条麻妃视频在线观看| 日韩黄色电影网站| 免费在线观看黄色视频网站| 中文字幕二区| 国产高清无码在线| 免费一级电影|