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

淺析前端頁面渲染機制

開發 前端
作為一個前端開發,最常見的運行環境應該是瀏覽器吧,為了更好的通過瀏覽器把優秀的產品帶給用戶,也為了更好的發展自己的前端職業之路,有必要了解從我們在瀏覽器地址欄輸入網址到看到頁面這期間瀏覽器是如何進行工作的,進而了解如何更好的優化實踐,本篇主要圍繞這兩點展開闡述。

作為一個前端開發,最常見的運行環境應該是瀏覽器吧,為了更好的通過瀏覽器把優秀的產品帶給用戶,也為了更好的發展自己的前端職業之路,有必要了解從我們在瀏覽器地址欄輸入網址到看到頁面這期間瀏覽器是如何進行工作的,進而了解如何更好的優化實踐,本篇主要圍繞這兩點展開闡述。前端頁面渲染機制可謂是老生常談,但又很有必要再談的話題,于是還是決定寫一篇,即是對知識的回顧總結,又能與大家分享,何樂而不為。網上相關類型的文章也很多,有興趣的可以多學習一下。

瀏覽器

在介紹瀏覽器工作流程之前,先了解一下主流瀏覽器的基礎結構,本文所介紹的瀏覽器主要為開源的Chrome,FireFox及部分開源的Safari,這也是目前市場占比***的幾大瀏覽器,以本人博客網站為例,可以大致看出各瀏覽器使用比例: 

 

 

各瀏覽器使用比例 

瀏覽器基礎結構

瀏覽器基礎結構主要包括如下7部分:

1.用戶界面(User Interface):用戶所看到及與之交互的功能組件,如地址欄,返回,前進按鈕等;

2.瀏覽器引擎(Browser engine):負責控制和管理下一級的渲染引擎;

3.渲染引擎(Rendering engine):負責解析用戶請求的內容(如HTML或XML,渲染引擎會解析HTML或XML,以及相關CSS,然后返回解析后的內容);

4.網絡(Networking):負責處理網絡相關的事務,如HTTP請求等;

5.UI后端(UI backend):負責繪制提示框等瀏覽器組件,其底層使用的是操作系統的用戶接口;

6.JavaScript解釋器(JavaScript interpreter):負責解析和執行JavaScript代碼;

7.數據存儲(Data storage):負責持久存儲諸如cookie和緩存等應用數據。 

 

 

瀏覽器基礎結構 

瀏覽器內核

各大主要瀏覽器使用內核也是有差別的,大致可以分為以下幾類:

  • Trident內核: IE
  • Webkit內核:Chrome,Safari
  • Gecko內核:FireFox

網絡

當用戶訪問頁面時,瀏覽器需要獲取用戶請求內容,這個過程主要涉及瀏覽器網絡模塊:

1.用戶在地址欄輸入域名,如baidu.com,DNS(Domain Name System,域名解析系統)服務器根據輸入的域名查找對應IP,然后向該IP地址發起請求;

DNS 

 

 

 

2.瀏覽器獲得并解析服務器的返回內容(HTTP response);

3.瀏覽器加載HTML文件及文件內包含的外部引用文件及圖片,多媒體等資源。

DNS預解析(DNS prefetch)

瀏覽器DNS解析大多時候較快,且會緩存常用域名的解析值,但是如果網站涉及多域名,在對每一個域名訪問時都需要先解析出IP地址,而我們希望在跳轉或者請求其他域名資源時盡量快,則可以開啟域名預解析,瀏覽器會在空閑時提前解析聲明需要預解析的域名,如: 

 

 

 

多進程

我們通常說JavaScript執行是單進程的,但是瀏覽器網絡部分通常是有幾個平行進程同時開啟,但是也會有

限制,一般為2-6個。

渲染引擎及關鍵渲染路徑(Critical Rendering Path)

渲染引擎所做的事是將請求內容展現給我們,默認支持HTML,XML和圖片類型,對于其他諸如PDF等類型的內容則需要安裝相應插件,但瀏覽器的展示工作流程基本是一樣的。

通過網絡模塊加載到HTML文件后渲染引擎渲染流程如下,這也通常被稱作關鍵渲染路徑(Critical Rendering Path):

