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

如何將 DevTools的堆棧追蹤速度提高10倍

開(kāi)發(fā) 前端
天分享的內(nèi)容是如何將Chrome DevTools的堆棧追蹤速度提高了10倍。之前聽(tīng)工作6年的同事說(shuō),DevTools會(huì)影響頁(yè)面性能。正好逛國(guó)外社區(qū)的時(shí)候,發(fā)現(xiàn)這篇不錯(cuò)的文章,借此機(jī)會(huì)分享給大家。

[[399057]]

本文轉(zhuǎn)載自微信公眾號(hào)「TianTianUp」,作者小弋。轉(zhuǎn)載本文請(qǐng)聯(lián)系TianTianUp公眾號(hào)。

大家好,我是TianTian。

今天分享的內(nèi)容是如何將Chrome DevTools的堆棧追蹤速度提高了10倍。

之前聽(tīng)工作6年的同事說(shuō),DevTools會(huì)影響頁(yè)面性能。正好逛國(guó)外社區(qū)的時(shí)候,發(fā)現(xiàn)這篇不錯(cuò)的文章,借此機(jī)會(huì)分享給大家。

正文

Web開(kāi)發(fā)人員已經(jīng)開(kāi)始期待在調(diào)試他們的代碼時(shí)幾乎沒(méi)有性能影響。然而,這種期望絕不是普遍的。一個(gè)C++開(kāi)發(fā)人員永遠(yuǎn)不會(huì)期望他們的應(yīng)用程序的調(diào)試構(gòu)建能夠達(dá)到生產(chǎn)性能,而在Chrome瀏覽器的早期,僅僅是打開(kāi)DevTools就會(huì)大大影響頁(yè)面的性能。

現(xiàn)在已經(jīng)感覺(jué)不到這種性能下降了,這是多年來(lái)對(duì)DevTools和V8的調(diào)試能力投資的結(jié)果。盡管如此,我們永遠(yuǎn)無(wú)法將DevTools的性能開(kāi)銷(xiāo)降低到零。設(shè)置斷點(diǎn)、踏過(guò)代碼、收集堆棧痕跡、捕獲性能跟蹤等等,都會(huì)在不同程度上影響執(zhí)行速度。畢竟,觀察到的東西會(huì)改變它。

但當(dāng)然,DevTools的開(kāi)銷(xiāo)--像任何調(diào)試器一樣--應(yīng)該是合理的。最近我們看到,在某些情況下,DevTools會(huì)拖慢應(yīng)用程序的速度,以至于它不能再使用的報(bào)告數(shù)量顯著增加。下面你可以看到一個(gè)來(lái)自報(bào)告chromium:1069425的并排比較,說(shuō)明了僅僅打開(kāi)DevTools的性能開(kāi)銷(xiāo)。

報(bào)告chromium:1069425鏈接點(diǎn)這里:

  1. https://bugs.chromium.org/p/chromium/issues/detail?id=1069425 

查看這個(gè)視頻:

正如你從視頻中看到的,速度降低了5-10倍,這顯然是不可接受的。

第一步是要了解所有的時(shí)間都去哪兒了,是什么導(dǎo)致了DevTools打開(kāi)時(shí)的巨大速度下降。

在Chrome渲染器進(jìn)程上使用Linux perf,發(fā)現(xiàn)整個(gè)渲染器執(zhí)行時(shí)間的分布如下。

圖1

雖然我們有點(diǎn)期待看到與收集堆棧痕跡有關(guān)的東西,但我們不會(huì)想到,整個(gè)執(zhí)行時(shí)間的大約90%都用于符號(hào)化堆棧幀。

這里的符號(hào)化是指從原始堆棧幀中解析函數(shù)名和具體的源位置--腳本中的行號(hào)和列號(hào)的行為。

方法名推斷

更令人驚訝的是,幾乎所有的時(shí)間都流向了V8中的JSStackFrame::GetMethodName()函數(shù)。

