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

如何將iOS項(xiàng)目的編譯速度提高5倍

移動(dòng)開發(fā)
本文列出我研究過的一些主流方案以及我最后沒有采用的原因,這些方案有各自的局限性,但是也給了我不少啟發(fā),思考過程跟最終方案一樣有價(jià)值。

前言

貝聊目前開發(fā)的兩款A(yù)pp分別是貝聊家長版和貝聊老師版,最近因?yàn)樵诳焖俚_發(fā)新功能,項(xiàng)目規(guī)模急速增長,單個(gè)端業(yè)務(wù)代碼約23萬行,私有庫約6萬行,第三方庫代碼約15萬行,單個(gè)客戶端的代碼行數(shù)約60萬。現(xiàn)在打包一次耗時(shí)需要11~12分鐘。雖然還遠(yuǎn)遠(yuǎn)比不上 Facebook 的40分鐘,但是我們在內(nèi)測的時(shí)候,經(jīng)常一天要發(fā)布內(nèi)測版兩到三次。打包時(shí)CPU占用基本上是百分百的,因?yàn)闆]有專門的 CI 機(jī)器,對負(fù)責(zé)打包的同事(其實(shí)就是我自己)的工作時(shí)間占用比較多,所以最近一直在尋找加快打包速度的方案。

目前的項(xiàng)目架構(gòu)

我們的項(xiàng)目使用 CocoaPods 來管理第三方庫和私有庫的依賴,對大部分項(xiàng)目來說應(yīng)該是標(biāo)配了。目前還是純 Objective-C 的項(xiàng)目,沒有引入 Swift。

調(diào)研過的方案

下面列出我研究過的一些主流方案以及我最后沒有采用的原因,這些方案有各自的局限性,但是也給了我不少啟發(fā),思考過程跟最終方案一樣有價(jià)值。

cocoapods-packager

cocoapods-packager 可以將任意的 pod 打包成 Static Library,省去重復(fù)編譯的時(shí)間,一定程度上可以加快編譯時(shí)間,但是也有自身的缺點(diǎn):

  1. 優(yōu)化不徹底,只能優(yōu)化第三方和私有 Pod 的編譯速度,對于其他改動(dòng)頻繁的業(yè)務(wù)代碼無能為力
  2. 私有庫和第三方庫的后續(xù)更新很麻煩,當(dāng)有源碼修改后,需要重新打包上傳到內(nèi)部的 Git 倉庫
  3. 過多的二進(jìn)制文件會(huì)拖慢 Git 的操作速度(目前還沒部署 Git 的 LFS)
  4. 難以調(diào)試源碼

Carthage

這個(gè)方案跟 cocoapods-packager 比較類似,優(yōu)缺點(diǎn)都差不多,但 Carthage 可以比較方便地調(diào)試源碼。因?yàn)槲覀兡壳耙呀?jīng)大規(guī)模使用 CocoaPods,轉(zhuǎn)用 Carthage 來做包管理需要做大量的轉(zhuǎn)換工作,所以不考慮這個(gè)方案了。

Buck

Buck 是一套通用的構(gòu)建系統(tǒng),由 Facebook 開源。最大的特色是智能的增量編譯可以極大地提高構(gòu)建速度。最早聽說 Buck 的時(shí)候,它還只能用在安卓上,現(xiàn)在已經(jīng)適配了 iOS。

它能增快構(gòu)建速度的主要原因是緩存了編譯結(jié)果,通過持續(xù)監(jiān)視項(xiàng)目目錄的文件變化,每次編譯時(shí)只編譯有改動(dòng)的文件。另外一個(gè)讓我很受啟發(fā)的功能是 HTTP Cache Server,通過一臺緩存文件服務(wù)器來保存大家的編譯結(jié)果,這樣只要團(tuán)隊(duì)里其中一人編譯過的文件,其他人就不用再編譯了,直接下載就行。

