精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品久久久久久亚洲| 最近的2019中文字幕免费一页| 亚洲高潮无码久久| 亚洲精品911| 一二三区精品| 中文字幕日韩综合av| 999热精品视频| 麻豆免费版在线观看| 中文字幕乱码日本亚洲一区二区| 91精品视频专区| 久久久久久久久久久网| 久久av影视| 日韩亚洲欧美一区二区三区| 国产特级黄色大片| 日本中文字幕在线看| 大白屁股一区二区视频| 国产精品91久久| 久久久久性色av无码一区二区| 久久99视频| 亚洲成人av在线| 午夜精品中文字幕| 日本在线高清| 亚洲精品免费电影| 欧美成人第一区| 国内老熟妇对白hdxxxx| 日本成人在线视频网站| 久久久久久免费精品| 亚洲黄色网址大全| 妖精视频一区二区三区免费观看| 91精品国产入口| 午夜欧美福利视频| а√在线天堂官网| 亚洲精品老司机| 亚洲精品一品区二品区三品区| 无码精品人妻一区二区| 精品一区二区在线看| 国产福利精品在线| 男人的天堂一区二区| 欧美精品一线| 久久精品国产亚洲7777| 欧美黄色一级生活片| 欧美大胆a级| 精品久久一二三区| 小日子的在线观看免费第8集| 日韩制服一区| 色婷婷av一区二区| 成熟了的熟妇毛茸茸| 免费污视频在线| 亚洲人成网站精品片在线观看 | 国产69精品久久久久999小说| 日韩毛片久久久| 国产精品电影院| 亚洲日本欧美在线| 成人精品一区| 亚洲国产精品国自产拍av| 欧美日本韩国国产| 你懂的好爽在线观看| 久久久久久一级片| 欧美日韩在线精品| 国产黄色片在线观看| 国产亚洲欧美中文| 日韩精品一区二区三区外面| 国产理论电影在线观看| 久久久久久麻豆| 日韩视频专区| 成人在线免费电影| 国产精品护士白丝一区av| 亚洲一区二区三区精品视频| 欧美成人xxx| 亚洲欧美另类图片小说| 成人在线免费观看视频网站| 欧洲成人综合网| 欧美日韩在线视频一区| 久久久久久久久久久久久久国产| 二吊插入一穴一区二区| 欧美日本在线播放| 6080国产精品| 国产精品1luya在线播放| 亚洲国产91精品在线观看| 7788色淫网站小说| 国产一区二区区别| 久久伊人色综合| 国产在线一区视频| 久久亚洲欧洲| 91日本在线视频| 欧美天堂在线视频| 久久久三级国产网站| 一级二级三级欧美| 成人av免费| 五月天久久比比资源色| 成人黄色片视频| 超碰国产精品一区二页| 精品日韩av一区二区| 性欧美13一14内谢| 久久久久久美女精品| 午夜剧场成人观在线视频免费观看| 久久青青草原亚洲av无码麻豆| 久久99久久久久| 国精产品一区二区| 思思99re6国产在线播放| 亚洲午夜久久久久久久久久久| 任你操这里只有精品| 91国产一区| 亚洲精品日韩丝袜精品| 国产精品 欧美激情| 亚洲欧美春色| 99精品99久久久久久宅男| 免费在线黄色影片| 一区二区三区在线视频观看| 丰满少妇在线观看| 国产精品国产| xxxxx91麻豆| 欧美一级视频免费观看| 韩国欧美国产1区| 欧美一区二区三区电影在线观看| 天使と恶魔の榨精在线播放| 色94色欧美sute亚洲线路二| 中文字幕一区二区三区乱码不卡| 久久在线电影| 国产精国产精品| 欧美在线精品一区二区三区| √…a在线天堂一区| 116极品美女午夜一级| 北条麻妃一区二区三区在线| 日韩一区视频在线| 69视频免费看| 久久久综合视频| 日韩精品在线观看av| 9999在线精品视频| 一区二区三区四区视频| 久久国产精品免费看| 成人综合激情网| 亚洲色图都市激情| 97色婷婷成人综合在线观看| 中文字幕日韩在线播放| 久久这里只有精品9| 久久嫩草精品久久久精品| 国产日韩欧美精品在线观看| 日韩在线观看中文字幕| 欧美成人亚洲成人| 国产麻豆精品一区| 国产精品国产自产拍在线| 久久精品影视大全| 欧美限制电影| 国产精品女视频| 国产福利在线视频| 91成人网在线| 亚洲AV无码成人精品区明星换面| 国产精品视频| 欧美激情专区| 欧美xoxoxo| 国产亚洲人成网站在线观看| 亚洲成人av网址| 欧美国产精品久久| 色天使在线观看| 91成人精品| 99re在线观看| 漫画在线观看av| 亚洲欧美激情视频| 最近中文字幕在线观看| 国产精品成人一区二区艾草 | 国产 国语对白 露脸| 亚洲无线观看| 91精品国产乱码久久久久久蜜臀| 内射后入在线观看一区| 无吗不卡中文字幕| 丝袜美腿中文字幕| 人人狠狠综合久久亚洲| 亚洲一一在线| 日本久久伊人| 91高清免费在线观看| 黄色在线小视频| 欧美日韩一区二区三区免费看 | 欧洲毛片在线| 欧美日韩一二区| 免费在线黄色网| 波多野结衣一区二区三区 | 国产伦精一区二区三区| 黄色一级片黄色| 亚洲福利网站| 国产日韩欧美夫妻视频在线观看| 国产盗摄在线观看| 亚洲丁香久久久| 国产一区免费看| 亚洲精品伦理在线| 亚洲天堂网一区二区| 日本欧美在线观看| 成年人视频网站免费| 一区二区导航| 91在线精品播放| 日本三级一区| 久久国产精品影视| 亚洲色图另类小说| 在线成人av网站| 色婷婷在线观看视频| 国产精品网站在线播放| 成人免费看片载| 美女性感视频久久| 成年人午夜视频在线观看| 欧美一区二区三区激情视频| 91久久国产综合久久蜜月精品| 三上悠亚国产精品一区二区三区| 久久综合网hezyo| 三级毛片在线免费看| 欧美精品v国产精品v日韩精品| 天天操中文字幕| 亚洲男人的天堂在线aⅴ视频| 一区二区不卡免费视频| 国产精品一区二区果冻传媒| 欧美在线观看视频网站| 在线日韩av| 自拍偷拍视频在线| 国产中文精品久高清在线不| 国产精品免费一区二区三区在线观看 | 午夜激情一区| 水蜜桃亚洲精品| 日韩欧美国产大片| www日韩av| 永久免费观看精品视频| 日韩美女在线播放| av影院在线免费观看| 久久久国产一区二区三区| 可以在线观看的av| 亚洲国产小视频在线观看| 99在线精品视频免费观看软件| 欧美亚洲日本一区| 国产黄色片免费看| 亚洲一线二线三线视频| 日本中文字幕免费在线观看| 国产精品无圣光一区二区| 国产 欧美 在线| 99久久精品一区| 制服丝袜av在线| 丁香婷婷综合网| 亚洲三级在线视频| 狠狠色伊人亚洲综合成人| 一区二区三区韩国| 日本美女一区二区三区视频| 日韩精品免费播放| 久久福利一区| 青青在线视频免费| 日韩国产在线观看一区| 日韩精品视频一区二区在线观看| 亚洲国产一区二区三区高清| 超碰成人免费在线| 激情婷婷久久| 91九色丨porny丨国产jk| 在线成人h网| 妞干网在线观看视频| 亚洲毛片视频| 成人免费观看毛片| 玖玖玖国产精品| 日本新janpanese乱熟| 日韩经典一区二区| 日本中文字幕高清| 久久成人免费日本黄色| 亚洲在线观看网站| 国产一区二区三区精品欧美日韩一区二区三区 | xxxx日韩| 久久96国产精品久久99软件| 思热99re视热频这里只精品| 免费在线观看91| 精品国产乱码久久久| 伊人久久大香线蕉成人综合网| 亚洲乱码免费伦视频| 国产乱子伦精品视频| 亚洲高清电影| 日韩无套无码精品| 蜜臀va亚洲va欧美va天堂 | 欧美激情精品| 国产一区高清视频| 精品毛片免费观看| 特级毛片在线免费观看| 欧美韩国一区| 大肉大捧一进一出好爽视频| 日韩成人dvd| 国产精品熟女一区二区不卡| 成人av电影在线观看| 国产肥白大熟妇bbbb视频| 国产精品久久久99| 欧美人妻一区二区| 欧美性色视频在线| 一道本在线视频| 亚洲精品一线二线三线| 国产视频网站在线| 欧美成人精品三级在线观看| 欧美三级网站| 91香蕉亚洲精品| 妖精一区二区三区精品视频| 中文字幕中文字幕在线中心一区| 在线精品亚洲| 男女男精品视频站| 国产成人av一区二区| 91成人破解版| 亚洲午夜电影在线观看| 中文永久免费观看| 亚洲国产精品999| 黄色免费在线看| 热久久美女精品天天吊色| 99综合99| 日本一区高清不卡| 精品福利电影| 亚洲网中文字幕| 国产丝袜美腿一区二区三区| 久久久全国免费视频| 欧美三级日韩在线| 天天在线女人的天堂视频| 大胆欧美人体视频| 日韩一区二区三区免费视频| 国产在线一区二区三区四区| 婷婷亚洲五月| 欧美一级黄色影院| 91在线看国产| 日韩免费一二三区| 欧美一区二区网站| 成年人视频在线看| 欧美影院在线播放| 国产精品1luya在线播放| 26uuu成人| 蜜乳av一区二区三区| 久久av无码精品人妻系列试探| 亚洲综合免费观看高清完整版在线 | 精品一区二区国产| 欧美日韩久久| aaaaaaaa毛片| 一区视频在线播放| 日批视频免费观看| 国产一区二区三区高清在线观看| 在线男人天堂| 久久影院理伦片| 国产精品外国| 一出一进一爽一粗一大视频| 亚洲线精品一区二区三区八戒| 国产免费一区二区三区最新不卡| 色婷婷久久av| 欧美网站免费| 一区二区在线不卡| 久久精品国产一区二区三| 国产三级短视频| 欧美亚洲国产一区二区三区va | 日韩视频免费在线观看| 久久久成人av毛片免费观看| 欧洲成人一区二区| 秋霞午夜鲁丝一区二区老狼| www.狠狠爱| 欧美无砖砖区免费| 1024国产在线| 国产在线视频91| 亚洲精品97| 女同性αv亚洲女同志| 亚洲一二三四在线| 日韩一级在线播放| 欧美有码在线视频| 免费久久精品| 午夜国产一区二区三区| 亚洲国产电影在线观看| 亚洲视频在线观看一区二区| 中文字幕亚洲无线码a| 日韩五码电影| 久久www视频| bt欧美亚洲午夜电影天堂| 天天操天天干视频| 影音先锋日韩有码| 色综合.com| 日韩一级特黄毛片| 91亚洲午夜精品久久久久久| 国产性生活视频| 久久久精品影院| 亚洲国产欧美国产第一区| 免费无遮挡无码永久视频| www日韩大片| 一级片视频播放| 性色av一区二区三区免费| 综合伊思人在钱三区| 亚洲久久中文字幕| 亚洲一区二区三区四区在线免费观看 | 日韩极品视频在线观看| 99re视频精品| 中文字幕人妻一区二区在线视频| 久久香蕉国产线看观看av| 国产精品黄网站| 免费一级特黄录像| 亚洲精品国久久99热| 水莓100国产免费av在线播放| 国产精品视频久久久久| 欧美韩日精品| 一级片久久久久| 日韩视频永久免费| 台湾佬成人网| 国产精品69久久久| 国产精品久久久久久久久快鸭 | 粉嫩一区二区三区四区公司1| 欧美三级午夜理伦三级| 亚洲麻豆国产自偷在线| 日本护士...精品国| 91青草视频久久| 日韩精品五月天| 日本天堂在线视频| 久久精品在线视频| 亚洲人挤奶视频|