盡管我們從以前的調(diào)查中知道,JSStackFrame::GetMethodName()在性能問(wèn)題的土地上并不陌生。

這個(gè)函數(shù)試圖為那些被認(rèn)為是方法調(diào)用的框架(代表obj.func()而不是func()形式的函數(shù)調(diào)用的框架)計(jì)算方法的名稱(chēng)。

快速查看代碼發(fā)現(xiàn),它的工作原理是對(duì)對(duì)象及其原型鏈進(jìn)行全面的遍歷,并尋找:

  • 數(shù)據(jù)屬性,其值是func的閉包
  • 訪問(wèn)器屬性,其中g(shù)et或set等同于func閉包。

現(xiàn)在,雖然這本身聽(tīng)起來(lái)并不特別便宜,但它也聽(tīng)起來(lái)不像是能解釋這種可怕的減速。

因此,我們開(kāi)始挖掘chromium:1069425中報(bào)告的例子,我們發(fā)現(xiàn)堆棧痕跡是為異步任務(wù)以及來(lái)自classes.js的日志信息收集的,這是一個(gè)10MB的JavaScript文件。

仔細(xì)觀察發(fā)現(xiàn),這基本上是一個(gè)Java運(yùn)行時(shí),加上編譯成JavaScript的應(yīng)用程序代碼。堆棧跟蹤包含了幾個(gè)框架,其中有一些方法被調(diào)用到一個(gè)對(duì)象A上,所以我們認(rèn)為可能值得了解我們正在處理的是哪種對(duì)象。

chromium:1069425 : https://bugs.chromium.org/p/chromium/issues/detail?id=1069425

圖2

顯然,從Java到JavaScript的編譯器產(chǎn)生了一個(gè)對(duì)象,上面有高達(dá)82,203個(gè)函數(shù)。

這顯然開(kāi)始變得有趣了。接下來(lái)我們回到V8的JSStackFrame::GetMethodName(),以了解是否有一些低垂的果實(shí)可以被我們采摘。

  • 它的工作原理是首先將函數(shù)的 "名字 "作為對(duì)象的一個(gè)屬性進(jìn)行查找,如果找到了,則檢查該屬性的值是否與該函數(shù)相匹配。
  • 如果函數(shù)沒(méi)有名字,或者對(duì)象沒(méi)有匹配的屬性,它就會(huì)通過(guò)遍歷對(duì)象的所有屬性及其原型來(lái)進(jìn)行反向查找。

在我們的示例中,所有函數(shù)都是匿名的,并且具有空的“名稱(chēng)”屬性。

  1. A.SDV = function() { 
  2.    // ... 
  3. }; 

最初的發(fā)現(xiàn)是將反向查找分為兩個(gè)步驟(針對(duì)對(duì)象本身及其原型鏈中的每個(gè)對(duì)象執(zhí)行):

  • 提取所有可枚舉屬性的名稱(chēng),然后
  • 對(duì)每個(gè)名稱(chēng)執(zhí)行通用屬性查找,測(cè)試結(jié)果屬性值是否與我們要查找的閉包相匹配。

這看起來(lái)是一個(gè)低效的操作,因?yàn)樘崛∶中枰弑樗械膶傩浴Ec其做兩遍--O(N)的名字提取和O(N log(N))的測(cè)試,我們可以在單遍中完成所有工作,并直接檢查屬性值。這使得整個(gè)函數(shù)的速度提高了2-10倍左右。

第二個(gè)發(fā)現(xiàn)甚至更有趣。雖然這些函數(shù)在技術(shù)上是匿名函數(shù),但V8引擎還是為它們記錄了我們稱(chēng)之為推斷的名稱(chēng)。對(duì)于以obj.foo = function() {...}形式出現(xiàn)在賦值右側(cè)的函數(shù)字面,V8解析器會(huì)記住 "obj.foo "作為該函數(shù)字面的推斷名稱(chēng)。