Buck 是個(gè)相當(dāng)完備的解決方案,很多國外的大公司例如 Uber 都已經(jīng)用上。我也花了很多時(shí)間來研究,最終還是認(rèn)為對我們的項(xiàng)目和團(tuán)隊(duì)來說,目前并不是很適合,主要原因是:

  1. Buck 拋棄了 Xcode 的項(xiàng)目文件,需要手工編寫配置文件來指定編譯規(guī)則,這要對現(xiàn)有項(xiàng)目作出大幅度的調(diào)整。我們目前還在快速迭代新功能,沒有余暇和人手來實(shí)施。
  2. 開發(fā)和調(diào)試的流程都得做出很大的改變。因?yàn)?Buck 接管了項(xiàng)目編譯的過程,想調(diào)試項(xiàng)目不能簡單地在 Xcode 里面 ?+R 了,得先反過來讓 Buck 生成 Xcode 的項(xiàng)目文件。Uber 的工程師甚至推薦使用 Nuclide 來代替 Xcode 作為開發(fā)環(huán)境。雖然原理上是可行的,但是團(tuán)隊(duì)需要花不少時(shí)間來適應(yīng),短期內(nèi)效率降低無可避免。
  3. 用 Xcode 調(diào)試代碼享受不到加快編譯速度的好處。雖然可以用 buck 命令啟動(dòng) App,然后在命令行里啟動(dòng) lldb 來調(diào)試,但那就無法使用 Xcode 的調(diào)試工具 例如 View Debugging 和 Memory Graph Debugger。

Bazel

Bazel 跟 Buck 很相似,是 Google 開源的,優(yōu)缺點(diǎn)跟 Buck 都差不多,不再詳細(xì)說了。

distcc 分布式編譯

原理是把一部分需要編譯的文件發(fā)送到服務(wù)器上,服務(wù)器編譯完成后把編譯產(chǎn)物傳回來。我嘗試了一下比較出名的 distcc,搭建過程比較簡單,最后也能成功地把編譯任務(wù)分派到內(nèi)網(wǎng)的多臺服務(wù)器上。但是其他編譯服務(wù)器的 CPU 占用總是很低,只有 20% 左右;也就是說分派任務(wù)的速度甚至還趕不上服務(wù)器編譯的速度,分派任務(wù)然后回傳編譯產(chǎn)物這個(gè)過程所耗費(fèi)的時(shí)間超過了本地直接編譯。不停調(diào)整參數(shù)反復(fù)試驗(yàn)了很多次,最后發(fā)現(xiàn)編譯時(shí)間完全沒有變快,甚至還有點(diǎn)變慢了。可能以我們目前項(xiàng)目的規(guī)模并不適合使用分布式編譯。

最終方案:CCache

先來看看我對于解決方案的訴求:

  1. 能大幅度地提升編譯速度,起碼要減少掉 50% 的編譯時(shí)間
  2. 不需要對項(xiàng)目作出重大調(diào)整
  3. 不需要改變開發(fā)工具鏈

CCache 是一個(gè)能夠把編譯的中間產(chǎn)物緩存起來的工具,在其他領(lǐng)域已經(jīng)有不少應(yīng)用,只是在 iOS 界的實(shí)踐比較少。經(jīng)過我的實(shí)踐,它能夠滿足我前面的三點(diǎn)要求。我最早認(rèn)識到它是搜到了這篇文章:Using ccache for Fun and Profit | Inside PSPDFKit

如果你不使用 CocoaPods,參照上面的文章即可。因?yàn)獒槍?CocoaPods 需要作出一些額外的調(diào)整,所以還是說明一下。下面就來說說要怎樣把 CCache 應(yīng)用在用 CocoaPods 作為包管理工具的 iOS 項(xiàng)目中。

安裝步驟:

注意:項(xiàng)目路徑不能有中文,否則會(huì)影響 CCache 的正常工作

安裝 CCache

首先你需要在電腦上安裝 Homebrew,對使用 macOS 的程序員來說應(yīng)該是標(biāo)配,略過。

通過 Homebrew 安裝 CCache, 在命令行中執(zhí)行

  1. $ brew install ccache 

命令跑完后即安裝成功。

創(chuàng)建 CCache 編譯腳本

為了能讓 CCache 介入到整個(gè)編譯的過程,我們要把 CCache 作為項(xiàng)目的 C 編譯器,當(dāng) CCache 找不到編譯緩存時(shí),它會(huì)再把編譯指令傳遞給真正的編譯器 clang。

