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

抖音 iOS 推薦 Feed 容器化總結(jié)

原創(chuàng) 精選
移動(dòng)開發(fā)
針對(duì) Feed 容器內(nèi)部多場景、多業(yè)務(wù)耦合導(dǎo)致整體維護(hù)困難,新業(yè)務(wù)接入成本高的問題,首先按照?qǐng)鼍啊I(yè)務(wù)和功能維護(hù)進(jìn)行拆分梳理。在拆分完成后為了方便各個(gè)業(yè)務(wù)進(jìn)行維護(hù),設(shè)計(jì)了 ControlerKit 工具實(shí)現(xiàn)了生命周期方法的分發(fā),并且通過 Context 進(jìn)行狀態(tài)管理,實(shí)現(xiàn)了各個(gè)業(yè)務(wù)間的通信和狀態(tài)維護(hù)。
作者|王展、張宇、羅群鋒、谷春暉

背景

抖音 Feed 容器在推薦、關(guān)注、同城、朋友等多個(gè)場景中使用,每個(gè)場景都有自身的邏輯和業(yè)務(wù),最終匯總在 FeedViewController 中,隨著業(yè)務(wù)的迭代,代碼越來越臃腫,面臨如下的問題:

  • 容器類(FeedViewController) 有 10000+行,還有十多個(gè)業(yè)務(wù)分類,整體的理解和維護(hù)成本高
  • 容器類 框架和業(yè)務(wù)邊界不清晰,框架代碼的修改不收斂和不規(guī)范,業(yè)務(wù)改動(dòng)可能導(dǎo)致線上問題,如數(shù)據(jù)層不收斂導(dǎo)致的問題:自動(dòng)刪除導(dǎo)致一次滑動(dòng)多個(gè)視頻或者自動(dòng)跳轉(zhuǎn)到第一個(gè)視頻等問題
  • 容器類 承擔(dān)了推薦、關(guān)注、朋友三個(gè)大場景,細(xì)節(jié)的業(yè)務(wù)邏輯差異較多,目前多業(yè)務(wù)代碼耦合在一起,增加新功能時(shí)需要考慮其他業(yè)務(wù)方,容易引入問題,開發(fā)和測試效率低
  • 內(nèi)流容器和外流容器,形態(tài)相似但是代碼分離,主體代碼重復(fù),新增功能時(shí)需要在兩個(gè)類中做重復(fù)開發(fā),如:視頻預(yù)加載優(yōu)化等,開發(fā)和維護(hù)成本高
  • 核心功能的監(jiān)控和代碼防劣化的體系不完善

Feed 容器多場景下承載業(yè)務(wù)

Feed 容器承載了基礎(chǔ)功能、直播、登錄、登出、性能監(jiān)控、預(yù)加載等多個(gè)功能。

由于之前沒有做好管控,導(dǎo)致容器中業(yè)務(wù)相互耦合嚴(yán)重,業(yè)務(wù)邊界不清晰,開發(fā)過程中稍有不慎,就會(huì)對(duì)其他業(yè)務(wù)造成影響。

圖片

而且隨著業(yè)務(wù)迭代,逐漸呈現(xiàn)劣化趨勢,尤其是對(duì)于新業(yè)務(wù)接入,面對(duì)負(fù)責(zé)的代碼無從下手。

業(yè)務(wù)迭代效率低

由于代碼都在容器類中直接修改,一個(gè)版本經(jīng)常會(huì)有多個(gè)業(yè)務(wù)在容器中進(jìn)行修改導(dǎo)致沖突的情況,此時(shí)就需要多方進(jìn)行 review,保證改動(dòng)不出問題,往往還要平臺(tái)業(yè)務(wù)的同學(xué)進(jìn)行支持,業(yè)務(wù)的整體迭代效率比較低。

圖片

防劣化&監(jiān)控缺失

業(yè)務(wù)耦合,對(duì)代碼改動(dòng)沒有監(jiān)控,導(dǎo)致 FeedViewController 越來越膨脹。因?yàn)闆]有合理架構(gòu)導(dǎo)致無法做拆分,代碼劣化越來越嚴(yán)重,而且基于現(xiàn)狀無法進(jìn)行防劣化。

目標(biāo)方案