因此,在我們的例子中,雖然我們沒(méi)有可以直接查找的正確名稱(chēng),但我們確實(shí)有足夠接近的東西。對(duì)于上面的A.SDV = function() {...}例子,我們有 "A.SDV "作為推斷名稱(chēng),我們可以通過(guò)尋找最后一個(gè)點(diǎn)從推斷名稱(chēng)中得出屬性名稱(chēng),然后去尋找對(duì)象上的屬性 "SDV"。

這幾乎在所有的情況下都起到了作用,用單一的屬性查找取代了昂貴的全面遍歷。這兩項(xiàng)改進(jìn)是CL的一部分,大大降低了chromium:1069425中報(bào)告的例子的速度下降。

錯(cuò)誤堆棧

我們本可以在這里收工了,但是有些事情是不對(duì)勁的,因?yàn)镈evTools從來(lái)不使用堆棧框架的方法名。事實(shí)上,C++ API中的v8::StackFrame類(lèi)甚至沒(méi)有提供獲取方法名稱(chēng)的方法。因此,我們最終會(huì)首先調(diào)用JSStackFrame::GetMethodName(),這似乎是錯(cuò)誤的。

相反,我們使用(和公開(kāi))方法名稱(chēng)的唯一地方是在JavaScript堆棧跟蹤API中。為了理解這種用法,請(qǐng)考慮下面這個(gè)簡(jiǎn)單的例子error-methodname.js:

  1. function foo() { 
  2.     console.log((new Error).stack); 
  3.  
  4. var object = {bar: foo}; 
  5. object.bar(); 

這里我們有一個(gè)函數(shù)foo,它被安裝在對(duì)象的名稱(chēng) "bar "下。在Chromium中運(yùn)行這個(gè)片段,會(huì)產(chǎn)生以下輸出:

  1. Error 
  2.     at Object.foo [as bar] (error-methodname.js:2) 
  3.     at error-methodname.js:6 

在這里,我們看到了方法名查找的作用。最上面的堆棧框架被顯示為通過(guò)名為bar的方法在Object的實(shí)例上調(diào)用函數(shù)foo。所以非標(biāo)準(zhǔn)的error.stack屬性大量使用了JSStackFrame::GetMethodName(),事實(shí)上,我們的性能測(cè)試也表明,我們的改變使事情大大加快。

圖3

但回到Chrome DevTools的話題上,即使沒(méi)有使用error.stack,方法名稱(chēng)也被計(jì)算出來(lái)了,這看起來(lái)不對(duì)。

這里有一些歷史可以幫助我們:

傳統(tǒng)上,V8有兩種不同的機(jī)制來(lái)收集和表示上述兩種不同的API(C++ v8::StackFrame API和JavaScript stack trace API)的堆棧跟蹤。有兩種不同的方式來(lái)做(大致)相同的事情是容易出錯(cuò)的,并且經(jīng)常導(dǎo)致不一致和錯(cuò)誤,所以在2018年底,我們啟動(dòng)了一個(gè)項(xiàng)目,以解決堆棧跟蹤捕獲的單一瓶頸。

這個(gè)項(xiàng)目非常成功,大大減少了與堆棧跟蹤收集有關(guān)的問(wèn)題的數(shù)量。大部分通過(guò)非標(biāo)準(zhǔn)的error.stack屬性提供的信息也是懶散地計(jì)算的,只有在真正需要的時(shí)候才會(huì)計(jì)算,但作為重構(gòu)的一部分,我們對(duì)v8::StackFrame對(duì)象采用了同樣的技巧。

所有關(guān)于堆棧框架的信息都是在任何方法第一次被調(diào)用時(shí)計(jì)算的。

這通常會(huì)提高性能,但不幸的是,它被證明與Chromium和DevTools中使用這些C++ API對(duì)象的方式有些相反。

特別是由于我們引入了一個(gè)新的v8::internal::StackFrameInfo類(lèi),它持有關(guān)于堆棧框架的所有信息,這些信息通過(guò)v8::StackFrame或通過(guò)error.stack公開(kāi),我們總是計(jì)算兩個(gè)API提供的信息的超集,這意味著對(duì)于v8::StackFrame的使用(特別是對(duì)于DevTools),我們也將計(jì)算方法名稱(chēng),只要關(guān)于堆棧框架的任何信息被請(qǐng)求。事實(shí)證明,DevTools總是立即請(qǐng)求源和腳本信息。

基于這一認(rèn)識(shí),我們能夠重構(gòu)并大幅簡(jiǎn)化堆棧框架的表示,并使其更加懶惰,因此整個(gè)V8和Chromium的使用現(xiàn)在只需要支付計(jì)算他們所要求的信息的成本。這給DevTools和其他Chromium用例帶來(lái)了巨大的性能提升,它們只需要關(guān)于堆棧框架的一小部分信息(基本上只是腳本名稱(chēng)和以行和列偏移形式存在的源位置),并為更多的性能改進(jìn)打開(kāi)了大門(mén)。

函數(shù)名稱(chēng)

隨著上述重構(gòu)的完成,符號(hào)化的開(kāi)銷(xiāo)(在v8_inspector::V8Debugger::symbolize中花費(fèi)的時(shí)間)被減少到整個(gè)執(zhí)行時(shí)間的15%左右,而且我們可以更清楚地看到V8在(收集和)符號(hào)化堆棧幀以便在DevTools中使用時(shí)的時(shí)間。

[[399058]]

圖4

第一件引人注目的事情是計(jì)算行數(shù)和列數(shù)的累積成本。

這里昂貴的部分實(shí)際上是計(jì)算腳本中的字符偏移量(基于我們從V8得到的字節(jié)碼偏移量),結(jié)果發(fā)現(xiàn),由于我們上面的重構(gòu),我們做了兩次,一次是在計(jì)算行號(hào)時(shí),另一次是在計(jì)算列號(hào)時(shí)。

在v8::internal::StackFrameInfo實(shí)例上緩存源位置有助于快速解決這個(gè)問(wèn)題,并且完全消除了v8::internal::StackFrameInfo::GetColumnNumber的任何配置文件。

對(duì)我們來(lái)說(shuō),更有趣的發(fā)現(xiàn)是,v8::StackFrame::GetFunctionName在我們看的所有配置文件中都出奇地高。深入研究后我們發(fā)現(xiàn),計(jì)算我們?cè)贒evTools中為堆棧框架中的函數(shù)顯示的名稱(chēng)是不必要的,成本很高。

  • 首先尋找非標(biāo)準(zhǔn)的 "displayName "屬性,如果它產(chǎn)生了一個(gè)具有字符串值的數(shù)據(jù)屬性,我們就會(huì)使用它。
  • 否則就返回到尋找標(biāo)準(zhǔn)的 "name "屬性,并再次檢查該屬性是否產(chǎn)生了一個(gè)值為字符串的數(shù)據(jù)屬性。
  • 并最終返回到由V8解析器推斷出的、存儲(chǔ)在函數(shù)字面上的內(nèi)部調(diào)試名稱(chēng)。

