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

抖音平臺多產(chǎn)物代碼隔離技術的實踐與探索

原創(chuàng) 精選
開發(fā)
隨著抖音業(yè)務的發(fā)展,為保障整體工程演進和迭代計劃的高效運行,體系化建設已加速提上日程,Codebase(可通稱為產(chǎn)物)融合是其中項目之一。該項目主要為開發(fā)同學提供底層復用能力、增強研發(fā)團隊效能,致力于幫助開發(fā)同學輕松高效地研發(fā)、管理代碼。

作者|郭玉

前言介紹

在軟件架構領域,框架的功能類似于基礎設施服務,是為實現(xiàn)某個業(yè)界標準而形成的組件規(guī)范。簡單理解,框架就是制定一套規(guī)范或者規(guī)則,開發(fā)同學在該規(guī)范或者規(guī)則下工作。本文通過剖析框架實體 ServiceKit/Adapter ,來窺探其底層結構和架構設計。

背景描述

隨著抖音業(yè)務的發(fā)展,為保障整體工程演進和迭代計劃的高效運行,體系化建設已加速提上日程,Codebase(可通稱為產(chǎn)物)融合是其中項目之一。該項目主要為開發(fā)同學提供底層復用能力、增強研發(fā)團隊效能,致力于幫助開發(fā)同學輕松高效地研發(fā)、管理代碼。

圖片

Codebase 融合過程中,技術團隊在各個業(yè)務線方向進行著差異化探索;演進路程上,業(yè)務線間耦合越來越強,開發(fā)同學迫切需要一套解決方案來做差異化代碼隔離。如下圖抖音與抖音極速版模塊差異所示。

圖片

回顧痛點,在過往的開發(fā)中,開發(fā)者們一般使用宏隔離( isLite or isPad )來區(qū)分不同產(chǎn)物之間的差異,但這種方式嚴重破壞了整個抖音工程的架構體系,以下從幾個維度分析。

研發(fā)效率:需要支持不同宏變量進行 lint ,有重復 lint ,單個組件很難區(qū)分項目控制二進制發(fā)版頻率,二進制需要頻繁更新,宏會導致很多混編二進制,影響編譯效率,如果以單個文件作為編譯緩存單元,宏隔離也會降低編譯緩存命中率。

可擴展性:擴展性差,缺乏動態(tài)能力和插件能力,添加新功能和修改原有功能會導致類實現(xiàn)的代碼急劇膨脹。

圈復雜度:宏隔離的代碼分散,修改和重構成本高。

組件粒度:無法支持項目間差異業(yè)務獨立成組件,背離高內(nèi)聚、低耦合原則。

我們的目標愿景是要做一套符合抖音工程架構體系,具備高效、通用、便捷能力的框架規(guī)范,讓開發(fā)同學在標準規(guī)則下進行編碼工作。

架構設計

啟蒙圖紙

啟蒙設計是著手做事之前的抽象意識,如下圖,在多個產(chǎn)物的研發(fā)環(huán)境下,將共同代碼能高效的復用,差異性代碼優(yōu)雅的隔離開。

圖片

為了幫助新同學快速入手架構框架,筆者在做此框架 Swift 建設的過程中,基于近段時間經(jīng)歷的幾個項目經(jīng)驗,總結出了一套系統(tǒng)性的腦圖,下面和大家分享下框架系統(tǒng)化的全景。

框架全景思維

內(nèi)容較多,但是全景思維還是想要在這里提一下,說不定在哪個階段上給你靈感;建議從樹的根節(jié)點出發(fā),選擇性的去了解它;如想大致了解,只用進入到 3 層左右,如想深入了解,請走到葉子節(jié)點(為了不影響閱讀體驗,更加細節(jié)的節(jié)點已經(jīng)被裁剪掉)。

圖片