為了解決上述問題,首先設(shè)定好目標(biāo),然后根據(jù)目標(biāo)提出解決方案,最終落地實(shí)現(xiàn),驗(yàn)證目標(biāo)是否達(dá)成。

目標(biāo)

  • 架構(gòu)分層,明確每層職責(zé),容器和業(yè)務(wù)解耦,多業(yè)務(wù)之間解耦,做到容器和業(yè)務(wù)各自閉環(huán);
  • 業(yè)務(wù)組件可插拔,不同場景支持靈活的組合和擴(kuò)展業(yè)務(wù)組件;
  • 搭建監(jiān)控體系,實(shí)現(xiàn)穩(wěn)定性、性能、問題定位,建立看板,實(shí)時(shí)了解各項(xiàng)指標(biāo);
  • 防劣化,容器和業(yè)務(wù)分倉隔離,收斂維護(hù)人員;

思路

根據(jù)上述的目標(biāo),從下面四點(diǎn)進(jìn)行思考和設(shè)計(jì):

  • 明確業(yè)務(wù)開發(fā)痛點(diǎn),多業(yè)務(wù)合作開發(fā)效率低、設(shè)計(jì)不合理模塊使用成本高等;
  • 自上而下設(shè)計(jì),保證整體業(yè)務(wù)架構(gòu)設(shè)計(jì)的合理性,明確優(yōu)化方向;
  • 分層開發(fā)和上線驗(yàn)證,降低上線風(fēng)險(xiǎn)和全量成本;
  • 架構(gòu)防劣化,收益可衡量;

方案

針對(duì) Feed 容器內(nèi)部多場景、多業(yè)務(wù)耦合導(dǎo)致整體維護(hù)困難,新業(yè)務(wù)接入成本高的問題,首先按照?qǐng)鼍啊I(yè)務(wù)和功能維護(hù)進(jìn)行拆分梳理。在拆分完成后為了方便各個(gè)業(yè)務(wù)進(jìn)行維護(hù),設(shè)計(jì)了 ControlerKit 工具實(shí)現(xiàn)了生命周期方法的分發(fā),并且通過 Context 進(jìn)行狀態(tài)管理,實(shí)現(xiàn)了各個(gè)業(yè)務(wù)間的通信和狀態(tài)維護(hù)。

整體架構(gòu)

圖片

基礎(chǔ)容器

Feed 基礎(chǔ)容器,采用組件化框架,支持基礎(chǔ)組件和業(yè)務(wù)組件的動(dòng)態(tài)組合和擴(kuò)展,由業(yè)務(wù)無關(guān)、統(tǒng)一的列表形態(tài)組成,通過數(shù)據(jù)驅(qū)動(dòng)頁面展現(xiàn)。同時(shí)對(duì)外暴露生命周期事件,方便組件進(jìn)行監(jiān)聽。其中基礎(chǔ)容器由平臺(tái)方進(jìn)行統(tǒng)一維護(hù),并提供了完善的監(jiān)控體系,方便進(jìn)行問題的定位和追查。

基礎(chǔ)組件

Feed 容器的基礎(chǔ)組件部分,采用的方式是平臺(tái)方統(tǒng)一進(jìn)行維護(hù)。目前的基礎(chǔ)組件,主要包括播放控制、播放策略優(yōu)化、列表預(yù)加載以及頁面管理等。

其中,全屏 Feed 相關(guān)的基礎(chǔ)組件,為多業(yè)務(wù)共用,具備可復(fù)用、可擴(kuò)展等優(yōu)勢。

業(yè)務(wù)組件

業(yè)務(wù)組件是和業(yè)務(wù)強(qiáng)相關(guān)的組件,業(yè)務(wù)方可以根據(jù)自身的需要進(jìn)行靈活定制,組件本身可插拔,由各業(yè)務(wù)方進(jìn)行維護(hù)。

應(yīng)用場景

業(yè)務(wù)方基于 Feed 容器,組合業(yè)務(wù)組件和基礎(chǔ)組件構(gòu)建的頁面,在構(gòu)造過程中可以基于配置文件實(shí)現(xiàn)容器的定制,比如推薦和關(guān)注。

容器化工具