1.構建DOM樹(DOM tree):從上到下解析HTML文檔生成DOM節點樹(DOM tree),也叫內容樹(content tree);

2.構建CSSOM(CSS Object Model)樹:加載解析樣式生成CSSOM樹;

3.執行JavaScript:加載并執行JavaScript代碼(包括內聯代碼或外聯JavaScript文件);

4.構建渲染樹(render tree):根據DOM樹和CSSOM樹,生成渲染樹(render tree);渲染樹:按順序展示在屏幕上的一系列矩形,這些矩形帶有字體,顏色和尺寸等視覺屬性。

5.布局(layout):根據渲染樹將節點樹的每一個節點布局在屏幕上的正確位置;

6.繪制(painting):遍歷渲染樹繪制所有節點,為每一個節點適用對應的樣式,這一過程是通過UI后端模塊完成; 

 

 

 

為了更友好的用戶體驗,瀏覽器會盡可能快的展現內容,而不會等到文檔所有內容到達才開始解析和構建/布局渲染樹,而是每次處理一部分,并展現在屏幕上,這也是為什么我們經??梢钥吹巾撁婕虞d的時候內容是從上到下一點一點展現的。

流程圖

Webkit渲染引擎流程如下圖: 

 

 

Webkit渲染引擎流程 

Gecko渲染引擎流程如下圖: 

 

 

Gecko渲染引擎流程 

如上圖,Webkit瀏覽器和Gecko瀏覽器渲染流程大致相同,不同的是:

1.Webkit瀏覽器中的渲染樹(render tree),在Gecko瀏覽器中對應的則是框架樹(frame tree),渲染對象(render object)對應的是框架(frame);

2.Webkit中的布局(Layout)過程,在Gecko中稱為回流(Reflow),本質是一樣的,后文會解釋回流的另一層含義–重新布局;

3.Gecko中HTML和DOM樹中間多了一層內容池(Content sink),可以理解成生成DOM元素的工廠。

單進程

不同于網絡部分的多進程渲染引擎是單線程工作的,意味著渲染流程是一步一步漸進完成的。

解析文檔(parser HTML)

在詳細介紹瀏覽器渲染文檔之前,先應該理解瀏覽器如何解析文檔:解析文檔的順序,對于CSS和JavaScript如何處理等。

解析順序

瀏覽器按從上到下的順序掃描解析文檔;

解析樣式和腳本

  • 腳本或許是由于通常會在JavaScript腳本中改變文檔DOM結構,于是瀏覽器以同步方式解析,加載和執行腳本,瀏覽器在解析文檔時,當解析到標簽時,會解析其中的腳本(對于外鏈的JavaScript文件,需要先加載該文件內容,再進行解析),然后立即執行,這整個過程都會阻塞文檔解析,直到腳本執行完才會繼續解析文檔。就是說由于腳本是同步加載和執行的,它會阻塞文檔解析,這也解釋了為什么現在通常建議將標簽放在標簽前面,而不是放在標簽里?,F在HTML5提供defer和async兩個屬性支持延遲和異步加載JavaScript文件,如:
  1. <script defer src="script.js"
  • 改進針對上文說的腳本阻塞文檔解析,主流瀏覽器如Chrome和FireFox等都有一些優化,比如在執行腳本時,開啟另一個進程解析剩余的文檔以找出并加載其他的待下載外部資源(不改變主進程的DOM樹,僅優化加載外部資源)。
  • 樣式不同于腳本,瀏覽器對樣式的處理并不會阻塞文檔解析,大概是因為樣式表并不會改變DOM結構。
  • 樣式表與腳本你可能想問樣式是否會阻塞腳本文件的加載執行呢?正常情況是不會的,但是存在一個問題是通常我們會在腳本中請求樣式信息,但是在文檔解析時,如果樣式尚未加載或解析,將會得到錯誤信息,對于這一問題,FireFox瀏覽器和Webkit瀏覽器處理策略不同:
    • 當存在有樣式文件未被加載和解析時,FireFox瀏覽器會阻塞所有腳本;
    • 而Webkit瀏覽器只會阻塞操作了改文件內聲明的樣式屬性的腳本。