基于上述框架系統(tǒng)化的思路鋪開,整個篇章會先介紹一些設計思想,再進行性能等相關的技術細節(jié)。由于篇幅有限,我們將精簡出我們認為比較重要的技術點進行重點講解。

設計思想

適配器模式

在設計模式中,適配器模式(adapter pattern)有時候也稱包裝樣式或者包裝。將一個類的接口轉接成用戶所期待的。一個適配使得因接口不兼容而不能在一起工作的類能在一起工作,做法是將類自己的接口包裹在一個已存在的類中。

—— 維基 百科 適配器模式

圖片

開發(fā)同學不用關心各個模塊的復雜度、業(yè)務的邏輯性、是選擇類對象還是實例對象、如何初始化各自單元等,僅需要基于包裝好的適配器來做各自的任務調度,類似于萬能充電器( 90 后同學時代的產(chǎn)物 :> ),無需關注電池是華為的,還是 OPPO 的,即插即用。

注冊與發(fā)現(xiàn)

服務注冊 - 服務發(fā)現(xiàn)思想

  • 服務演進

下面三個圖簡單描述了 web 服務時代從傳統(tǒng)服務到微服務時代的歷程(傳統(tǒng)服務 -> 并發(fā)服務 -> 分布式微服務),大家感興趣可以了解下,這里不過多介紹。

圖片

圖片

圖片

  • 微服務

微服務是一種以業(yè)務功能為主的服務設計概念,每一個服務都具有自主運行的業(yè)務功能,對外開放不受語言限制的 API ,應用程序則是由一個或多個微服務組成。

—— 維基百科,微服務

簡單了解微服務后,以服務角度來看,多個 Target 產(chǎn)物根據(jù)各業(yè)務模塊可劃分為多個 Adapter 服務,搭配綁定多個適配器協(xié)議,這樣能達成一對多效果。

我們深入性的介紹下內(nèi)部設計思路。在使用階段,一個主類可以向多個適配器類發(fā)送消息;在注冊過程,一個適配器類可以綁定到多個適配器協(xié)議,并且滿足兩種場景:一是多產(chǎn)物必須實現(xiàn)的接口,可以放在一個公共的協(xié)議上,二是單個產(chǎn)物必須實現(xiàn)的接口放在獨立的協(xié)議上,公共協(xié)議 + 獨立協(xié)議可以進行組合,由同一個有上下文關聯(lián)的適配器類來實現(xiàn)。

圖片

提到微服務,我們不得不了解下兩個概念,服務注冊與發(fā)現(xiàn)。

服務注冊

  • 服務注冊:是將提供某個服務的模塊信息注冊到一個公共的組件上去。(如下示例代碼更加容易理解)
//服務注冊
ServiceKit.register(AModuleServer);

服務發(fā)現(xiàn)

  • 服務發(fā)現(xiàn):是指使用一個注冊中心來記錄分布式系統(tǒng)中的全部服務的信息,以便其他服務能夠快速的找到這些已注冊的服務;不管是服務新增和服務刪減都能實現(xiàn)自動發(fā)現(xiàn)。(如下示例代碼更加容易理解)
//服務發(fā)現(xiàn)
ServiceKit.get(AModuleServer);

進階圖紙

圖片

  • 藍色框:抖音 Target
  • 黑色框:抖音極速版 Target
  • aXXXDOUYINAdapter:是 XXXDOUYINAdapterImpl 的服務實例。
  • XXXDOUYINAdapterImpl:是訂閱者,發(fā)布者是持有 XXXDOUYINAdapterImpl 實例 XXXDOUYINAdapter 的主類。
  • <>XXXDOUYINAdapter:面向協(xié)議編程,抽象 Protocol 接口,抽離各自差異性、公共性代碼的接口。