"displayName "屬性是為了解決函數(shù)實(shí)例上的 "name "屬性在JavaScript中只讀且不可配置的問(wèn)題而添加的,但它從未被標(biāo)準(zhǔn)化,也沒(méi)有被廣泛使用,因?yàn)闉g覽器的開(kāi)發(fā)工具添加了函數(shù)名稱(chēng)推理,在99.9%的情況下都能完成工作。

除此之外,ES2015讓Function實(shí)例上的 "name "屬性變得可配置,完全消除了對(duì)特殊 "displayName "屬性的需求。

由于 "displayName "的負(fù)向查找成本很高,而且并不是真的需要(ES2015是在五年前發(fā)布的),我們決定從V8(和DevTools)中刪除對(duì)非標(biāo)準(zhǔn)的fn.displayName屬性的支持。

隨著 "displayName "的負(fù)向查找的完成,v8::StackFrame::GetFunctionName的一半成本被移除。另一半則用于通用的 "name "屬性查詢(xún)。幸運(yùn)的是,我們已經(jīng)有了一些邏輯來(lái)避免在(未觸及的)Function實(shí)例上進(jìn)行昂貴的 "name "屬性查詢(xún),我們?cè)诓痪们暗腣8中引入了這一邏輯,以使Function.prototype.bind()本身更快。我們移植了必要的檢查,允許我們首先跳過(guò)昂貴的通用查詢(xún),結(jié)果是v8::StackFrame::GetFunctionName不再出現(xiàn)在我們考慮的任何配置文件中。