多個(gè)業(yè)務(wù)耦合在同一個(gè)容器中,導(dǎo)致容器類越來越臃腫,一方面造成各方同時(shí)維護(hù)越來越困難,另一方面對(duì)于新業(yè)務(wù)和新同學(xué)接入十分不友好,需要花費(fèi)很多時(shí)間熟悉上下文以避免改動(dòng)對(duì)其他業(yè)務(wù)造成影響。

為此設(shè)計(jì)了 ControllerKit 庫,該庫實(shí)現(xiàn)了復(fù)雜頁面的分發(fā),解決 ViewController 臃腫問題,規(guī)范代碼拆分標(biāo)準(zhǔn),提供分發(fā)方法的能力。各個(gè)接入方按照規(guī)則注冊(cè)后,實(shí)現(xiàn)自己關(guān)心的生命周期方法,并在方法中實(shí)現(xiàn)對(duì)應(yīng)的邏輯即可。

圖片

ContainerViewController

ContainerViewController 是容器 ViewController,實(shí)現(xiàn)了 ContainerProtocol,保存了上下文環(huán)境,負(fù)責(zé)了各個(gè)生命周期方法的分發(fā)。

ContainerProtocol

聲明了容器對(duì)外提供的屬性和方法,方便各個(gè) SubController 進(jìn)行訪問。

ControllerProtocol

聲明了基礎(chǔ)的聲明周期和共有的方法。

Controller

Controller 是將 ViewController 中的代碼拆分出來的子模塊,可以接收分發(fā)出來的 viewDidLoad、viewWillAppear 等生命周期及自定義方法調(diào)用,還可以向 ViewController 中添加子 View。

ControllerManager

ControllerManager 負(fù)責(zé) Controller 的注冊(cè)、管理、方法分發(fā)。通過 classNameArray 返回 Controller 的字符串類名數(shù)組即可,可以支持 Controller 在其他倉庫的能力

Manager 需要聲明分發(fā)的 Controller 協(xié)議,只需要聲明,不需要實(shí)現(xiàn),Manager 內(nèi)部會(huì)通過消息轉(zhuǎn)發(fā)機(jī)制統(tǒng)一分發(fā)。

各角色之間的關(guān)系

ContainerViewController 實(shí)現(xiàn)了 ContainerProtocol,并持有 ControllerManager,各個(gè)子 Controller 注冊(cè)到 ControllerManager 中,各個(gè) Controller 可以通過 ContainerProtocol 訪問容器的能力,ControllerManager 通過 ControllerProtocol 里面聲明的方法進(jìn)行分發(fā)。

比如:ContainerViewController 初始化后調(diào)用 viewDidLoad 時(shí),會(huì)通過 ControllerManager 依次分發(fā)到實(shí)現(xiàn)該方法的 controller 中,各個(gè) Controller 在自己的 viewDidLoad 方法中實(shí)現(xiàn)自己的邏輯即可。

Controller 優(yōu)先級(jí)

  • 方法分發(fā)優(yōu)先級(jí)按照數(shù)組提供的順序,因此更基礎(chǔ)的 Controller 應(yīng)排在前面
  • 優(yōu)先級(jí)由注冊(cè)順序決定,因此不同方法優(yōu)先級(jí)無法調(diào)整,也不希望有調(diào)整,無法滿足時(shí),通過其他方式實(shí)現(xiàn)

Feed 容器的實(shí)現(xiàn)

根據(jù) ControllerKit 對(duì) Feed 容器的類結(jié)構(gòu)改造如下所示

圖片

  • FeedViewController 作為容器,實(shí)現(xiàn)容器能力,對(duì)外通過 FeedContainerProtocol 被訪問
  • Controller 對(duì)應(yīng)業(yè)務(wù)組件
  • FeedControllerManager 負(fù)責(zé)組件的注冊(cè)、管理和事件的分發(fā)

基于 ControllerKit 的設(shè)計(jì)和實(shí)現(xiàn)

各個(gè)類和協(xié)議的介紹:

FeedContainerProtocol

  • 容器層通過 FeedContainerProtocol 對(duì)外提供能力
  • 避免業(yè)務(wù)方直接訪問和修改容器類
  • 該協(xié)議提供了業(yè)務(wù)層需要的各種能力和接口
  • 由平臺(tái)方進(jìn)行維護(hù)