上圖再一步概括了整個項目背景(抖音、抖音極速版的兩套代碼,有重復也有差異,如何將重復的代碼繼續(xù)共用,并且將差異性的代碼隔離到各自的Target產(chǎn)物中,不再耦合)、我們要做的過程(通過適配器模式來做任務調度,面向協(xié)議編程,抽離共用、差異性的代碼為接口形式,在各自Target中,實現(xiàn)各自的協(xié)議Impl),以及達成的結果(通過便利性腳手架、輔助工具能讓使用者低成本學習和理解,容易上手操作)。

關系圖紙

圖片

工程視角

從抖音現(xiàn)有工程架構視角,了解設計。

圖片

流程實戰(zhàn)

接下來我們進行下流程性實戰(zhàn)演練。

代碼實戰(zhàn)中,訂閱類在 App 內(nèi)存創(chuàng)建一個實例,訂閱者的生命周期由所有關聯(lián)的發(fā)布者決定,比如多個控制器匯總埋點邏輯到一個加工者, 或比如一個父控制器對應多個子控制器。

圖片

技術細節(jié)

上述了解設計性圖紙之后,我們深入淺出的剖析內(nèi)部技術細節(jié)。

編譯插拔

常規(guī)思路下,注冊會放到 App 啟動階段,但這樣做容易拖緩 App 的啟動速度。要想做到在最早的時機注冊但又不影響啟動速度,需要基于編譯器特性:__attribute__((section("name"))) 實現(xiàn),通過 attribute 指令,編譯時期寫在 .data 段,然后在運行時期讀出來。下圖介紹編譯注解的簡單流程。

圖片

代碼示例

__attribute((used, section(_DY_SEGMENT "," _DY_MSG_ASSOCIATE_SUBSCRIBER_SECTION ))) static _dy_message_pair _DY_MSG_UNIQUE_VAR = \
{\
&_DY_MSG_ASSOCIATE_PROTOCOL_METHOD(INDEX),\
&_DY_MSG_ASSOCIATE_LOGIC_METHOD,\
};

利用上述編譯注解的能力,搭配協(xié)議反射,就能達到在使用的時候,get 協(xié)議進而讀取到存儲在 .data 段中的內(nèi)存地址來加載,這個能力也稱為懶加載。

支持切面

核心思路如下(偽代碼),在注冊階段暴露出代碼塊模型,可以在塊中做類似 AB 的邏輯切面。

isABTest = YES;

Register {
if (isABTest) {
return <ObjectABProtocol>ObjectA.new;
} else {
return <ObjectABProtocol>ObjectB.new;
}
}

循環(huán)引用

為了防止 subscriber 與 publisher 在 block 使用或者主類與適配器的關聯(lián)情況下導致循環(huán)引用,適配器底層運用了 NSProxy 來實現(xiàn)。如以下的 case 無需關心內(nèi)存不釋放問題。

  • 場景例一
@implementation DYAudioViewForDOUYIN
RegisterAdapters(DYFeedInteractionControllerPrivateProtocol,DYFeedContaineAudioAdapter) {
if (GET_AB_TEST_CASE(enableAutoPlay)) {
return nil;
} else {
return [[DYAudioViewForDOUYIN alloc] init];
}
}

- (void)stopAudio:(BOOL)immediate
{
[[self weakTarget] refresh:^{
[[self weakTarget] refresh];
[self stop];
}];
}

- (void)stop
{
//do something
....
}

@end
  • 場景例二
@implementation DYFeedContainer

GetAdapters(DYFeedContaineAudioAdapter,DYFeedContaineVideoAdapter, DYFeedModuleConfig)

- (void)stopPlay
{
id <DYFeedContaineVideoAdapter> adapter = [self DYFeedContaineVideoAdapter];
[[self DYFeedContaineVideoAdapter] stopVideo:^{
[adapter refreshView];
}];

self.myBlock = ^(){
[adapter refreshView];
};
}

@end

綁定關聯(lián)

圖片