新建一個(gè)文件命名為ccache-clang, 內(nèi)容為下面這段腳本,放到你的項(xiàng)目里

ccache-clang

 

  1. #!/bin/sh 
  2. if type -p ccache >/dev/null 2>&1; then 
  3. export CCACHE_MAXSIZE=10G 
  4. export CCACHE_CPP2=true 
  5. export CCACHE_HARDLINK=true 
  6. export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches 
  7. # 指定日志文件路徑到桌面,等下排查集成問題有用,集成成功后刪除,否則很占磁盤空間 
  8. export CCACHE_LOGFILE='~/Desktop/CCache.log' 
  9. exec ccache /usr/bin/clang "$@" 
  10. else 
  11. exec clang "$@" 
  12. fi 

在命令行中,cd 到 ccache-clang 文件的目錄,把它的權(quán)限改成可執(zhí)行文件

  1. $ chmod 777 ccache-clang 

如果你的代碼或者是第三方庫的代碼用到了C++,則把ccache-clang這個(gè)文件復(fù)制一份,重命名成ccache-clang++。相應(yīng)的對clang的調(diào)用也要改成clang++,否則 CCache 不會(huì)應(yīng)用在 C++ 的代碼上。

 

  1. #!/bin/sh 
  2. if type -p ccache >/dev/null 2>&1; then 
  3. export CCACHE_MAXSIZE=10G 
  4. export CCACHE_CPP2=true 
  5. export CCACHE_HARDLINK=true 
  6. export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches 
  7. # 指定日志文件路徑到桌面,等下排查集成問題有用,集成成功后刪除,否則很占磁盤空間 
  8. export CCACHE_LOGFILE='~/Desktop/CCache.log' 
  9. exec ccache /usr/bin/clang++ "$@" 
  10. else 
  11. exec clang++ "$@" 
  12. fi 

完成后項(xiàng)目中應(yīng)該有這兩個(gè)文件

Xcode 項(xiàng)目的調(diào)整

定義CC常量

在你項(xiàng)目的構(gòu)建設(shè)置(Build Settings)中,添加一個(gè)常量CC,這個(gè)值會(huì)讓 Xcode 在編譯時(shí)把執(zhí)行路徑的可執(zhí)行文件當(dāng)做 C 編譯器。

如何將iOS項(xiàng)目的編譯速度提高5倍

CC常量的值為 $(SRCROOT)/ccache-clang,如果你的腳本不是放在項(xiàng)目根目錄,則自行調(diào)整路徑。如果一運(yùn)行項(xiàng)目就報(bào)錯(cuò),檢查下路徑是不是填錯(cuò)了。

關(guān)閉 Clang Modules

因?yàn)?CCache 不支持 Clang Modules,所以需要把 Enable Modules 的選項(xiàng)關(guān)掉。這個(gè)問題在 CocoaPods 上如何處理,后面會(huì)講。

如何將iOS項(xiàng)目的編譯速度提高5倍

關(guān)閉了 Enable Modules 后需要作出的調(diào)整

因?yàn)殛P(guān)閉了 Enable Modules,所以必須刪除所有的 @import語句,替換為#import的語法

例如將 @import UIKit 替換為 #import。之后,如果你用到了其他的系統(tǒng)框架例如 AVFoundation、CoreLocation等,現(xiàn)在 Xcode 不會(huì)再幫你自動(dòng)引入了,你得要在項(xiàng)目 Target 的 Build Phrase -> Link Binary With Libraries 里面自己手動(dòng)引入。

測試效果

嘗試編譯一遍,然后在命令行里輸入 cache -s 就能看見類似下面的 ccache 運(yùn)行情況統(tǒng)計(jì):

 

  1. cache directory /Users/mac/.ccache  
  2. primary config /Users/mac/.ccache/ccache.conf  
  3. secondary config (readonly) /usr/local/Cellar/ccache/3.3.4_1/etc/ccache.conf  
  4. cache hit (direct) 14378  
  5. cache hit (preprocessed) 1029  
  6. cache miss 7875  
  7. cache hit rate 66.18 %  
  8. called for link 61  
  9. called for preprocessing 48  
  10. compile failed 2  
  11. preprocessor error 4  
  12. can’t use precompiled header 70  
  13. unsupported compiler option 2332  
  14. no input file 11  
  15. cleanups performed 0  
  16. files in cache 35495  
  17. cache size 1.3 GB  
  18. max cache size 5.0 GB 