FeedControllerProtocol

  • 業(yè)務(wù)層協(xié)議通過 FeedControllerProtocol 聲明
  • 定義了各個(gè)生命周期相關(guān)的方法,被各個(gè)業(yè)務(wù) controller 實(shí)現(xiàn)
  • 各個(gè)實(shí)現(xiàn)業(yè)務(wù)只需要在對(duì)應(yīng)的生命周期方法中增加自身的邏輯即可
  • 被注入的 controller 會(huì)在相應(yīng)的時(shí)機(jī)被調(diào)用到
  • 業(yè)務(wù)自閉環(huán)

Context 與 ContainerProtocol 的定位和區(qū)別

  • FeedContainerProtocol 用來給 controller 提供 FeedViewController 實(shí)現(xiàn)的能力
  • FeedContext 中存放 Controller 共用的狀態(tài)
  • 兩個(gè)都能實(shí)現(xiàn)通信,但 context 更偏重于狀態(tài),而 ContainerProtocol 更偏重于能力,比如頁面滾動(dòng)、數(shù)據(jù)刷新

業(yè)務(wù)組件定義

  • 定義業(yè)務(wù) Controller 類
  • 實(shí)現(xiàn) FeedControllerProtocol 協(xié)議
  • 在對(duì)應(yīng)的生命周期方法中實(shí)現(xiàn)對(duì)應(yīng)的業(yè)務(wù)邏輯
  • 若 FeedControllerProtocol 不滿足情況時(shí)根據(jù)之前說明方式在協(xié)議中增加新的生命周期方法,同時(shí)同步增加到 FeedContainerProtocol ,以便分發(fā)

重構(gòu)后業(yè)務(wù)迭代方式

圖片

  • 框架由平臺(tái)業(yè)務(wù)架構(gòu)方維護(hù)
  • 其他業(yè)務(wù)的框架擴(kuò)展需要提交到架構(gòu)方,由架構(gòu)方開發(fā)
  • 其他業(yè)務(wù)提交的方案和修改,交由架構(gòu)方 review
  • 業(yè)務(wù)方的代碼,業(yè)務(wù)方自閉環(huán)

防劣化建設(shè)

為了防止隨著業(yè)務(wù)的迭代,F(xiàn)eed 容器逐漸劣化,需要進(jìn)行防劣化建設(shè)。首先進(jìn)行框架和業(yè)務(wù)分倉:

  • 代碼隔離,修改權(quán)限收斂;
  • 框架部分,線下做 Pipeline 準(zhǔn)入,Lint 檢查是否符合容器規(guī)則; 業(yè)務(wù)方修改容器代碼,review 通過后才能合入

圖片

新方案優(yōu)勢

  • 業(yè)務(wù)解耦,明確了業(yè)務(wù)和容器的職責(zé),邊界清晰
  • 降低 FeedViewController 維護(hù)成本
  • 減少新業(yè)務(wù)接入成本
  • 方便做防劣化

接入示例

以下以興趣選擇和業(yè)務(wù)為例,介紹新老業(yè)務(wù)的接入。

新功能接入 - 興趣選擇

興趣選擇是新的類型的卡片,需要進(jìn)行卡片注冊(cè)并處理相關(guān)邏輯。

圖片

歷史方案

FeedViewController 直接進(jìn)行修改,包括如下內(nèi)容:

  • 增加狀態(tài)管理屬性
  • 需要在 tableview delegate 和 scroll 滾動(dòng)等多個(gè)方法中增加相應(yīng)的處理邏輯
  • 處理注冊(cè)卡片邏輯

新方案

抽取單獨(dú)的業(yè)務(wù) Controller

  • 在生命周期方法中處理興趣選擇相關(guān)邏輯
  • 業(yè)務(wù)相關(guān)的屬性在 Controller 中聲明和維護(hù)

Controller 注冊(cè)到 ControllerManager

在對(duì)應(yīng)的 Controller 中進(jìn)行自己的業(yè)務(wù)處理即可,不需要了解容器本身的其他業(yè)務(wù)邏輯

存量功能拆分 - Feed 監(jiān)控

Feed 監(jiān)控功能在 FeedTableVC 中處理了很多業(yè)務(wù),而且這些邏輯也其他業(yè)務(wù)存在著耦合。

  • 網(wǎng)絡(luò)請(qǐng)求監(jiān)控和數(shù)據(jù)處理
  • 頁面滾動(dòng)
  • 播放處理
  • ...