綁定關聯(lián)共分為兩部分,強關聯(lián)與弱關聯(lián)。

  • 強關聯(lián):將各適配器強綁定關聯(lián)在主類上,這樣能實現(xiàn)適配器的生命周期跟隨主類自動釋放,在使用適配器對象時讓內(nèi)存持續(xù)處于最優(yōu)狀態(tài)。
  • 弱關聯(lián):將主類弱關聯(lián)在適配器上,這樣能實現(xiàn)在隔離出來的附屬類中,通過 Key ( self = 適配器)拿到主類,達到反向通信的效果。

多語言適配

Swift 環(huán)境下不能在注冊階段友好的使用 attribute 編譯指令,去自定義段能力,要想高性能的使用懶注冊能力只能另辟蹊徑。

圖片

將注冊代碼塊直接放到 MachO 文件中的代碼區(qū),通過繼承協(xié)議 SwiftAdapter ,實現(xiàn)層實現(xiàn) + (id)lazyRegister 類方法,runtime 的 Api 映射出 A 類對象,在服務發(fā)現(xiàn)的階段來調用 A 類方法代碼,這樣能解決“懶注冊”問題;然后改造底層框架,控制內(nèi)部保證只會初始化一次,用戶視角無需關心。

E.g.

class ModuleADouYinLiteAdapter: NSObject,SwiftAdapterProtocol {
class func lazyRegister() -> NSObjectProtocol {
return ModuleADouYinLiteAdapter.init()
}
}

便利腳手架

在各語言環(huán)境對服務發(fā)現(xiàn)與注冊接口制造腳手架,使其用起來更加簡便。

  1. Objective - C 宏

接口均用宏來封裝。

//服務注冊
RegisterAdapters(ModuleDouYinLiteAdapter) {
return ModuleDouYinLiteAdapter.new;
}
//服務發(fā)現(xiàn)
GetAdapters(ModuleDouYinLiteAdapter)
  1. SwiftProtocol 擴展

Swift 環(huán)境下不能友好的使用宏封裝,此時我們可以通過對 Protocol 進行擴展,以達到封裝效果。

//服務注冊
class func lazyRegister() -> NSObjectProtocol,ModuleDouYinLiteAdapterProtocol {
return ModuleDouYinLiteAdapter.init()
}
//服務發(fā)現(xiàn)
Protocol.getAdapter(self,ModuleDouYinLiteAdapterProtocol.self)

使用視角

OC編碼

共有接口差異代碼情景

服務注冊

圖片

圖片

圖片

?服務發(fā)現(xiàn)

圖片

Swift編碼

獨有接口差異代碼情景

服務注冊

  • 前置抽象協(xié)議接口,懶注冊,支持切面。
  • 支持在各個 Adapter 實現(xiàn)層中獲取 WeakTarget (主類)。

圖片

圖片

服務發(fā)現(xiàn)

圖片

輔助工具

就如很多人都喜歡玩的網(wǎng)游地下城與勇士( DNF ),輔助工具“連發(fā)”(顧名思義,連續(xù)發(fā)動,可以聯(lián)想到傳統(tǒng)單發(fā)步槍與自動步槍的區(qū)別)不僅讓玩家節(jié)省了不少的按鍵成本,而且在連招上增強了打擊節(jié)奏感。同樣的道理,我們推薦使用 Xcode 自定義模板工具編程,讓使用者減少打出代碼的時間成本,在開發(fā)中更加聚焦處理編碼邏輯。

圖片

使用規(guī)范

為讓開發(fā)同學更加規(guī)范使用,我們在代碼靜態(tài)檢查階段進行代碼的攔截矯正,同時基于現(xiàn)狀列一下幾個 Badcase 。

場景例一

  • 只進行了分支判斷邏輯隔離,沒做到代碼隔離,這樣會將判斷邏輯帶到主類,使讓包大小增加。
// E.g. 錯誤示例
- (void)masterFunction {
if ([self DYFeedAModuleLiteAdapter]) {
// lite code
} else {
// douyin or other Target code
}
}

//--------------------------------------------------------------------------