總結(jié)

通過(guò)上述改進(jìn),我們已經(jīng)大大減少了DevTools在堆棧跟蹤方面的開(kāi)銷(xiāo)。

視頻

我們知道仍有各種可能的改進(jìn)。

例如,使用MutationObservers時(shí)的開(kāi)銷(xiāo)仍然很明顯,正如chromium:1077657所報(bào)告的那樣,但就目前而言,我們已經(jīng)解決了主要的痛點(diǎn),而且我們將來(lái)可能會(huì)回來(lái)進(jìn)一步簡(jiǎn)化調(diào)試性能。

 

chromium:1077657: https://bugs.chromium.org/p/chromium/issues/detail?id=1077657

 

責(zé)任編輯:武曉燕 來(lái)源: TianTianUp
相關(guān)推薦

2017-10-20 10:09:01

代碼CocoaPods編譯

2017-05-11 11:30:43

MySQL查詢(xún)速度

2020-02-28 09:26:54

PythonGo語(yǔ)言C語(yǔ)言

2022-04-27 09:24:22

前端代碼速度

2017-05-10 16:09:12

MySQL數(shù)據(jù)庫(kù)查詢(xún)

2020-02-14 09:40:14

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

2011-05-30 13:28:00

PHP

2009-03-30 14:12:38

LinuxUnladenSwallow

2021-07-21 17:03:35

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

2018-07-30 15:05:26

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

2016-09-07 15:02:03

ElasticSear索引速度

2024-06-27 11:00:07

2023-05-04 07:34:37

Rust代碼CPU

2020-06-03 11:26:05

算法移動(dòng)設(shè)技術(shù)

2020-03-13 19:00:38

Windows 10Windows開(kāi)機(jī)速度

2020-08-21 10:59:10

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

2017-05-25 15:14:36

2019-09-24 09:25:05

Vue項(xiàng)目加載

2011-05-19 11:33:38

數(shù)據(jù)庫(kù)訪問(wèn)速度

2021-01-28 08:00:00

Windows 10Windows微軟
點(diǎn)贊
收藏

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