圖片

采用新方案進(jìn)行拆分

首先創(chuàng)建 FeedMonitorController,增加業(yè)務(wù)相關(guān)的屬性、生命周期方法中實(shí)現(xiàn)對(duì)應(yīng)的邏輯,之后抽取單獨(dú)的業(yè)務(wù) controller 在生命周期方法中處理熟人相關(guān)邏輯。同時(shí)注冊(cè)到 controllerManager 中,并設(shè)置 AB、原有代碼判斷 AB。上線驗(yàn)證,全量后刪除容器老代碼。之后業(yè)務(wù)自閉環(huán),再進(jìn)行迭代時(shí)直接在 FeedMonitorControlle r 內(nèi)容修改即可。

圖片

當(dāng)前進(jìn)展&后續(xù)規(guī)劃

規(guī)劃和節(jié)奏

圖片

1

2

3

4

梳理現(xiàn)狀;

重構(gòu)方案設(shè)計(jì)和評(píng)審;
組件化框架設(shè)計(jì)和開發(fā);
Feed 能力的設(shè)計(jì)和定義

新增功能基于新組件開發(fā);
存量業(yè)務(wù)組件拆分和驗(yàn)證

業(yè)務(wù)接口合理化:Feed 容器對(duì)外暴露能力,業(yè)務(wù)調(diào)用;
基礎(chǔ)能力接口合理化:Feed 容器暴露給組件的能力,播控、數(shù)據(jù)操作等

組件化框架橫向應(yīng)用,詳情頁 Feed 等使用新架構(gòu)

重構(gòu)后的收益

  • 業(yè)務(wù)解耦后,容器本身穩(wěn)定,業(yè)務(wù)方各自維護(hù)自身業(yè)務(wù),提高了整體的穩(wěn)定性

老容器

新容器

因?yàn)闃I(yè)務(wù)耦合,需要了解 Feed 的結(jié)構(gòu)和多業(yè)務(wù)的細(xì)節(jié),新同學(xué)熟悉的時(shí)間需要 2 天左右;在實(shí)現(xiàn)過程中,由于多個(gè)業(yè)務(wù)同時(shí)進(jìn)行迭代,相互影響,質(zhì)量無法保障

只需要在自己的業(yè)務(wù) Controller 開發(fā)即可,無需關(guān)心容器的結(jié)構(gòu)以及其他業(yè)務(wù)方,極大的提高了開發(fā)和迭代效率;改動(dòng)不影響其他業(yè)務(wù)線的代碼,保障了代碼的穩(wěn)定性

  • 全量業(yè)務(wù)在業(yè)務(wù)組件中實(shí)現(xiàn)了自閉環(huán)

版本進(jìn)行了映射

版本

新方案 MR

老方案 MR

老方案占比(老 MR/(新 MR+老 MR))

1.7 - 2.0

39

19

32.8%

1.3 - 1.6

31

18

46.15%

0.9 - 1.2

25

13

34.21%

0.5 - 0.8

16

23

58.9%

0.1 - 0.4

12

19

61.2%


責(zé)任編輯:未麗燕 來源: 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)
相關(guān)推薦

2021-06-28 05:19:32

抖音電腦

2024-03-22 11:24:56

MySQLByteHouse

2023-12-30 13:53:58

抖音快手策略

2022-06-06 12:19:08

抖音功耗優(yōu)化Android 應(yīng)用

2019-03-07 15:04:37

抖音快手同城

2022-01-22 07:44:12

抖音PC 版電腦刷抖音

2019-06-21 09:55:10

刷抖美腿App

2020-10-27 09:33:39

抖音印度移動(dòng)應(yīng)用

2020-08-06 10:09:08

抖音木馬安全隱私

2025-07-30 09:36:47

2024-06-13 17:10:16

2020-10-12 19:06:06

微信直播快手

2022-07-20 22:55:39

直播OOM抖動(dòng)

2024-03-12 17:13:51

2024-12-25 15:42:39

視頻數(shù)據(jù)實(shí)時(shí)直播

2024-04-10 07:04:17

2022-03-18 15:04:57