//E.g.正確示例
- (void)masterFunction {
[[self DYFeedAModuleAdapter] runFunction];
}

//各自Target實現(xiàn)runFunction協(xié)議方法
//in douyin
- (void)runFunction {
// code
}
//in Lite
- (void)runFunction {
// code
}

場景例二

  • 在同一個產(chǎn)物內(nèi),一個協(xié)議被多個類實現(xiàn)( Debug 環(huán)境編譯階段會通過斷言進行第一次攔截)。
// E.g. 錯誤示例( douyin targer)
@interface AModuleAdapter<AModuleAdapter>
@interface BModuleAdapter<AModuleAdapter>

//E.g.正確示例(douyin targer)
@interface AModuleAdapter<AModuleAdapter>
@interface BModuleAdapter<BModuleAdapter>

場景例三

  • Adapter 方法在不同產(chǎn)品線下可能返回空值,如果想拿 Adapter 做 一些邏輯編碼,需要提前判斷是否為空。
// E.g. 錯誤示例
- (DYAModuleFeedType)getType {
return [[self DYModuleAdapter] checkType];
}

//E.g.正確示例
- (DYAModuleFeedType)getType {
return [self DYModuleAdapter] ? [[self DYModuleAdapter] checkType]:/* 兜底邏輯 */;
}

生態(tài)建設

目前為止,多產(chǎn)物適配器框架實體 Adapter 已經(jīng)在抖音數(shù)個平臺業(yè)務線中批量使用,大部分 OC 業(yè)務場景均已覆蓋,而且 Swift 場景能力也已建設完畢,框架母體 ServiceKit 已接入 20 + 個 App 。

寫在最后

穩(wěn)扎穩(wěn)打

對于核心框架,我們寫出的也許只有一行代碼,但是會有幾百萬行甚至上千萬行代碼會經(jīng)過它,一定要慎重思考。

責任編輯:未麗燕 來源: 字節(jié)跳動技術團隊
相關推薦

2024-04-12 14:42:21

Typescript渲染技術

2024-03-12 17:13:51

2022-12-22 08:51:40

vivo代碼

2022-06-06 12:19:08

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

2022-06-01 09:18:37

抖音ReDex算法優(yōu)化

2023-01-05 07:54:49

vivo故障定位

2023-10-27 12:16:23

游戲發(fā)行平臺SOP

2024-10-31 08:22:56

2025-07-30 09:36:47

2024-06-13 17:10:16

2023-12-13 13:15:13

平臺開發(fā)實踐

2023-03-28 08:28:34

2023-11-03 17:02:18

抖音直播畫質優(yōu)化

2021-08-04 16:48:16

數(shù)字化

2022-07-20 22:55:39

直播OOM抖動

2024-02-26 08:15:43

語言模型低代碼

2024-12-05 12:01:09

2024-11-13 08:47:24

2023-03-03 15:43:23

抖音世界杯畫質優(yōu)化
點贊
收藏

51CTO技術棧公眾號