天堂av中文在线观看| 国内老熟妇对白hdxxxx| 国产精品一在线观看| 欧美日韩高清在线| 国产传媒久久久| 日本电影一区二区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 久久视频这里只有精品| 美女又爽又黄免费| 欧美xxxx网站| 欧美色视频日本版| 日本中文不卡| 亚洲精品一区二区三区不卡| 久久精品一区二区三区中文字幕| 久久精品国产精品| 亚洲综合网在线观看| 婷婷综合国产| 欧美三片在线视频观看| 久久av综合网| 黄色网址视频在线观看| 26uuu成人网一区二区三区| 91在线观看免费网站| 狠狠人妻久久久久久| 午夜精品久久| 日韩中文字幕欧美| 北京富婆泄欲对白| 成人豆花视频| 欧美写真视频网站| 男女视频网站在线观看| 成人黄视频在线观看| 久久久精品2019中文字幕之3| av在线亚洲男人的天堂| 一个人看的www日本高清视频| 国产日韩一区二区三区在线播放| 蜜月aⅴ免费一区二区三区| 国产成人精品无码免费看夜聊软件| 日韩激情综合| 欧美精品视频www在线观看| 欧美牲交a欧美牲交aⅴ免费真 | 午夜影院在线观看国产主播| 亚洲久草在线视频| 综合一区中文字幕| av大片在线播放| 国产午夜亚洲精品午夜鲁丝片 | 久草福利在线观看| 日韩一级视频| 欧美日韩在线一区二区| 日本新janpanese乱熟| 中文日产幕无线码一区二区| 午夜免费久久看| 成年人网站国产| 日本高清成人vr专区| 亚洲人成电影网站色mp4| 伊人天天久久大香线蕉av色| 亚洲精品承认| 综合久久久久综合| 国产卡一卡二在线| av毛片在线免费| 一区二区三区在线看| 男人天堂成人网| 中文国产字幕在线观看| 亚洲精品videosex极品| 人妻激情另类乱人伦人妻| 成码无人av片在线观看网站| 亚洲精品久久久久久国产精华液| 亚洲免费视频播放| 亚洲小说区图片| 亚洲国产精品麻豆| www国产精品内射老熟女| 小视频免费在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 国产成人精品视频免费看| 另类专区亚洲| 欧美另类变人与禽xxxxx| 亚洲五月激情网| 51亚洲精品| 国产丝袜视频一区| 免费黄色在线网址| 欧美日韩调教| 日本午夜人人精品| 伊人色综合久久久| 国产精品18久久久久久久网站| 成人精品水蜜桃| 日韩电影网址| 亚洲天堂av一区| 日韩久久久久久久久久久久| 欧洲一区精品| 91.com视频| 偷偷色噜狠狠狠狠的777米奇| 中文精品一区二区| 久久精品99久久香蕉国产色戒| 精品国产乱码久久久久久鸭王1| 激情婷婷亚洲| 国产精品白丝jk喷水视频一区| 国产av无码专区亚洲av麻豆| 99国产精品国产精品久久| 五月天色一区| 91www在线| 欧美乱妇一区二区三区不卡视频| 四虎精品一区二区| 热久久天天拍国产| 午夜剧场成人观在线视频免费观看| 国产精品久久久久久人| 国产乱码一区二区三区| 欧美精品一区二区三区在线看午夜 | 四虎影视成人精品国库在线观看| 精品国产91乱码一区二区三区| 非洲一级黄色片| 亚洲午夜91| 国产精品影片在线观看| 手机在线观看免费av| 亚洲欧洲三级电影| 欧美黄网站在线观看| 欧美不卡在线观看| 一区二区三区视频免费在线观看| 国产亚洲第一页| 老色鬼精品视频在线观看播放| 狠狠久久综合婷婷不卡| 在线观看小视频| 欧美日韩日日夜夜| 免费观看av网站| 尤物在线精品| 91亚洲精品丁香在线观看| 国产天堂在线| 狠狠躁18三区二区一区| 亚洲美女精品视频| 久久久久久久久久久久久久| 国产成人一区二区三区| 香蕉国产在线视频| 亚洲一区在线观看视频| 欧美日韩理论片| jizzjizz欧美69巨大| 欧美综合激情网| 天天操天天干天天爱| 一区二区三区四区高清精品免费观看| 国产精品区在线| 欧州一区二区| 国产精品对白刺激| 久久99久久| 日本韩国一区二区三区| 少妇毛片一区二区三区| 国产欧美大片| 九色视频成人porny| sm在线观看| 亚洲电影免费观看高清完整版在线| 丁香花五月激情| 国产综合久久久久久鬼色| 亚洲在线播放电影| 精品裸体bbb| 中文字幕日韩视频| 一区二区不卡视频在线观看| 国产精品蜜臀av| 亚洲精品性视频| 亚洲成人三区| 51国偷自产一区二区三区| 成人video亚洲精品| 日韩视频永久免费| 久久久久久天堂| 99re亚洲国产精品| 看av免费毛片手机播放| 国产一区二区精品福利地址| 国产精品视频久久| 日本视频不卡| 日韩精品影音先锋| 日韩人妻无码一区二区三区99| 成人18精品视频| 日本xxxxxxx免费视频| 精品72久久久久中文字幕| 国产精品视频免费在线观看| 久久日韩视频| 亚洲黄色有码视频| 二区视频在线观看| 中文字幕免费在线观看视频一区| 高清av免费看| 亚洲视频久久| 日韩区国产区| 日本在线一区二区三区| 午夜精品美女自拍福到在线| 成人77777| 日韩欧美一级精品久久| 国产成人无码一区二区三区在线| 久久久久久亚洲综合影院红桃| 国产一级做a爰片久久| 一区二区影视| 乱一区二区三区在线播放| 久久久加勒比| 欧美大肥婆大肥bbbbb| 三级无遮挡在线观看| 欧美日本在线播放| 日本少妇做爰全过程毛片| 国产亚洲成av人在线观看导航| 天堂在线一区二区三区| 亚洲看片一区| 一区二区三区久久网| 国产精品99久久免费观看| 国产精品久久久av久久久| 日本理论片午伦夜理片在线观看| 亚洲偷欧美偷国内偷| 精品久久久久久亚洲综合网站| 疯狂做受xxxx高潮欧美日本| 熟女av一区二区| 99久久精品国产导航| 国产无色aaa| 亚洲免费网址| 特级西西人体www高清大胆| 国产精品亚洲片在线播放| αv一区二区三区| 成人在线免费av| 日本中文字幕不卡免费| 肉体视频在线| 日韩视频免费在线| 欧美日韩视频精品二区| 日韩美女一区二区三区四区| 亚洲永久精品一区| 懂色av影视一区二区三区| 久久久99精品| 亚洲欧美一区二区三区极速播放| 91网站免费视频| 99热国产精品| 亚洲911精品成人18网站| 麻豆高清免费国产一区| 久久久久狠狠高潮亚洲精品| 合欧美一区二区三区| 性做爰过程免费播放| 欧美xxxx中国| 一本色道久久综合亚洲精品婷婷 | 成人黄色在线视频| 伊人成人免费视频| 久久99精品一区二区三区| 国产成人av影视| 久久狠狠婷婷| 日韩av在线第一页| 亚洲国产婷婷| 亚洲熟妇无码av在线播放| 欧美激情综合色综合啪啪| 在线观看亚洲视频啊啊啊啊| 日韩精品午夜| 神马欧美一区二区| 精品产国自在拍| 欧美男人的天堂| 蜜桃一区二区三区| 欧美精品一区二区三区在线看午夜| 欧美电影免费网站| 精品国产_亚洲人成在线| 另类在线视频| 蜜桃在线一区二区三区精品| 欧美国产不卡| 裸模一区二区三区免费| 亚洲欧美日本伦理| 麻豆传媒一区二区| 狠狠色狠狠色综合婷婷tag| 欧美连裤袜在线视频| 久久91精品| 午夜精品亚洲一区二区三区嫩草 | 天堂av在线网站| 青草国产精品久久久久久| 北条麻妃视频在线| 男女视频一区二区| 深爱五月综合网| 国产精品1024| 日本少妇xxxx| 久久亚洲春色中文字幕久久久| 久久无码人妻精品一区二区三区| 久久久影院官网| 日本少妇xxxxx| 中文字幕av资源一区| 男人操女人的视频网站| 亚洲制服丝袜在线| av资源免费观看| 欧美三级乱人伦电影| 国产高清在线免费| 亚洲成色777777女色窝| 免费资源在线观看| 久久精品99久久久久久久久| 成人福利影视| 国产成人97精品免费看片| 四虎国产精品免费久久| 国产精品国产精品国产专区不卡| 日韩影视在线观看| 伊人久久大香线蕉成人综合网| 欧美成人一区二免费视频软件| 国产免费黄色一级片| 日韩国产欧美视频| 日韩av福利在线观看| 久久久亚洲精品石原莉奈| 欧美肥妇bbwbbw| 欧美日韩午夜视频在线观看| 亚洲熟妇无码久久精品| 亚洲变态欧美另类捆绑| 国产中文字幕在线播放| 欧美成人h版在线观看| 国偷自产一区二区免费视频 | xxxwww在线观看| 亚洲少妇激情视频| 人人超在线公开视频| 国产极品jizzhd欧美| 91精品短视频| 亚洲欧洲一区二区福利| 99在线|亚洲一区二区| 天天干天天操天天做| av中文一区二区三区| 亚洲av无一区二区三区| 精品日本高清在线播放| 国产精品久久久久久久久毛片| 日韩精品黄色网| 在线视频观看国产| 国产精自产拍久久久久久| 欧美日韩一区二区三区在线电影 | 成人短视频在线观看| 国产成人精品久久亚洲高清不卡| 一区三区自拍| 国产精品99久久久久久大便| 久久青草久久| www.啪啪.com| 亚洲另类春色国产| 亚洲视频在线免费播放| 亚洲日本欧美日韩高观看| heyzo高清中文字幕在线| 97久久夜色精品国产九色| 999国产精品视频| av天堂永久资源网| 成人免费观看男女羞羞视频| 午夜激情福利网| 欧美日韩精品一区二区三区蜜桃| 欧美成熟毛茸茸| 欧美亚洲第一页| 美女av一区| 欧美精品一区二区三区三州| 国产精品69毛片高清亚洲| 天天做夜夜爱爱爱| 欧美日韩国产首页| 999国产在线视频| 国产精品a久久久久久| 香蕉国产成人午夜av影院| 欧美视频在线免费播放| 成人综合婷婷国产精品久久| 九九热精品免费视频| 91精品国产综合久久精品图片 | 国自在线精品视频| 高清一区二区三区av| 这里只有精品66| 九一九一国产精品| 麻豆网址在线观看| 9191成人精品久久| aaa大片在线观看| 亚洲专区国产精品| 中文字幕一区二区av| 午夜影院免费观看视频| 亚洲女厕所小便bbb| 国产男男gay体育生网站| 久久九九有精品国产23| 欧一区二区三区| 老子影院午夜伦不卡大全| 不卡视频一二三四| 青草视频在线观看免费| 一区二区三区美女xx视频| 日韩毛片一区| 日韩精品第1页| 成人精品一区二区三区四区| 国产精品美女毛片真酒店| 亚洲第一精品夜夜躁人人爽| 色吧亚洲日本| 亚洲精品人成| 国产高清视频一区| 日韩在线视频免费播放| 国产性色av一区二区| 日韩成人在线电影| 日韩一二区视频| av电影在线观看一区| 日韩精品一区二区亚洲av观看| 日韩在线观看你懂的| 国产一级免费视频| 91在线免费播放| 欧美a∨亚洲欧美亚洲| 亚洲天堂男人天堂女人天堂| 青青伊人久久| 久久久久久免费看| 久久蜜桃av一区二区天堂| 国产一区二区三区三州| 久久久久久伊人| 国产一区二区三区四区| 色婷婷一区二区三区在线观看| 精品久久久精品| 欧美激情视频在线播放| 国产综合精品一区二区三区| 免费久久99精品国产| 国产午夜福利片| 中文字幕国产亚洲| 日韩中文一区二区| 日韩一级免费在线观看| 亚洲黄色av一区| 国产原创av在线| 国产激情一区二区三区在线观看 | 亚洲精品乱码久久久久久久久| 亚洲av成人精品一区二区三区在线播放| 国产精品劲爆视频| 欧美精品偷拍| 欧美午夜激情影院| 精品国产制服丝袜高跟| 国产极品久久久久久久久波多结野|