APP算法算法關(guān)閉鍵

2021-10-21 10:03:09

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产毛片在线看| 国产黄色免费观看| 国产伦精品一区二区三区免费优势| 亚洲高清中文字幕| 欧美在线一区二区三区四区| 成人黄色免费网| 99精品小视频| 亚洲国产美女久久久久| 校园春色 亚洲色图| 日本无删减在线| 91麻豆精品视频| 成人a在线视频| 色婷婷在线观看视频| 欧美在线观看视频一区| 亚洲成人亚洲激情| 手机免费av片| 芒果视频成人app| 夜夜揉揉日日人人青青一国产精品| 久久久久成人精品免费播放动漫| 一区二区三区午夜| 天堂午夜影视日韩欧美一区二区| 久久婷婷国产麻豆91天堂| 精品夜夜澡人妻无码av| 成人动漫视频在线观看| 欧美在线高清视频| 青青草精品视频在线| 午夜视频在线观看网站| www激情久久| 国产麻豆乱码精品一区二区三区| 一个人看的www日本高清视频| 美女91精品| 久久久久久久电影一区| 99精品中文字幕| 国内精品视频在线观看 | 无码一区二区三区| 亚洲国产二区| 欧美激情精品久久久| 很污很黄的网站| 日韩久久综合| 在线看福利67194| 性欧美丰满熟妇xxxx性仙踪林| 日本少妇精品亚洲第一区| 欧美日韩一卡二卡三卡| 成人3d动漫一区二区三区| 国产社区精品视频| 亚洲成av人片在线观看无码| 国产91视频一区| 91福利国产在线观看菠萝蜜| 国产精品国产自产拍高清av | 国产精品7m凸凹视频分类| 亚洲一区二区福利| 最近中文字幕在线mv视频在线| 首页亚洲中字| 亚洲女人被黑人巨大进入| 女同性恋一区二区三区| 国产成人aa在线观看网站站| 精品国产成人在线影院 | 91亚洲资源网| 久久影院理伦片| 日韩一二三四| 久久综合久久综合久久综合| 欧美二区在线| 国产精品影院在线| 国产精品午夜在线| 在线一区高清| 日本在线观看高清完整版| 亚洲免费av高清| 欧美黄网在线观看| 国产高潮在线| 色综合激情五月| 91最新在线观看| 成人综合网站| 欧美一级电影网站| 亚洲av成人片无码| 亚洲三级性片| 日韩最新在线视频| 精国产品一区二区三区a片| 亚洲成人原创| 国产精品久久久久久婷婷天堂| 中文字幕 欧美激情| 精品在线播放午夜| 国产成人一区二区三区免费看| 色一情一乱一区二区三区| 94色蜜桃网一区二区三区| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 青青草原成人在线视频| 中文无码精品一区二区三区| 国产尤物一区二区在线| 国产日韩欧美精品| 成人亚洲性情网站www在线观看| 国产精品灌醉下药二区| 污污污污污污www网站免费| 性爽视频在线| 欧美一区日本一区韩国一区| 亚洲av永久无码精品| 欧州一区二区| 国产69精品久久久久9| 中文字幕一区二区三区四区欧美| 激情五月播播久久久精品| 精品日韩电影| wwwav在线| 欧美日韩在线影院| 午夜天堂在线视频| 天天躁日日躁狠狠躁欧美| 久久久成人精品| 日本三级黄色大片| 激情综合网最新| 欧美欧美一区二区| 怡红院红怡院欧美aⅴ怡春院| 欧美性猛交xxxx富婆| 韩国三级在线播放| 国产一区二区三区四区二区| 九九热r在线视频精品| 波多野结衣在线电影| 高清不卡一区二区| 午夜啪啪免费视频| 粉嫩一区二区三区| 日韩福利视频在线观看| 青青草原国产视频| 久久99久久久久| 欧美精品成人一区二区在线观看| 在线黄色网页| 欧美女孩性生活视频| 不卡一区二区在线观看| 亚洲视频观看| 91九色蝌蚪嫩草| 老司机免费在线视频| 在线观看精品一区| 99久久久无码国产精品性 | 日韩亚洲在线视频| gogo久久日韩裸体艺术| 久久久99免费视频| 中文在线观看av| 国产拍欧美日韩视频二区| 777精品久无码人妻蜜桃| 一区视频网站| 色与欲影视天天看综合网| 国产一区二区三区成人| 日本一区二区成人| 在线观看av日韩| 国产欧美一区| 国产精品久久久精品| 黄色的视频在线免费观看| 欧美性极品少妇精品网站| 美女又爽又黄免费| 国产欧美不卡| 麻豆一区区三区四区产品精品蜜桃| 国产美女情趣调教h一区二区| 欧美一区二区三区日韩视频| 欧美黑人性猛交xxx| 国产精一区二区三区| 国产人妻互换一区二区| 精品一区二区三区中文字幕| 久久99热精品| 欧美一区二区黄片| 亚洲va国产va欧美va观看| 国产草草浮力影院| 免费看的黄色欧美网站| 日韩性感在线| 91精品福利观看| 欧美精品免费播放| 亚洲产国偷v产偷v自拍涩爱| 亚洲综合网站在线观看| 91丝袜在线观看| 老司机亚洲精品| 亚洲一卡二卡三卡四卡无卡网站在线看| 欧美色片在线观看| 久久天天躁夜夜躁狠狠躁2022| av小说天堂网| 午夜伦理一区二区| 真实乱视频国产免费观看| 毛片av中文字幕一区二区| 国产精品夜夜夜爽张柏芝| 日韩在线视频一区二区三区 | 午夜精品成人av| 中文字幕日韩欧美| 国产福利免费视频| 精品久久久久久久久久ntr影视| 天天躁日日躁aaaxxⅹ| 蜜臀久久久99精品久久久久久| 91xxx视频| 久久99精品国产自在现线| 日韩美女av在线免费观看| 日韩精品黄色| 日韩欧美激情一区| 亚洲欧美偷拍视频| 日韩一区在线看| 波多野结衣影院| 麻豆精品国产传媒mv男同 | 免费高清不卡av| 日韩欧美精品免费| 欧美军人男男激情gay| 99国精产品一二二线| 中文字幕资源网在线观看免费 | 欧美视频www| 97国产一区二区| 亚洲精品mv在线观看| 国产精品永久| a级网站在线观看| 国产成人高清| 国产精品久久久久久久久久直播| 老司机2019福利精品视频导航| 久久视频免费在线播放| 女人偷人在线视频| 亚洲精品一区二区三区在线观看| 中文字幕av无码一区二区三区| 亚洲成人你懂的| 亚洲精品卡一卡二| 国产婷婷色一区二区三区四区| 亚洲丝袜在线观看| 免费成人在线影院| 久久久精品在线视频| 黄色欧美日韩| 男人的天堂成人| 欧美色爱综合| 欧美成ee人免费视频| 999国产精品一区| 成人福利在线视频| 成人福利一区二区| 欧美一级免费看| 美洲精品一卡2卡三卡4卡四卡| 中文日韩在线视频| 欧美69xxxxx| 日韩禁在线播放| 日本xxxx人| 日韩精品一区二区三区在线播放| 91一区二区视频| 欧美日韩一级片网站| 丁香社区五月天| 欧美色videos| 国产一级18片视频| 欧美日韩精品国产| 五月婷婷开心网| 亚洲成人免费av| 精品一区二区三区四| 一区二区三区欧美视频| 我要看黄色一级片| 亚洲视频免费在线| h色网站在线观看| 日韩美女精品在线| 国产大片免费看| 亚洲欧美偷拍另类a∨色屁股| 国产视频精品免费| 一区二区中文视频| 国产精品三区在线观看| 亚洲三级在线播放| 欧美成人777| 亚洲综合无码一区二区| 久久精品国产亚洲av香蕉| 亚洲国产成人av网| www.国产成人| 色综合久久综合| 久久久久久亚洲av无码专区| 在线观看亚洲专区| 中文字幕天堂在线| 欧美日韩国产另类不卡| 在线视频播放大全| 欧美一区二区三区视频免费| 亚洲黄色a级片| 亚洲国产成人精品一区二区| 四虎精品在永久在线观看 | 麻豆av在线免费观看| 欧美激情欧美激情| 永久免费毛片在线播放| 国产精品av在线| 精品女同一区二区三区在线观看| 成人福利在线视频| 9l亚洲国产成人精品一区二三| 国产精品一区免费观看| 九一精品国产| 国产对白在线播放| 在线日韩电影| 亚洲综合在线网站| 国产在线播精品第三| 182在线视频| 国产欧美久久久精品影院| 日韩av手机在线免费观看| 亚洲五码中文字幕| 无码人妻精品一区二区三区9厂| 欧美日韩中字一区| 国产成人手机在线| 亚洲人在线观看| caopeng在线| 日本一本a高清免费不卡| 美女视频一区| 国产日韩精品推荐| 99久久精品网| 9久久9毛片又大又硬又粗| 毛片av一区二区三区| 国产一线在线观看| 国产精品拍天天在线| 日韩经典在线观看| 欧美日本一道本| 亚洲 另类 春色 国产| 最近的2019中文字幕免费一页| 波多野结衣乳巨码无在线观看| 国产精品激情av在线播放| 国产+成+人+亚洲欧洲在线| 亚洲欧美日韩精品久久久| 中文亚洲免费| 国产成人精品一区二区在线小狼| 久久免费偷拍视频| 国产一级在线播放| 欧美日本乱大交xxxxx| 手机看片一区二区| 美女久久久久久久久久久| 亚洲成人不卡| 国产手机精品在线| 91精品推荐| 欧美三级理论片| 91丨porny丨国产| 久久久久成人精品无码| 欧美蜜桃一区二区三区| 黄网在线免费| 2019中文字幕在线免费观看| 久久久久亚洲精品中文字幕| 日韩欧美一区二区三区久久婷婷| 亚洲国产日韩在线| 无套白嫩进入乌克兰美女| 日本一区二区三区久久久久久久久不| 日本少妇在线观看| 日韩欧美亚洲一区二区| 日本中文字幕在线看| 国产精品久久久久久久久久新婚| 加勒比中文字幕精品| 国产在线视频在线| 国产成人免费高清| 欧美 日韩 国产 一区二区三区| 欧美嫩在线观看| 日本精品在线| 国产精品亚洲网站| 香蕉久久夜色精品国产更新时间| 成人免费在线网| 国产精品一品视频| 国产女片a归国片aa| 91精品国产色综合久久久蜜香臀| 色三级在线观看| 国产精品丝袜白浆摸在线 | 成人激情校园春色| 免费一级全黄少妇性色生活片| 欧美一区二区三区婷婷月色| 免费av在线网址| 成人免费福利在线| 国产精品7m凸凹视频分类| 91日韩精品视频| 亚洲欧美影音先锋| 国产毛片在线视频| 久久av中文字幕| 999久久精品| 男人和女人啪啪网站| 久久男人中文字幕资源站| 日韩综合在线观看| 在线免费观看羞羞视频一区二区| 成人a在线观看高清电影| 艳色歌舞团一区二区三区| 久久精品免费看| 超碰手机在线观看| 亚洲成年人影院在线| 成人免费影院| 少妇免费毛片久久久久久久久| 男男视频亚洲欧美| 欧美在线视频第一页| 亚洲国产美女精品久久久久∴| www.精品| 亚洲成人自拍视频| 国产一区二区视频在线| 不卡的免费av| 国产一区二区三区日韩欧美| 亚洲精品伦理| 国产一区二区片| 久久亚洲私人国产精品va媚药| 黄色污污视频软件| 久久夜精品香蕉| 久久久久观看| 一区二区三区国产免费| 亚洲欧美视频在线观看视频| 亚洲国产精品无码久久| 青青a在线精品免费观看| 日韩欧美三级| 熟妇高潮一区二区| 欧美性大战久久| 免费在线国产视频| 日韩精品一区二区三区色偷偷| 国产在线视视频有精品| 国产成人一区二区三区影院在线| 亚洲性无码av在线| 亚洲国产欧美在线观看| 欧美亚洲国产成人| 亚洲美女在线国产| 国产高清自拍视频在线观看| 亚洲bt天天射| 免费看亚洲片| 久艹视频在线观看| 中文字幕亚洲欧美一区二区三区| 一区二区三区高清在线观看| 免费涩涩18网站入口| 午夜一区二区三区视频| 欧洲不卡视频| 欧美视频观看一区| 成人性生交大合|