欧美精品尤物在线| 97国产在线视频| 久久久九九九热| www在线免费观看视频| 国产69精品久久99不卡| 69av在线播放| 91高清免费观看| 亚洲电影一级片| 91麻豆精品国产91久久久资源速度 | 亚洲精品中文字幕有码专区| 天天色综合社区| 麻豆福利在线观看| 国产午夜精品在线观看| 91精品免费| 日韩一级在线视频| 午夜精品偷拍| 中文字幕亚洲综合| 日本黄色免费观看| 亚洲精品tv| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 人人草在线观看| 欧美1区2区| 一区二区三区国产视频| 国产精品一区二区在线免费观看| 最新日韩一区| 午夜伊人狠狠久久| 三年中国中文在线观看免费播放| 日韩电影网址| 国产不卡高清在线观看视频| 国产精品日日摸夜夜添夜夜av| 国产第100页| 亚洲精品久久久| 国产一区二区三区网站| 美女又爽又黄视频毛茸茸| 精品国产鲁一鲁****| 欧美午夜影院一区| 国产日韩一区二区在线| av影视在线看| 亚洲国产视频一区二区| 最新中文字幕久久| 永久av在线| 国产清纯在线一区二区www| 国产欧美日韩伦理| www.麻豆av| 国产一区二区三区在线观看免费视频| 国产精品入口免费视| 欧美一区免费看| 另类国产ts人妖高潮视频| 97不卡在线视频| 国产精品suv一区二区69| 欧美在线网站| 欧美夫妻性生活xx| 校园春色 亚洲| 中文字幕一区二区三区欧美日韩| 久久精品91久久香蕉加勒比| 2019男人天堂| 欧美肥老太太性生活| 少妇高潮 亚洲精品| 性爱在线免费视频| 欧美国产偷国产精品三区| 国产一区二区动漫| 国产成人精品视频免费| 成人女性视频| 按摩亚洲人久久| 中文字幕另类日韩欧美亚洲嫩草| 91精品秘密在线观看| 久久夜色精品亚洲噜噜国产mv| 国产男女猛烈无遮挡在线喷水| 91视频久久| 久久99热精品这里久久精品| 青青草原免费观看| 日韩视频中文| 国产999精品| 亚洲一区精品在线观看| 国产在线一区二区| 岛国视频一区| 黄视频在线观看免费| 中文文精品字幕一区二区| 在线精品亚洲一区二区| 伊人福利在线| 午夜电影网一区| 日韩精品一区二区三区不卡| 99riav视频一区二区| 91精品一区二区三区久久久久久| 国内av免费观看| 欧美一区自拍| www.精品av.com| 中文字幕在线观看成人| 亚洲一区国产| 国产一区深夜福利| 全国男人的天堂网| 中文文精品字幕一区二区| 免费在线看黄色片| 国产另类xxxxhd高清| 欧美一级黄色大片| 四虎永久免费影院| 无需播放器亚洲| 91国产在线精品| 一级黄色免费片| av一二三不卡影片| 亚洲图片小说在线| 天堂网在线最新版www中文网| 欧美视频三区在线播放| 久久久国产精品久久久| 深爱激情久久| 欧美精品999| 人妻中文字幕一区二区三区| 国产成人综合在线| 先锋影音欧美| 狠狠操一区二区三区| 欧美人xxxx| 免费a级黄色片| 中国成人一区| 国产精品久久久久久久久久新婚 | 欧美日韩一区二区三| 成人高清免费在线| 欧美亚洲丝袜传媒另类| 国产a级黄色片| 亚洲欧美偷拍自拍| 国产精品免费一区豆花| 亚洲 欧美 激情 另类| 18成人在线视频| 妓院一钑片免看黄大片| 老牛影视av一区二区在线观看| 久久久电影免费观看完整版| 国产99久久久久久免费看| 菠萝蜜视频在线观看一区| 日本一区二区免费高清视频| 免费观看成人性生生活片 | 国产在线一二| 精品国产91乱高清在线观看| 麻豆网站免费观看| 久久久9色精品国产一区二区三区| 日本一本a高清免费不卡| 人妻视频一区二区三区| 亚洲精品国产视频| 国产精品久久久久久久av福利| 久久爱www成人| 欧美野外猛男的大粗鳮| 日韩一卡二卡在线| 午夜精品免费在线观看| 久久精品aⅴ无码中文字字幕重口| 99视频精品全部免费在线视频| 国产精品久久中文| 黄色免费在线播放| 在线视频欧美精品| 69精品无码成人久久久久久| 亚洲一区二区毛片| 欧美欧美一区二区| 日产精品一区| 一本色道久久88精品综合| 最近免费中文字幕大全免费版视频| av不卡在线播放| 国产a级一级片| 色婷婷av一区二区三区丝袜美腿| 午夜精品理论片| 搡老岳熟女国产熟妇| 精品国产成人在线| 37p粉嫩大胆色噜噜噜| 母乳一区在线观看| 日韩精品久久一区| 日本国产亚洲| 欧美成人在线免费| 刘亦菲久久免费一区二区| 午夜精品福利在线| 黄色正能量网站| 日本va欧美va瓶| 艳母动漫在线免费观看| 9l视频自拍蝌蚪9l视频成人| 午夜精品久久久久久久久久久久 | 久久品道一品道久久精品| 一区二区传媒有限公司| 久久91麻豆精品一区| 国产精品免费视频xxxx| www久久日com| 亚洲国产精品999| 久久久久久不卡| 国产精品传媒在线| 韩国三级视频在线观看| 亚洲欧美日韩专区| 亚洲精品久久区二区三区蜜桃臀 | 欧美精品日韩精品| 国产亚洲欧美精品久久久久久 | 91精品欧美福利在线观看| 欧美黄色免费看| 2欧美一区二区三区在线观看视频| 国产成人综合一区| 欧美成人中文| 欧美极品日韩| 亚洲精品大片| 97视频在线观看免费| 9i精品一二三区| 精品国产制服丝袜高跟| 精品成人无码久久久久久| 最新久久zyz资源站| 国产 xxxx| 久久国产乱子精品免费女| h无码动漫在线观看| 国产毛片一区二区三区| 99精彩视频| 成人毛片免费| 91高清视频在线免费观看| 日韩免费啪啪| 亚洲男人天堂网| 性做久久久久久久久久| 在线观看一区日韩| 日韩精品在线免费看| 亚洲欧美综合另类在线卡通| 三级男人添奶爽爽爽视频| 国内精品免费在线观看| 国产精品69页| 在线播放亚洲| 神马午夜伦理影院| heyzo久久| 久久伊人一区二区| 国产精品久久久久久久久久白浆| 成人美女av在线直播| 四虎影视4hu4虎成人| 97欧美精品一区二区三区| 蜜桃视频网站在线| 国产一区二区三区直播精品电影 | 亚洲美女自拍偷拍| 女人丝袜激情亚洲| 精品一区二区三区自拍图片区 | 99热6这里只有精品| 91丨九色丨黑人外教| 欧美熟妇另类久久久久久多毛| 日韩av网站在线观看| 免费在线观看亚洲视频| 亚洲手机视频| 欧美少妇一区二区三区| 欧美jizz| 一本一道久久a久久综合精品| 在线亚洲a色| 久久一区二区三区欧美亚洲| 丁香综合av| 成人看片视频| 91精品国产自产精品男人的天堂| 91人人爽人人爽人人精88v| www.一区| 国产精品美女999| 成人在线网站| 国产成人精品电影| 97久久香蕉国产线看观看| 欧美亚洲免费电影| 日韩大尺度黄色| 午夜欧美不卡精品aaaaa| 亚洲免费高清视频| 精品国产无码AV| 欧美精品国产精品| 中文字幕在线2018| 欧美日韩一区小说| 制服丝袜在线一区| 欧美日本国产一区| 91禁在线观看| 3751色影院一区二区三区| 一本色道久久综合无码人妻| 欧美三级中文字幕在线观看| 欧美另类高清videos的特点| 在线欧美日韩精品| 在线观看免费高清视频| 欧美日本一区二区三区四区| 亚洲综合一区中| 3d动漫精品啪啪一区二区竹菊| 91激情在线观看| 日韩精品一区二区三区老鸭窝 | 91精品天堂| 欧美久久一区二区三区| 国产精品乱码| 久久成人高清| 伊人天天久久大香线蕉av色| 一二三区不卡| 国产免费黄色小视频| 午夜一区不卡| 日本黄大片一区二区三区| 国模少妇一区二区三区| 无码人妻久久一区二区三区蜜桃| av午夜精品一区二区三区| 亚洲狠狠婷婷综合久久久久图片| 国产日本一区二区| 午夜剧场免费在线观看| 亚洲国产欧美一区二区三区丁香婷| 在线观看免费国产视频| 色综合亚洲欧洲| 国产露脸国语对白在线| 欧美精品一区二区三区蜜臀| 久蕉在线视频| 欧美噜噜久久久xxx| 天堂av在线网| 成人欧美一区二区三区在线 | 就去色蜜桃综合| 久久高清精品| 国产精品999视频| 久久精品99久久久| 欧洲一级黄色片| 亚洲日韩欧美一区二区在线| 日韩不卡在线播放| 欧美一级夜夜爽| 激情小说 在线视频| 欧美成人在线免费| 78精品国产综合久久香蕉| 国产精品sss| 日韩伦理视频| 精品视频免费在线播放| 极品少妇xxxx精品少妇| 极品粉嫩小仙女高潮喷水久久| 中文字幕一区免费在线观看| 国产性xxxx高清| 在线播放国产精品二区一二区四区| 三级小视频在线观看| 久久资源免费视频| 色天使综合视频| 精品国产一二| 国产精品videosex极品| 亚洲欧美自拍另类日韩| 91美女在线视频| 欧美精品久久久久性色| 精品视频1区2区3区| 深夜福利免费在线观看| 欧美精品激情在线| 国内不卡的一区二区三区中文字幕| 欧美日韩精品一区| 日韩视频一区二区三区在线播放免费观看| 欧美激情国内自拍| 国产精品乱人伦中文| 欧美日韩一级黄色片| 日韩av网站导航| 久久99亚洲网美利坚合众国| 成人免费福利视频| 久久免费大视频| www.99av.com| 国产欧美日韩三区| 潘金莲一级淫片aaaaaa播放| 亚洲精品av在线| 538在线视频| 国产精品福利视频| 午夜久久一区| 九九久久久久久| 亚洲视频在线一区二区| 国产精品久久综合青草亚洲AV| 在线播放日韩精品| 国产精品天堂蜜av在线播放| 欧美一区二区三区四区夜夜大片| 一区二区国产精品| aa片在线观看视频在线播放| 亚洲成人黄色影院| 手机看片福利在线| 18久久久久久| 偷拍亚洲精品| 欧美日韩在线视频一区二区三区| 99久久精品国产导航| 成年人免费看毛片| 精品视频在线播放| 日韩精品影片| 亚洲国产精品综合| 久久国产精品免费| 九九九久久久久| 精品久久99ma| 依依综合在线| 天堂资源在线亚洲资源| 久久精品国产秦先生| 91香蕉一区二区三区在线观看 | 粉嫩av一区二区夜夜嗨| 性欧美长视频免费观看不卡| 91成人短视频| 欧美老熟妇喷水| 日本一区二区三区在线观看| 中文资源在线播放| 欧美另类极品videosbest最新版本| 视频一区视频二区欧美| aa视频在线播放| 国产日韩欧美在线一区| 91麻豆一区二区| 欧美激情网站在线观看| 台湾色综合娱乐中文网| 亚洲三级视频网站| 一区二区三区高清在线| 亚洲AV成人无码一二三区在线| 国产精品美女主播| 亚洲一区二区三区| 亚洲一区二区乱码| 欧美日韩国产精选| 波多野结衣久久| 日本欧美色综合网站免费| 加勒比av一区二区| 精品91久久久| 色av吧综合网| 红杏视频成人| 精品亚洲一区二区三区四区| 一区二区三区精品| 美州a亚洲一视本频v色道| 成人在线免费观看视视频| 在线日韩中文| 婷婷国产成人精品视频| 亚洲黄色www网站| 亚洲一区有码| 92看片淫黄大片一级| 亚洲欧美日韩国产手机在线| 亚洲av毛片成人精品| 91亚洲永久免费精品|