如果成功接入,就能看見 cache miss 不為0。因?yàn)榈谝淮尉幾g沒有緩存,肯定是全 miss 的。接著編譯第二遍,如果能看見 cache hit 的數(shù)字開始飆升,恭喜你,接入成功了。

CocoaPods 的處理

如果你的項(xiàng)目不用 CocoaPods 來做包管理,那你已經(jīng)完全接入成功了,不用執(zhí)行下面的操作。

因?yàn)?CocoaPods 會(huì)單獨(dú)把第三方庫打包成一個(gè) Static Library(或者是Dynamic Framework,如果用了 use_frameworks!選項(xiàng)),所以 CocoaPods 生成的 Static Library 也需要把 Enable Modules 選項(xiàng)給關(guān)掉。但是因?yàn)?CocoaPods 每次執(zhí)行 pod update 的時(shí)候都會(huì)把 Pods 項(xiàng)目重新生成一遍,如果直接在 Xcode 里面修改 Pods 項(xiàng)目里面的 Enable Modules 選項(xiàng),下次執(zhí)行pod update的時(shí)候又會(huì)被改回來。我們需要在 Podfile 里面加入下面的代碼,讓生成的項(xiàng)目關(guān)閉 Enable Modules 選項(xiàng),同時(shí)加入 CC 參數(shù),否則 pod 在編譯的時(shí)候就無法使用 CCache 加速:

 

  1. post_install do |installer_representation| 
  2. installer_representation.pods_project.targets.each do |target| 
  3. target.build_configurations.each do |config| 
  4. #關(guān)閉 Enable Modules 
  5. config.build_settings['CLANG_ENABLE_MODULES'] = 'NO' 
  6. # 在生成的 Pods 項(xiàng)目文件中加入 CC 參數(shù),路徑的值根據(jù)你自己的項(xiàng)目來修改 
  7. config.build_settings['CC'] = '$(PODS_ROOT)/../ccache-clang' 
  8. end 
  9. end 
  10. end 

需要注意的是,如果你使用的某個(gè) Pod 引用了系統(tǒng)框架,例如AFNetworking引用了System Configuration,你需要在你自己項(xiàng)目的Build Phrase -> Link Binary With Libraries里面代為引入,否則你編譯時(shí)可能會(huì)收到 Undefined symbols xxx for architecture yyy一類的錯(cuò)誤。有點(diǎn)回到了原始時(shí)代的感覺,但考慮到編譯速度的極大提升,這一點(diǎn)代價(jià)可以接受。

集成問題排查

重點(diǎn)關(guān)注日志文件的輸出和ccache -s 命令的統(tǒng)計(jì),如果在日志中看到了 unsupported compiler option -fmodules 這樣的字眼,就是你的 Enable Modules 沒有關(guān)掉了,根據(jù)前面的步驟仔細(xì)檢查。其他問題,參考官方文檔的 Troubleshooting。

進(jìn)一步的優(yōu)化

移除 Precompiled Header File

PCH 的內(nèi)容會(huì)被附加在每個(gè)文件前面,而 CCache 是根據(jù)文件內(nèi)容的 MD4 摘要來查找緩存的,因此當(dāng)你修改了 PCH 或者 PCH 引用到的頭文件的內(nèi)容時(shí),會(huì)造成全部緩存失效,只能全體重新編譯。CCache 在首次編譯的時(shí)候因?yàn)樾枰戮彺?,?huì)造成編譯時(shí)間變長,對貝聊的項(xiàng)目來說變長了差不多一倍。因此如果 PCH 或者 PCH 引入的文件被頻繁修改的話,緩存就會(huì)頻繁地 miss,這種情況下還不如不用 CCache。