構建DOM樹

DOM,即文檔對象模型(Document Object Model),DOM樹,即文檔內所有節點構成的一個樹形結構。

假設瀏覽器獲取返回的如下HTML文檔:

  1. <!doctype html> 
  2.  
  3.     <html> 
  4.  
  5.     <head> 
  6.  
  7.       <link rel="stylesheet" href="./theme.css"></link> 
  8.  
  9.       <script src="./config.js"></script> 
  10.  
  11.       <title>關鍵渲染路徑</title> 
  12.  
  13.     </head> 
  14.  
  15.     <body> 
  16.  
  17.       <h1 class="title">關鍵渲染路徑</h1> 
  18.  
  19.       <p>關鍵渲染路徑介紹</p> 
  20.  
  21.       <footer>@copyright2017</footer> 
  22.  
  23.     </body> 
  24.  
  25.     </html>  

首先瀏覽器從上到下依次解析文檔構建DOM樹,如下: 

 

 

瀏覽器從上到下依次解析文檔構建DOM樹 

構建CSSOM樹

CSSOM,即CSS對象模型(CSS Object Model),CSSOM樹,與DOM樹結構相似,只是另外為每一個節點關聯了樣式信息。

theme.css樣式內容如下:

  1. html, body { 
  2.  
  3.     width: 100%; 
  4.  
  5.     height: 100%; 
  6.  
  7.     background-color: #fcfcfc; 
  8.  
  9.  
  10. .title { 
  11.  
  12.     font-size: 20px; 
  13.  
  14.  
  15. .footer { 
  16.  
  17.     font-size: 12px; 
  18.  
  19.     color: #aaa; 
  20.  
  21.  

構建CSSOM樹如圖: 

 

 

構建CSSOM樹 

執行JavaScript

上文已經闡述了文檔解析時對腳本的處理,我們得知腳本加載,解析和執行會阻塞文檔解析,而在特殊情況下樣式的加載和解析也會阻塞腳本,所以現在推薦的實踐是標簽放在標簽前面。

構建渲染樹(render tree)

DOM樹和CSSOM樹都構建完了,接著瀏覽器會構建渲染樹:

渲染樹,代表一個文檔的視覺展示,瀏覽器通過它將文檔內容繪制在瀏覽器窗口,展示給用戶,它由按順序展示在屏幕上的一系列矩形對象組成,這些矩形對象都帶有字體,顏色和尺寸,位置等視覺樣式屬性。對于這些矩對象,FireFox稱之為框架(frame),Webkit瀏覽器稱之為渲染對象(render object, renderer),后文統稱為渲染對象。

這里把渲染樹節點稱為矩形對象,是因為,每一個渲染對象都代表著其對應DOM節點的CSS盒子,該盒子包含了尺寸,位置等幾何信息,同時它指向一個樣式對象包含其他視覺樣式信息。

渲染樹與DOM樹

每一個渲染對象都對應著DOM節點,但是非視覺(隱藏,不占位)DOM元素不會插入渲染樹,如元素或聲明display: none;的元素,渲染對象與DOM節點不是簡單的一對一的關系,一個DOM可以對應一個渲染對象,但一個DOM元素也可能對應多個渲染對象,因為有很多元素不止包含一個CSS盒子,如當文本被折行時,會產生多個行盒,這些行會生成多個渲染對象;又如行內元素同時包含塊元素和行內元素,則會創建一個匿名塊級盒包含內部行內元素,此時一個DOM對應多個矩形對象(渲染對象)。

渲染樹及其對應DOM樹如圖: 

 

 

渲染樹及其對應DOM樹 

  • 圖中渲染樹viewport即視口,是文檔的初始包含塊,scroll代表滾動區域,詳見CSS之視覺格式化模型(Visual Formatting Model)
  • 渲染樹并不會包含顯式或隱式地display:none;的標簽元素。

布局(Layout)或回流(reflow,relayout)

創建渲染樹后,下一步就是布局(Layout),或者叫回流(reflow,relayout),這個過程就是通過渲染樹中渲染對象的信息,計算出每一個渲染對象的位置和尺寸,將其安置在瀏覽器窗口的正確位置,而有些時候我們會在文檔布局完成后對DOM進行修改,這時候可能需要重新進行布局,也可稱其為回流,本質上還是一個布局的過程,每一個渲染對象都有一個布局或者回流方法,實現其布局或回流。

流(flow)

HTML采用的是基于流的方式定位布局,其按照從左到右,從上到下的順序進行排列,詳見CSS定位機制。

全局布局與局部布局

對渲染樹的布局可以分為全局和局部的,全局即對整個渲染樹進行重新布局,如當我們改變了窗口尺寸或方向或者是修改了根元素的尺寸或者字體大小等;而局部布局可以是對渲染樹的某部分或某一個渲染對象進行重新布局。

臟位系統(dirty bit system)

大多數web應用對DOM的操作都是比較頻繁,這意味著經常需要對DOM進行布局和回流,而如果僅僅是一些小改變,就觸發整個渲染樹的回流,這顯然是不好的,為了避免這種情況,瀏覽器使用了臟位系統,只有一個渲染對象改變了或者某渲染對象及其子渲染對象臟位值為”dirty”時,說明需要回流。

表示需要布局的臟位值有兩種:

  • “dirty”–自身改變,需要回流
  • “children are dirty”–子節點改變,需要回流

布局過程

布局是一個從上到下,從外到內進行的遞歸過程,從根渲染對象,即對應著HTML文檔根元素,然后下一級渲染對象,如對應著元素,如此層層遞歸,依次計算每一個渲染對象的幾何信息(位置和尺寸)。

幾何信息-位置和尺寸,即相對于窗口的坐標和尺寸,如根渲染對象,其坐標為(0, 0),尺寸即是視口

尺寸(瀏覽器窗口的可視區域)。

每一個渲染對象的布局流程基本如:

1.計算此渲染對象的寬度(width);

2.遍歷此渲染對象的所有子級,依次:

a.設置子級渲染對象的坐標

b.判斷是否需要觸發子渲染對象的布局或回流方法,計算子渲染對象的高度(height)

3.設置此渲染對象的高度:根據子渲染對象的累積高,margin和padding的高度設置其高度;

4.設置此渲染對象臟位值為false。

強制回流

在渲染樹布局完成后,再次操作文檔,改變文檔的內容或結構,或者元素定位時,會觸發回流,即需要重新布局,如請求某DOM的”offsetHeight”樣式信息等諸多情況:

  • DOM操作,如增加,刪除,修改或移動;
  • 變更內容;
  • 激活偽類;
  • 訪問或改變某些CSS屬性(包括修改樣式表或元素類名或使用JavaScript操作等方式);
  • 瀏覽器窗口變化(滾動或尺寸變化)
  1. $('body').css('padding'); // reflow 
  2.  
  3. $('body')[0].offsetHeight; // relow  

有過CSS3動畫開發經驗的同學可能會有經歷,如下入場動畫:

  1. .slide-left { 
  2.  
  3.     -webkit-transition: margin-left 1s ease-out
  4.  
  5.     -moz-transition: margin-left 1s ease-out
  6.  
  7.     -o-transition: margin-left 1s ease-out
  8.  
  9.     transition: margin-left 1s ease-out
  10.  
  11.  

然后執行如下腳本:

  1. var $slide = $('.slide-left'); 
  2.  
  3. $slide.css({ 
  4.  
  5.     "margin-left""100px" 
  6.  
  7. }).addClass('slide-left'); 
  8.  
  9. $slide.css({ 
  10.  
  11.     "margin-left""10px" 
  12.  
  13. });  

我們會發現并沒有效果,為什么呢?因為對margin-left的修改并沒有觸發回流,元素margin-left值的改變被緩存,如果我們在中間強制觸發回流:

  1. var $slide = $('.slide-left'); 
  2.  
  3. $slide.css({ 
  4.  
  5.     "margin-left""100px" 
  6.  
  7. }); 
  8.  
  9. console.log($slide.css('padding'); $slide.addClass('slide-left'); $slide.css({ 
  10.  
  11.     "margin-left""10px" 
  12.  
  13. });  

再看就達到了預期效果。

繪制(painting)

***是繪制(paint)階段或重繪(repaint)階段,瀏覽器UI組件將遍歷渲染樹并調用渲染對象的繪制(paint)方法,將內容展現在屏幕上,也有可能在之后對DOM進行修改,需要重新繪制渲染對象,也就是重繪,繪制和重繪的關系可以參考布局和回流的關系。

全局與局部繪制

與布局相似,繪制也分為全局和局部繪制,即對整個渲染樹或某些渲染對象進行繪制。

觸發重繪

我們已經知道很多操作可能會觸發回流,那么什么時候可能觸發重繪呢,通常,當改變元素的視覺樣式,如background-color,visibility,margin,padding或字體顏色時會觸發全局或局部重繪,如:

  1. $('body').css('color''red'); // repaint 
  2.  
  3. $('body').css('margin''2px'); // reflow, repaint  

頁面渲染優化

瀏覽器對上文介紹的關鍵渲染路徑進行了很多優化,針對每一次變化產生盡量少的操作,還有優化判斷重新繪制或布局的方式等等。

在改變文檔根元素的字體顏色等視覺性信息時,會觸發整個文檔的重繪,而改變某元素的字體顏色則只觸發特定元素的重繪;改變元素的位置信息會同時觸發此元素(可能還包括其兄弟元素或子級元素)的布局和重繪。某些重大改變,如更改文檔根元素的字體尺寸,則會觸發整個文檔的重新布局和重繪,據此及上文所述,推薦以下優化和實踐:

1.HTML文檔結構層次盡量少,***不深于六層;

2.腳本盡量后放,放在前即可;

3.少量首屏樣式內聯放在標簽內;

4.樣式結構層次盡量簡單;

5.在腳本中盡量減少DOM操作,盡量緩存訪問DOM的樣式信息,避免過度觸發回流;

6.減少通過JavaScript代碼修改元素樣式,盡量使用修改class名方式操作樣式或動畫;

7.動畫盡量使用在絕對定位或固定定位的元素上;

8.隱藏在屏幕外,或在頁面滾動時,盡量停止動畫;

9.盡量緩存DOM查找,查找器盡量簡潔;

10.涉及多域名的網站,可以開啟域名預解析

實例

當我們訪問一個頁面時,瀏覽器渲染事件詳細日志圖如下: 

 

 

瀏覽器渲染事件詳細日志 

  1. 發起請求;
  2. 解析HTML;
  3. 解析樣式;
  4. 執行JavaScript;
  5. 布局;
  6. 繪制

參考:

http://taligarsiel.com/Projects/howbrowserswork1.htm

https://bitsofco.de/understanding-the-critical-rendering-path/ 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2016-12-08 10:57:08

渲染引擎前端優化

2022-06-09 15:53:16

移動端渲染GPU

2019-04-08 10:27:00

渲染瀏覽器DOM

2020-05-27 09:41:10

前端性能邊緣計算

2024-07-26 10:28:51

2021-08-30 09:44:47

Kubelet機制驅逐

2009-06-11 17:03:29

Java線程

2022-06-01 16:01:58

MySQL內存管理系統

2009-06-23 14:15:00

Java垃圾回收

2015-12-23 09:16:33

ios動畫渲染機制

2015-12-30 14:16:05

iOS動畫視圖渲染

2010-08-13 11:21:31

Flex渲染器

2009-07-03 17:48:34

JSP頁面翻譯

2017-05-10 14:47:37

Headless Ch頁面 Docker

2009-07-28 16:40:11

ASP.NET異步頁面

2021-10-29 05:53:51

前端測試開發代碼

2011-05-19 10:57:45

DNSSEC密鑰加密

2009-08-03 18:35:51

ASP.NET數據緩存

2023-03-22 18:31:10

Android頁面優化

2011-09-01 17:46:22

MySQL ProxyLua腳本
點贊
收藏

51CTO技術棧公眾號

99久久久国产精品无码网爆| 年下总裁被打光屁股sp| 日韩精品毛片| 国产在线精品一区在线观看麻豆| 色综合导航网站| 亚洲欧美在线不卡| 国产91亚洲精品久久久| 亚洲午夜精品一区二区三区他趣| 精品欧美一区二区久久久伦| 一本色道久久综合无码人妻| 亚洲福利精品| 精品久久久av| 国产xxxxxxxxx| 四虎永久精品在线| 天天色综合天天| 亚洲成人动漫在线| 嫩草研究院在线观看| 国产盗摄精品一区二区三区在线| 国产成人精品电影| xxxx 国产| 欧美xxav| 国产一区二区三区视频| 国产a√精品区二区三区四区| 免费在线成人激情电影| 午夜电影久久久| 中文字幕乱码免费| yiren22综合网成人| www.在线欧美| 99中文视频在线| 亚洲一级特黄毛片| 麻豆精品91| 性色av香蕉一区二区| 欧美另类videoxo高潮| 狠狠做六月爱婷婷综合aⅴ| 亚洲第一级黄色片| 四川一级毛毛片| 青娱乐极品盛宴一区二区| 色婷婷精品大在线视频| 欧美 国产 综合| 爱情岛亚洲播放路线| 亚洲日穴在线视频| 在线视频不卡一区二区三区| 国产69精品久久app免费版| 99re成人在线| 久久婷婷开心| 特级丰满少妇一级aaaa爱毛片| 国产一区二区看久久| 成人精品aaaa网站| 91精品国产乱码久久| 日本不卡的三区四区五区| 日韩免费中文字幕| 无码人妻aⅴ一区二区三区有奶水| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美大胆a视频| 国内偷拍精品视频| 国产综合精品一区| 久久人人爽人人爽人人片av高请 | 免费在线观看av的网站| 免费在线成人| 国产suv精品一区二区| 日韩色图在线观看| 久久久久国产精品一区三寸| 国产精品成熟老女人| 啪啪小视频网站| 蜜桃视频在线一区| 亚洲aa中文字幕| 成人1区2区3区| 成人ar影院免费观看视频| 国产伦精品一区二区三区四区免费 | 日韩一区二区三区资源| 求av网址在线观看| 亚洲男人的天堂在线观看| av影院在线播放| 嗯~啊~轻一点视频日本在线观看| 精品福利视频导航| 久久久久免费精品| 亚洲精品一区av| 日韩无一区二区| 中文字幕a在线观看| 私拍精品福利视频在线一区| 中文字幕亚洲无线码a| 国产又粗又硬又长又爽| 99亚洲一区二区| 国产精品人成电影| 亚洲国产av一区二区| 2023国产一二三区日本精品2022| 日韩影院一区| 俺来俺也去www色在线观看| 色婷婷综合久久久久中文一区二区| www.亚洲高清| 精品人人人人| 最近2019中文字幕mv免费看| 九九热国产在线| 久久综合九色| 97超级碰碰| 丁香在线视频| 亚洲一区二区影院| 艹b视频在线观看| 国产96在线亚洲| 中文字幕亚洲字幕| 日韩欧美激情视频| 激情成人午夜视频| 久久亚洲综合网| 污污在线观看| 欧美午夜免费电影| 老司机免费视频| 91成人免费| 国产精品九九久久久久久久| 乱精品一区字幕二区| 国产精品青草综合久久久久99| www.av蜜桃| 电影中文字幕一区二区| 亚洲欧美一区二区精品久久久| 三级影片在线看| 日本成人中文字幕在线视频| 国产欧美精品一区二区三区| 黄色在线免费| 欧美亚洲免费在线一区| 亚洲男女在线观看| 欧美精品不卡| 亚洲精品欧美极品| 成人性爱视频在线观看| 欧美日韩激情小视频| 波多野结衣网页| 午夜精品一区二区三区国产 | 亚洲性夜色噜噜噜7777| 国产真实乱人偷精品视频| 精品午夜久久福利影院| 日本一区二区三区免费观看| 爱搞国产精品| 精品国产免费人成电影在线观看四季 | 欧美亚洲国产激情| 96精品视频在线| 亚洲av色香蕉一区二区三区| 亚洲欧洲精品天堂一级 | 免费看污污视频| 国产香蕉久久| 国产亚洲欧美视频| 久久精品视频2| 久久久久久久久久久久久久久99| 国产精品久久中文字幕| av成人资源网| 国内精品久久久久久久| 亚洲va天堂va欧美ⅴa在线| 亚洲女爱视频在线| a级大片免费看| 影视亚洲一区二区三区| 91亚洲精品久久久久久久久久久久| av每日在线更新| 欧美亚洲图片小说| 黑人と日本人の交わりビデオ| 日本中文字幕一区二区有限公司| 欧美日韩无遮挡| 日韩国产激情| 中文字幕精品视频| 91女人18毛片水多国产| 亚洲欧美日本韩国| 在线观看高清免费视频| 九九精品在线| 国产噜噜噜噜噜久久久久久久久| yjizz视频网站在线播放| 欧美精品在线视频| 精品99在线观看| 99r国产精品| 黄色一级二级三级| 色综合天天综合网中文字幕| 91日本视频在线| 牛牛精品视频在线| 国产视频精品va久久久久久| 中文在线免费看视频| 亚洲私人影院在线观看| 欧美一级片在线免费观看| 日韩视频免费| 亚洲一区二区三区免费观看| 日本一区二区三区电影免费观看| 97免费在线视频| a视频网址在线观看| 欧美日韩国产精品成人| 538精品在线观看| 91丨九色丨国产丨porny| 午夜视频在线瓜伦| 你懂的国产精品永久在线| 精品视频一区二区| 国产成人精品一区二区三区免费| 欧美成人精品在线视频| 天堂av电影在线观看| 欧美日韩一区成人| 国产一卡二卡在线播放| 国产午夜精品久久| www.日本久久| 亚洲在线一区| 欧美性受黑人性爽| 日韩三级av| 成人h猎奇视频网站| 55av亚洲| 久久黄色av网站| 香蕉久久国产av一区二区| 欧美狂野另类xxxxoooo| 毛片在线免费视频| 亚洲欧美韩国综合色| 国产精品扒开腿做爽爽| 国产精品一区二区在线播放 | 国产丝袜一区视频在线观看 | 国产视频精品久久久| 国产绿帽刺激高潮对白| 一本久久精品一区二区| 麻豆视频在线观看| 国产精品久线在线观看| 野外性满足hd| 国产91高潮流白浆在线麻豆| 一区二区在线免费看| 美女国产一区| 97碰在线视频| 综合一区二区三区| 日韩国产欧美一区| 欧美黄色影院| 国产精品日韩一区二区免费视频| 欧美黄色a视频| 日本高清+成人网在线观看| 羞羞的视频在线观看| 中文字幕国产亚洲| 九色蝌蚪在线| 国产视频精品一区二区三区| 风流少妇一区二区三区91| 欧美老人xxxx18| 中文在线a天堂| 91高清视频在线| 在线能看的av| 午夜精品久久久久久久99水蜜桃| 精品一区在线观看视频| 亚洲欧美国产三级| caoporn91| 亚洲欧洲一区二区三区| 三级黄色录像视频| 国产精品国产精品国产专区不片| 91l九色lporny| 国产视频亚洲色图| 午夜精产品一区二区在线观看的| 91女神在线视频| 香蕉网在线播放| 91在线小视频| 玖玖爱在线观看| 久久久综合视频| 三上悠亚ssⅰn939无码播放 | а√天堂8资源中文在线| 欧美激情视频一区二区三区不卡| 黄色网址在线免费播放| 日韩视频免费中文字幕| 天天综合视频在线观看| 日韩专区在线播放| 二区在线播放| 欧美猛男性生活免费| 七七成人影院| 911国产网站尤物在线观看| 激情视频网站在线播放色| 98精品国产高清在线xxxx天堂| 日韩激情电影| 国产精品91视频| 成人国产在线| 91日本在线观看| 国产成人aa在线观看网站站| 明星裸体视频一区二区| re久久精品视频| 少妇熟女一区二区| 欧美久久一区| 丰满爆乳一区二区三区| 日韩国产精品久久| 亚洲综合20p| zzijzzij亚洲日本少妇熟睡| 白白色免费视频| 亚洲女同女同女同女同女同69| 久久久久成人片免费观看蜜芽| 五月婷婷激情综合网| 国产日韩在线免费观看| 欧美一区二区久久久| 午夜18视频在线观看| 国产一区二区三区免费视频| av大片在线| 国产91精品久久久久| 亚洲a∨精品一区二区三区导航| 成人乱色短篇合集| 蜜桃一区av| 一卡二卡3卡四卡高清精品视频| 欧美特黄视频| 992kp快乐看片永久免费网址| 国内精品久久久久影院薰衣草| 五月天激情小说| 国产精品久久福利| 国产精品一区二区6| 欧美日韩精品一区视频| 黄色小视频免费观看| 一区二区日韩精品| 波多野结衣中文在线| 国产伦精品免费视频| 好吊妞视频这里有精品| 亚洲国产午夜伦理片大全在线观看网站 | 国产成人毛片| 国产精品香蕉视屏| 国产精品7m凸凹视频分类| 亚洲熟妇无码另类久久久| 精品一区二区三区蜜桃| 国精产品一区一区三区免费视频| 亚洲女爱视频在线| 一区二区视频免费| 亚洲激情自拍图| 在线欧美三级| 国产精品网站大全| 色婷婷久久久| 99在线观看视频免费| 精品综合免费视频观看| 国产全是老熟女太爽了| 一级特黄大欧美久久久| 一级黄色录像大片| 亚洲嫩模很污视频| 黄毛片在线观看| 国产精品一区二区三区在线观| 91精品综合| 性猛交ⅹ×××乱大交| 久久亚洲精品国产精品紫薇| 久久久精品一区二区涩爱| 欧美裸体一区二区三区| 国产高清一级毛片在线不卡| 91禁外国网站| 久久aimee| 亚洲国产精品无码av| 国产成人精品免费看| 久久久精品少妇| 欧美日韩黄色一区二区| 麻豆app在线观看| 日本高清+成人网在线观看| 青青草原在线亚洲| 妞干网在线观看视频| 成人久久视频在线观看| 草视频在线观看| 日韩欧美一区二区三区在线| 成人看av片| 91亚洲va在线va天堂va国| 亚洲一区 二区 三区| 亚洲天堂av一区二区| 中文字幕一区二区三区在线不卡| 亚洲一级av毛片| 精品国内亚洲在观看18黄| 日韩欧美专区| 一区二区三区四区免费观看| 国产精品资源在线| 天天干中文字幕| 精品国产一区二区在线观看| heyzo一区| 久久99精品久久久久子伦 | 亚洲xxx在线观看| 中文字幕一区不卡| 国产三级精品在线观看| 久久99久久亚洲国产| 国产精品欧美大片| 俄罗斯av网站| 91丨porny丨中文| www.com亚洲| 色噜噜国产精品视频一区二区| 亚洲精品大全| 中文字幕色呦呦| 成人视屏免费看| 国产黄色免费观看| 国产一区二区三区在线| 日本成人一区二区| 97免费视频观看| 久久先锋资源网| 91中文字幕在线视频| 欧美乱大交xxxxx| 欧美五码在线| 国产精品久久a| 亚洲图片一区二区| 麻豆影视在线| 亚洲www永久成人夜色| 亚洲精品1区2区| 欧美人与性囗牲恔配| 日韩午夜av一区| 日本不卡一二三| 看一级黄色录像| wwwwww.欧美系列| 国产又粗又猛又爽又黄的视频一| 欧美另类交人妖| 国产一区日韩| 久久久久亚洲av无码专区首jn| 色综合色狠狠综合色| 日本a在线播放| 久久国产精品 国产精品| 蜜桃一区二区三区在线观看| 豆国产97在线 | 亚洲| 在线日韩精品视频| 国产精品调教视频| a在线观看免费视频| 亚洲a一区二区| 色哟哟免费在线观看| 精品一区久久久久久| 国产综合色视频| 4438国产精品一区二区| 欧美激情奇米色| 99久久夜色精品国产亚洲96| 免费的av网站| 91精品在线观看入口|