為了避免以上這種情況,我建議在 PCH 里面盡量少引入頭文件,只保留比較少更改的系統(tǒng)框架和第三方類庫的頭文件。最好是把 PCH 徹底刪除,反正蘋果現(xiàn)在也不建議使用 PCH 了,Xcode 新建的項(xiàng)目默認(rèn)都是不帶 PCH 的。

在團(tuán)隊(duì)內(nèi)部共享緩存文件夾

這個(gè)優(yōu)化方式我嘗試過,最終效果不是很好,因此沒有采用。CCache 的官方文檔中有一段關(guān)于共享緩存文件夾的說明,描述了如何修改 CCache 的配置,讓編譯緩存能夠在多臺電腦之間公用,理論上只要其中一個(gè)人編譯過的文件其他人就能直接下載到了,節(jié)約了整個(gè)團(tuán)隊(duì)的時(shí)間。因?yàn)?Buck 也有類似的機(jī)制,我覺得值得嘗試一下,便在公司局域網(wǎng)內(nèi)搭建了一個(gè) OwnCloud 網(wǎng)盤,讓大家把自己電腦上的 CCache 緩存目錄放上去共享。雖然試驗(yàn)是成功了,但是實(shí)際效果并不好。因?yàn)橥皆诙嗯_電腦上大小達(dá)到幾個(gè)G的緩存目錄,需要在后臺進(jìn)行很多文件的對比和傳輸?shù)墓ぷ?,在編譯的同時(shí)進(jìn)行這些操作會(huì)耗費(fèi)不少計(jì)算資源,反而會(huì)拖慢編譯速度。加上移除掉 PCH 后,其實(shí)緩存的命中率已經(jīng)相當(dāng)可觀了,不太需要通過共享緩存來進(jìn)一步提高緩存命中率,所以我最后放棄了共享緩存這個(gè)想法。如果你對緩存命中率還是不滿意的話,可以考慮往這個(gè)方向嘗試一下。

總結(jié)

通過集成 CCache,我們的項(xiàng)目在 Xcode 里面的打包(在菜單里面選擇 Product -> Archive)時(shí)間從 11~12分鐘減少到了 130 秒,大概有五倍的提升,成果喜人。集成的過程其實(shí)很簡單,我從開始嘗試到集成成功總共就花了兩個(gè)小時(shí)。如果你也被過長的編譯時(shí)間困擾,建議嘗試一下。

責(zé)任編輯:未麗燕 來源: 貝聊移動(dòng)開發(fā)團(tuán)隊(duì)
相關(guān)推薦

2021-05-12 11:19:08

DevTools堆棧追蹤

2009-03-30 14:12:38

LinuxUnladenSwallow

2017-05-11 11:30:43

MySQL查詢速度

2020-02-28 09:26:54

PythonGo語言C語言

2022-04-27 09:24:22

前端代碼速度

2020-02-14 09:40:14

人工智能機(jī)器學(xué)習(xí)技術(shù)

2017-05-10 16:09:12

MySQL數(shù)據(jù)庫查詢

2019-09-24 09:25:05

Vue項(xiàng)目加載

2024-01-03 17:39:23

云計(jì)算混合云

2018-07-30 15:05:26

Hadoop大數(shù)據(jù)集群

2020-05-26 13:25:00

語言編譯代碼

2016-09-07 15:02:03

ElasticSear索引速度

2024-06-27 11:00:07

2023-05-04 07:34:37

Rust代碼CPU

2020-08-21 10:59:10

微軟服務(wù)器運(yùn)維

2021-07-21 17:03:35

Chrome網(wǎng)絡(luò)釣魚瀏覽器

2011-05-30 13:28:00

PHP

2009-06-16 14:58:17

IBM固態(tài)存儲(chǔ)

2015-11-05 11:45:32

OpenStack開源項(xiàng)目產(chǎn)品設(shè)計(jì)

2012-10-30 14:08:59

Titan超級計(jì)算機(jī)NVIDIA
點(diǎn)贊
收藏

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

午夜精品久久久久久久99热| 欧美亚洲一区三区| 精品视频一区在线| 国模私拍一区二区| 91tv官网精品成人亚洲| 欧美va亚洲va香蕉在线| 国产淫片免费看| 欧美一区二区三区在线观看免费| 国产在线精品一区二区三区不卡| 97高清免费视频| 香蕉久久久久久久| 精品欧美午夜寂寞影院| 欧美日韩国产综合视频在线观看 | 亚洲一区在线观看免费| 久久偷窥视频| 国产成人精品亚洲精品色欲| 久久久久久婷| 国内精品模特av私拍在线观看| 性欧美精品男男| 草莓视频一区二区三区| 欧美日韩高清影院| 欧美女人性生活视频| 超碰个人在线| 欧美激情一区二区在线| 好吊色欧美一区二区三区| 在线免费看91| 久久美女性网| 性欧美亚洲xxxx乳在线观看| 伊人久久久久久久久久久久久久| 羞羞答答一区二区| 日韩精品专区在线| caoporm在线视频| 亚洲伦理影院| 欧美午夜无遮挡| 日韩精品视频在线观看视频| 婷婷视频在线| 国产欧美在线观看一区| 久久大片网站| www.色亚洲| 精品一二三四在线| 国产精品久久久久久超碰| 伊人手机在线视频| 国产精品一级| 欧美在线激情视频| 天天操天天射天天爽| 欧美人成网站| 久99九色视频在线观看| 精品无码久久久久成人漫画| 99精品美女| 色噜噜狠狠色综合网图区| 日本一区二区视频在线播放| 综合亚洲自拍| 亚洲区在线播放| 老牛影视av老牛影视av| 蜜乳av综合| 亚洲人成电影网站| 精品无码人妻一区二区免费蜜桃| 精品在线观看入口| 亚洲天堂视频在线观看| 国产三级在线观看完整版| 国产一区三区在线播放| 国产亚洲欧洲高清| 欧美日韩生活片| 亚洲精品二区三区| 欧美另类高清videos| 精品视频在线观看免费| 日韩视频不卡| 国产激情综合五月久久| 中文字幕一区二区三区四区免费看 | 凹凸精品一区二区三区| 日本在线播放一区二区三区| 国产精品网站入口| 91免费视频播放| 国产精品亚洲成人| 国产视色精品亚洲一区二区| 五月婷婷深深爱| 国产午夜精品理论片a级大结局| 欧美日韩亚洲综合一区二区三区激情在线 | 亚洲美女网站18| 黄网页免费在线观看| 一区二区三区精品视频| 91视频 -- 69xx| 国产成人精品一区二区三区视频 | 96成人在线视频| 色窝窝无码一区二区三区| 久久久久久电影| 自拍偷拍亚洲色图欧美| 成人高潮aa毛片免费| 色婷婷综合久久久| 一个人看的视频www| 国产图片一区| 日韩在线中文字| 国产精品 欧美 日韩| 久久久噜噜噜| 91沈先生在线观看| 亚洲 另类 春色 国产| 国产精品电影一区二区三区| 日本a视频在线观看| 欧洲精品一区二区三区| 日韩欧美一区二区在线视频| 大又大又粗又硬又爽少妇毛片| 亚洲91精品| 欧美诱惑福利视频| 国产白浆在线观看| 国产夜色精品一区二区av| 99re6这里有精品热视频| 亚洲天堂资源| 日韩欧美视频一区| 欧美成人短视频| 在线综合视频| 不卡一卡2卡3卡4卡精品在| 欧美色视频免费| 夜夜精品视频一区二区| 一区二区在线免费看| 蜜臀av免费一区二区三区| 欧美第一淫aaasss性| 一区二区视频免费| 久久美女艺术照精彩视频福利播放 | 欧美丝袜自拍制服另类| av一二三不卡影片| 国产一区二区高清| 伊甸园亚洲一区| 国产69精品久久久久9999人| 国产精品久久久久久福利| 国产精品香蕉一区二区三区| 欧美大香线蕉线伊人久久| 国产精品va在线观看视色| 日本精品一区二区三区高清| 无码人妻精品一区二区三区99不卡| 国产日产一区 | 精品午夜久久福利影院| 免费在线成人av| 97久久人人超碰caoprom| 欧美一级日韩免费不卡| 欧日韩不卡视频| 久久精品一本| 欧美日韩另类丝袜其他| 亚洲优女在线| 日韩av在线资源| 日本污视频在线观看| 高清免费成人av| 粉嫩av一区二区三区天美传媒| 欧美在线一级| 一区二区三欧美| 日韩乱码一区二区三区| 国产色91在线| 成年人视频在线免费| 国产99久久久国产精品成人免费| 69久久夜色精品国产69| 欧美一区二区三区成人片在线| 一区二区三区中文免费| 91丨porny丨九色| 欧美激情91| 99久久国产免费免费| 羞羞污视频在线观看| 欧美一二三区在线| 欧美成人精品欧美一| 国产一区二区免费视频| 成人免费在线视频播放| 精品欧美午夜寂寞影院| 欧美自拍大量在线观看| 久久久久久久久亚洲精品| 色婷婷激情一区二区三区| 国产精品一二三区在线观看| 日本欧美大码aⅴ在线播放| 亚洲成色www久久网站| 国产伊人久久| 欧美国产激情18| 欧美一级一区二区三区| 一本久久a久久精品亚洲| 影音先锋男人在线| 国产一区二区久久| 成 年 人 黄 色 大 片大 全| 西瓜成人精品人成网站| 国产精品久久久久久久久影视 | 久久久久久久久爱| 日本v片在线免费观看| 欧美亚洲一区三区| 在线免费观看亚洲视频| youjizz久久| 免费在线观看的毛片| 999精品一区| 国产精品久久7| 希岛爱理一区二区三区av高清| 色悠悠久久久久| 懂色av成人一区二区三区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本一区二区在线不卡| 尤物网站在线看| 91久久亚洲| 亚洲欧美日韩精品在线| 91精品丝袜国产高跟在线| 日本成人免费在线| 51xtv成人影院| 亚洲欧美国产一区二区三区| 国产精品久久久久久久成人午夜| 亚洲成av人片观看| 国产主播av在线| 91小视频在线| 日韩精品视频网址| 老**午夜毛片一区二区三区| 亚洲天堂第一区| 亚洲精品国产setv| 92看片淫黄大片欧美看国产片| 成人性生活av| 欧美激情精品久久久久久| 国产日韩精品在线看| 精品久久久久久久人人人人传媒 | 亚洲高清资源综合久久精品| 中文字幕亚洲在线观看| 国产精品亚洲第一区| 中文在线最新版地址| 欧美国产视频一区二区| 尤物在线视频| 一区二区三区无码高清视频| 性一交一乱一精一晶| 欧美日韩国产免费| 免费观看日批视频| 五月激情综合网| 少妇久久久久久被弄高潮| 日本一二三不卡| 人妻熟女aⅴ一区二区三区汇编| 国产在线看一区| 污版视频在线观看| 日韩高清在线一区| 国产美女网站在线观看| 黄色在线成人| 青草全福视在线| 91tv精品福利国产在线观看| 亚洲精品无人区| 精品一区电影| 日产国产精品精品a∨| 亚洲成a人片77777在线播放| 好吊色欧美一区二区三区四区| 五月亚洲婷婷| av资源站久久亚洲| 亚洲精品在线a| 91成人免费看| 伊人www22综合色| av一区观看| ady日本映画久久精品一区二区| 亚洲一区二区三区777| 国产精品视频一区二区三区| 成人精品aaaa网站| 伊人久久大香| 亚洲字幕在线观看| 综合伊人久久| 国产一区二区三区奇米久涩| 国产精品22p| 国产亚洲情侣一区二区无| 国产劲爆久久| 久久99精品久久久久子伦| 色婷婷综合久久久久久| 久久精品日韩精品| 精品不卡一区| 亚洲看片网站| 欧美一区综合| 一卡二卡三卡视频| 国产情侣久久| 欧美伦理视频在线观看| 久久99久久99小草精品免视看| 中文 日韩 欧美| 成人免费视频网站在线观看| 国产精品一区二区人妻喷水| 91在线视频在线| av中文字幕免费观看| 中文一区二区在线观看| 日本精品在线免费观看| 夜夜嗨av一区二区三区中文字幕| 成人免费区一区二区三区| 一本色道久久综合亚洲精品按摩| 中国一级片黄色一级片黄| 91精品国产综合久久福利软件| 成人福利小视频| 亚洲精品视频中文字幕| av中文字幕一区二区三区| 毛片精品免费在线观看| freexxx性亚洲精品| 国产精品第一区| 日本免费一区二区视频| 久久婷婷开心| 久久精品亚洲人成影院| 亚洲国产成人精品无码区99| 日本不卡一区二区三区| 国产伦精品一区二区三区妓女下载 | 五月花成人网| 欧美在线一区二区三区四| www.成人在线视频| 国产激情一区二区三区在线观看 | 91xxx视频| 国产精品一级| 国产又粗又猛大又黄又爽| 91视频精品在这里| 国产又粗又硬又长又爽| 日韩欧美黄色动漫| 午夜精品小视频| 一区二区欧美亚洲| 爱草tv视频在线观看992| 国产在线拍揄自揄视频不卡99| 久久porn| 无码人妻aⅴ一区二区三区日本| 午夜亚洲激情| 农村末发育av片一区二区| 欧美激情在线免费观看| 日韩成年人视频| 337p亚洲精品色噜噜狠狠| 四虎精品在线| 欧美大片欧美激情性色a∨久久| 婷婷六月国产精品久久不卡| 国产区欧美区日韩区| 一区二区三区在线观看免费| 成人在线免费播放视频| 成人免费av资源| www.xxxx日本| 欧美日韩三级在线| 牛牛影视精品影视| 欧美一区二区三区精品电影| 亚洲性视频在线| 欧美爱爱视频网站| 麻豆一区二区三| 免费视频91蜜桃| 日本国产一区二区| 台湾av在线二三区观看| 欧美精品aaa| 日韩一级淫片| 好吊色这里只有精品| 免费成人在线网站| 蜜臀久久99精品久久久久久| 欧美日韩美女在线观看| 欧美77777| 久久久久久尹人网香蕉| 日本一区影院| 日本a级片在线播放| 紧缚捆绑精品一区二区| 超碰97av在线| 欧美日韩一区二区三区不卡| 九色网友自拍视频手机在线| 欧亚精品中文字幕| 无码日韩精品一区二区免费| 久久国产午夜精品理论片最新版本| 国产资源在线一区| 熟女av一区二区| 91精品在线免费观看| 国产在线一区二区视频| 91久久在线观看| 欧美日韩亚洲一区二区三区在线| 麻豆传媒在线看| 亚洲图片一区二区| 五月天婷婷在线播放| 欧美亚洲另类激情另类| 亚洲最好看的视频| 黄色三级视频片| 国产精品欧美精品| 国产孕妇孕交大片孕| 美女福利精品视频| 国产成人精品亚洲线观看| 女人喷潮完整视频| 久久精品视频免费| 中国一区二区视频| 久久91精品国产| 久久99偷拍| 玩弄japan白嫩少妇hd| 国产精品美女久久久久aⅴ| 96亚洲精品久久久蜜桃| 久99久在线视频| 人人香蕉久久| 九九热在线免费| 一区二区三区在线视频观看58| 天天操天天干天天爱| 国产精品第3页| 亚洲一区色图| 免费成人深夜夜行p站| 欧美性videosxxxxx| 影音先锋男人在线资源| 国产亚洲一区二区三区在线播放 | 搞黄视频免费在线观看| 国产乱肥老妇国产一区二| 欧美午夜不卡| 在线 丝袜 欧美 日韩 制服| 欧美日韩中文字幕精品| 亚洲羞羞网站| 欧美国产二区| 国内精品写真在线观看| 日产欧产va高清| 国产一区二区三区欧美| 亚洲性视频在线| 青青草精品视频在线观看| 亚洲精品视频在线看| 男操女在线观看| 亚洲自拍在线观看| 丝瓜av网站精品一区二区| 欧美成人精品激情在线视频| 亚洲毛片在线观看.| 欧美高清一级片| av在线无限看| 亚洲国产你懂的| 欧美18hd| 欧美人xxxxx| 成人一区二区在线观看| 自拍偷拍色综合|