3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

浏览器是如何工作的?(转载)

發布時間:2024/4/14 HTML 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浏览器是如何工作的?(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章引用地址:http://www.iefans.net/liulanqi-ruhe-gongzuo-yuanli/?作者:iefans

簡介

瀏覽器可以被認為是使用最廣泛的軟件,本文將介紹瀏覽器的工作原理,我們將看到,從你在地址欄輸入google.com到你看到google主頁過程中都發生了什么。

將討論的瀏覽器

今天,有五種主流瀏覽器——IE、Firefox、Safari、Chrome及Opera。

本文將基于一些開源瀏覽器的例子——Firefox、 Chrome及Safari,Safari是部分開源的。

根據W3C(World Wide Web Consortium 萬維網聯盟)的瀏覽器統計數據,當前(2011年9月),Firefox、Safari及Chrome的市場占有率綜合已快接近50%。(原文為2009年10月,數據沒有太大變化)因此,可以說開源瀏覽器將近占據了瀏覽器市場的半壁江山。

瀏覽器的主要功能

瀏覽器的主要功能是將用戶選擇得web資源呈現出來,它需要從服務器請求資源,并將其顯示在瀏覽器窗口中,資源的格式通常是HTML,也包括PDF、image及其他格式。用戶用URI(Uniform Resource Identifier 統一資源標識符)來指定所請求資源的位置,在網絡一章有更多討論。

?

HTML和CSS規范中規定了瀏覽器解釋html文檔的方式,由 W3C組織對這些規范進行維護,W3C是負責制定web標準的組織。

HTML規范的最新版本是HTML4(http://www.w3.org/TR/html401/),HTML5還在制定中(譯注:兩年前),最新的CSS規范版本是2(http://www.w3.org/TR/CSS2),CSS3也還正在制定中(譯注:同樣兩年前)。

這些年來,瀏覽器廠商紛紛開發自己的擴展,對規范的遵循并不完善,這為web開發者帶來了嚴重的兼容性問題。

但是,瀏覽器的用戶界面則差不多,常見的用戶界面元素包括:

  • 用來輸入URI的地址欄
  • 前進、后退按鈕
  • 書簽選項
  • 用于刷新及暫停當前加載文檔的刷新、暫停按鈕
  • 用于到達主頁的主頁按鈕

奇怪的是,并沒有哪個正式公布的規范對用戶界面做出規定,這些是多年來各瀏覽器廠商之間相互模仿和不斷改進得結果。

HTML5并沒有規定瀏覽器必須具有的UI元素,但列出了一些常用元素,包括地址欄、狀態欄及工具欄。還有一些瀏覽器有自己專有得功能,比如Firefox得下載管理。更多相關內容將在后面討論用戶界面時介紹。

瀏覽器的主要構成High Level Structure

瀏覽器的主要組件包括:

  • 用戶界面- 包括地址欄、后退/前進按鈕、書簽目錄等,也就是你所看到的除了用來顯示你所請求頁面的主窗口之外的其他部分
  • 瀏覽器引擎- 用來查詢及操作渲染引擎的接口
  • 渲染引擎- 用來顯示請求的內容,例如,如果請求內容為html,它負責解析html及css,并將解析后的結果顯示出來
  • 網絡- 用來完成網絡調用,例如http請求,它具有平臺無關的接口,可以在不同平臺上工作
  • UI 后端- 用來繪制類似組合選擇框及對話框等基本組件,具有不特定于某個平臺的通用接口,底層使用操作系統的用戶接口
  • JS解釋器- 用來解釋執行JS代碼
  • 數據存儲- 屬于持久層,瀏覽器需要在硬盤中保存類似cookie的各種數據,HTML5定義了web database技術,這是一種輕量級完整的客戶端存儲技術
  • ?

    圖1:瀏覽器主要組件

    需要注意的是,不同于大部分瀏覽器,Chrome為每個Tab分配了各自的渲染引擎實例,每個Tab就是一個獨立的進程。

    對于構成瀏覽器的這些組件,后面會逐一詳細討論。

    組件間的通信 Communication between the components

    Firefox和Chrome都開發了一個特殊的通信結構,后面將有專門的一章進行討論。

    渲染引擎 The rendering engine

    渲染引擎的職責就是渲染,即在瀏覽器窗口中顯示所請求的內容。

    默認情況下,渲染引擎可以顯示html、xml文檔及圖片,它也可以借助插件(一種瀏覽器擴展)顯示其他類型數據,例如使用PDF閱讀器插件,可以顯示PDF格式,將由專門一章講解插件及擴展,這里只討論渲染引擎最主要的用途——顯示應用了CSS之后的html及圖片。

    渲染引擎 Rendering engines

    本文所討論得瀏覽器——Firefox、Chrome和Safari是基于兩種渲染引擎構建的,Firefox使用Geoko——Mozilla自主研發的渲染引擎,Safari和Chrome都使用webkit。

    Webkit是一款開源渲染引擎,它本來是為linux平臺研發的,后來由Apple移植到Mac及Windows上,相關內容請參考http://webkit.org。

    主流程 The main flow

    渲染引擎首先通過網絡獲得所請求文檔的內容,通常以8K分塊的方式完成。

    下面是渲染引擎在取得內容之后的基本流程:

    解析html以構建dom樹->構建render樹->布局render樹->繪制render樹

    ?

    圖2:渲染引擎基本流程

    渲染引擎開始解析html,并將標簽轉化為內容樹中的dom節點。接著,它解析外部CSS文件及style標簽中的樣式信息。這些樣式信息以及html中的可見性指令將被用來構建另一棵樹——render樹。

    Render樹由一些包含有顏色和大小等屬性的矩形組成,它們將被按照正確的順序顯示到屏幕上。

    Render樹構建好了之后,將會執行布局過程,它將確定每個節點在屏幕上的確切坐標。再下一步就是繪制,即遍歷render樹,并使用UI后端層繪制每個節點。

    值得注意的是,這個過程是逐步完成的,為了更好的用戶體驗,渲染引擎將會盡可能早的將內容呈現到屏幕上,并不會等到所有的html都解析完成之后再去構建和布局render樹。它是解析完一部分內容就顯示一部分內容,同時,可能還在通過網絡下載其余內容。

    ?

    圖3:webkit主流程

    ?

    圖4:Mozilla的Geoko 渲染引擎主流程

    從圖3和4中可以看出,盡管webkit和Gecko使用的術語稍有不同,他們的主要流程基本相同。Gecko稱可見的格式化元素組成的樹為frame樹,每個元素都是一個frame,webkit則使用render樹這個名詞來命名由渲染對象組成的樹。Webkit中元素的定位稱為布局,而Gecko中稱為回流。Webkit稱利用dom節點及樣式信息去構建render樹的過程為attachment,Gecko在html和dom樹之間附加了一層,這層稱為內容接收器,相當制造dom元素的工廠。下面將討論流程中的各個階段。

    解析 Parsing-general

    既然解析是渲染引擎中一個非常重要的過程,我們將稍微深入的研究它。首先簡要介紹一下解析。

    解析一個文檔即將其轉換為具有一定意義的結構——編碼可以理解和使用的東西。解析的結果通常是表達文檔結構的節點樹,稱為解析樹或語法樹。

    例如,解析“2+3-1”這個表達式,可能返回這樣一棵樹。

    ?

    圖5:數學表達式樹節點

    文法 Grammars

    解析基于文檔依據的語法規則——文檔的語言或格式。每種可被解析的格式必須具有由詞匯及語法規則組成的特定的文法,稱為上下文無關文法。人類語言不具有這一特性,因此不能被一般的解析技術所解析。

    解析器-詞法分析器 Parser-Lexer combination

    解析可以分為兩個子過程——語法分析及詞法分析

    詞法分析就是將輸入分解為符號,符號是語言的詞匯表——基本有效單元的集合。對于人類語言來說,它相當于我們字典中出現的所有單詞。

    語法分析指對語言應用語法規則。

    解析器一般將工作分配給兩個組件——詞法分析器(有時也叫分詞器)負責將輸入分解為合法的符號,解析器則根據語言的語法規則分析文檔結構,從而構建解析樹,詞法分析器知道怎么跳過空白和換行之類的無關字符。

    ?

    圖6:從源文檔到解析樹

    解析過程是迭代的,解析器從詞法分析器處取道一個新的符號,并試著用這個符號匹配一條語法規則, 如果匹配了一條規則,這個符號對應的節點將被添加到解析樹上,然后解析器請求另一個符號。如果沒有匹配到規則,解析器將在內部保存該符號,并從詞法分析器 取下一個符號,直到所有內部保存的符號能夠匹配一項語法規則。如果最終沒有找到匹配的規則,解析器將拋出一個異常,這意味著文檔無效或是包含語法錯誤。

    轉換 Translation

    很多時候,解析樹并不是最終結果。解析一般在轉換中使用——將輸入文檔轉換為另一種格式。編譯就是個例子,編譯器在將一段源碼編譯為機器碼的時候,先將源碼解析為解析樹,然后將該樹轉換為一個機器碼文檔。

    ?

    圖7:編譯流程

    解析實例 Parsing example

    圖5中,我們從一個數學表達式構建了一個解析樹,這里定義一個簡單的數學語言來看下解析過程。

    詞匯表:我們的語言包括整數、加號及減號。

    語法:

    1. 該語言的語法基本單元包括表達式、term及操作符

    2. 該語言可以包括多個表達式

    3. 一個表達式定義為兩個term通過一個操作符連接

    4. 操作符可以是加號或減號

    5. term可以是一個整數或一個表達式

    現在來分析一下“2+3-1”這個輸入

    第一個匹配規則的子字符串是“2”,根據規則5,它是一個term,第二個匹配的是“2+3”,它符合第2條規則——一個操作符連接兩個term,下一次匹配發生在輸入的結束處。“2+3-1”是一個表達式,因為我們已經知道“2+3”是一個term,所以我們有了一個term緊跟著一個操作符及另一個term。“2++”將不會匹配任何規則,因此是一個無效輸入。

    詞匯表及語法的定義

    詞匯表通常利用正則表達式來定義。

    例如上面的語言可以定義為:

    INTEGER:0|[1-9][0-9]*

    PLUS:+

    MINUS:-

    正如看到的,這里用正則表達式定義整數。

    語法通常用BNF格式定義,我們的語言可以定義為:

    expression := term operation term

    operation := PLUS | MINUS

    term := INTEGER | expression

    如果一個語言的文法是上下文無關的,則它可以用正則解析器來解析。對上下文無關文法的一個直觀的定義是,該文法可以用BNF來完整的表達。可查看http://en.wikipedia.org/wiki/Context-free_grammar。

    解析器類型 Types of parsers

    有兩種基本的解析器——自頂向下解析及自底向上解析。比較直觀的解釋是,自頂向下解析,查看語法的最高層結構并試著匹配其中一個;自底向上解析則從輸入開始,逐步將其轉換為語法規則,從底層規則開始直到匹配高層規則。

    來看一下這兩種解析器如何解析上面的例子:

    自頂向下解析器從最高層規則開始——它先識別出“2+3“,將其視為一個表達式,然后識別出”2+3-1“為一個表達式(識別表達式的過程中匹配了其他規則,但出發點是最高層規則)。

    自底向上解析會掃描輸入直到匹配了一條規則,然后用該規則取代匹配的輸入,直到解析完所有輸入。部分匹配的表達式被放置在解析堆棧中。

    Stack

    Input

    ?2 + 3 – 1
    term+ 3 - 1
    term operation3 – 1
    expression- 1
    expression operation1
    expression?

    自底向上解析器稱為shift reduce 解析器,因為輸入向右移動(想象一個指針首先指向輸入開始處,并向右移動),并逐漸簡化為語法規則。

    自動化解析 Generating parse

    解析器生成器這個工具可以自動生成解析器,只需要指定語言的文法——詞匯表及語法規則,它就可以生成一個解析器。創建一個解析器需要對解析有深入的理解,而且手動的創建一個由較好性能的解析器并不容易,所以解析生成器很有用。Webkit使用兩個知名的解析生成器——用于創建語法分析器的Flex及創建解析器的Bison(你可能接觸過Lex和Yacc)。Flex的輸入是一個包含了符號定義的正則表達式,Bison的輸入是用BNF格式表示的語法規則。rs automatically

    HTML解析器 HTML Parser

    HTML解析器的工作是將html標識解析為解析樹。

    HTML文法定義 The HTML grammar definition

    W3C組織制定規范定義了HTML的詞匯表和語法。

    非上下文無關文法 Not a context free grammar

    正如在解析簡介中提到的,上下文無關文法的語法可以用類似BNF的格式來定義。

    不幸的是,所有的傳統解析方式都不適用于html(當然我提出它們并不只是因為好玩,它們將用來解析css和js),html不能簡單的用解析所需的上下文無關文法來定義。

    Html 有一個正式的格式定義——DTD(Document Type Definition 文檔類型定義)——但它并不是上下文無關文法,html更接近于xml,現在有很多可用的xml解析器,html有個xml的變體——xhtml,它們間的不同在于,html更寬容,它允許忽略一些特定標簽,有時可以省略開始或結束標簽。總的來說,它是一種soft語法,不像xml呆板、固執。

    顯然,這個看起來很小的差異卻帶來了很大的不同。一方面,這是html流行的原因——它的寬容使web開發人員的工作更加輕松,但另一方面,這也使很難去寫一個格式化的文法。所以,html的解析并不簡單,它既不能用傳統的解析器解析,也不能用xml解析器解析。

    HTML DTD

    Html適用DTD格式進行定義,這一格式是用于定義SGML家族的語言,包括了對所有允許元素及它們的屬性和層次關系的定義。正如前面提到的,html DTD并沒有生成一種上下文無關文法。

    DTD有一些變種,標準模式只遵守規范,而其他模式則包含了對瀏覽器過去所使用標簽的支持,這么做是為了兼容以前內容。最新的標準DTD在http://www.w3.org/TR/html4/strict.dtd

    DOM

    輸出的樹,也就是解析樹,是由DOM元素及屬性節點組成的。DOM是文檔對象模型的縮寫,它是html文檔的對象表示,作為html元素的外部接口供js等調用。

    樹的根是“document”對象。

    DOM和標簽基本是一一對應的關系,例如,如下的標簽:

    <html>

    <body>

    <p>

    Hello DOM

    </p>

    <div><img src=”example.png” /></div>

    </body>

    </html>

    將會被轉換為下面的DOM樹:

    ?

    圖8:示例標簽對應的DOM樹

    和html一樣,DOM的規范也是由W3C組織制定的。訪問http://www.w3.org/DOM/DOMTR,這是使用文檔的一般規范。一個模型描述一種特定的html元素,可以在http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/idl-definitions.htm?查看html定義。

    這里所謂的樹包含了DOM節點是說樹是由實現了DOM接口的元素構建而成的,瀏覽器使用已被瀏覽器內部使用的其他屬性的具體實現。

    解析算法 The parsing algorithm

    正如前面章節中討論的,hmtl不能被一般的自頂向下或自底向上的解析器所解析。

    原因是:

    1. 這門語言本身的寬容特性

    2. 瀏覽器對一些常見的非法html有容錯機制

    3. 解析過程是往復的,通常源碼不會在解析過程中發生改變,但在html中,腳本標簽包含的“document.write ”可能添加標簽,這說明在解析過程中實際上修改了輸入

    不能使用正則解析技術,瀏覽器為html定制了專屬的解析器。

    Html5規范中描述了這個解析算法,算法包括兩個階段——符號化及構建樹。

    符號化是詞法分析的過程,將輸入解析為符號,html的符號包括開始標簽、結束標簽、屬性名及屬性值。

    符號識別器識別出符號后,將其傳遞給樹構建器,并讀取下一個字符,以識別下一個符號,這樣直到處理完所有輸入。

    ?

    圖9:HTML解析流程

    符號識別算法 The tokenization algorithm

    算法輸出html符號,該算法用狀態機表示。每次讀取輸入流中的一個或多個字符,并根據這些字符轉移到下一個狀態,當前的符號狀態及構建樹狀態共同影響結果,這意味著,讀取同樣的字符,可能因為當前狀態的不同,得到不同的結果以進入下一個正確的狀態。

    這個算法很復雜,這里用一個簡單的例子來解釋這個原理。

    基本示例——符號化下面的html:

    <html>

    <body>

    Hello world

    </body>

    </html>

    初始狀態為“Data State”,當遇到“<”字符,狀態變為“Tag open state”,讀取一個a-z的字符將產生一個開始標簽符號,狀態相應變為“Tag name state”,一直保持這個狀態直到讀取到“>”,每個字符都附加到這個符號名上,例子中創建的是一個html符號。

    當讀取到“>”,當前的符號就完成了,此時,狀態回到“Data state”,“<body>”重復這一處理過程。到這里,html和body標簽都識別出來了。現在,回到“Data state”,讀取“Hello world”中的字符“H”將創建并識別出一個字符符號,這里會為“Hello world”中的每個字符生成一個字符符號。

    這樣直到遇到“</body>”中的“<”。現在,又回到了“Tag open state”,讀取下一個字符“/”將創建一個閉合標簽符號,并且狀態轉移到“Tag name state”,還是保持這一狀態,直到遇到“>”。然后,產生一個新的標簽符號并回到“Data state”。后面的“</html>”將和“</body>”一樣處理。

    ?

    圖10:符號化示例輸入

    樹的構建算法 Tree construction algorithm

    在樹的構建階段,將修改以Document為根的DOM樹,將元素附加到樹上。每個由符號識別器識別生成的節點將會被樹構造器進行處理,規范中定義了每個符號相對應的Dom元素,對應的Dom元素將會被創建。這些元素除了會被添加到Dom樹上,還將被添加到開放元素堆棧中。這個堆棧用來糾正嵌套的未匹配和未閉合標簽,這個算法也是用狀態機來描述,所有的狀態采用插入模式。

    來看一下示例中樹的創建過程:

    <html>

    <body>

    Hello world

    </body>

    </html>

    構建樹這一階段的輸入是符號識別階段生成的符號序列。

    首先是“initial mode”,接收到html符號后將轉換為“before html”模式,在這個模式中對這個符號進行再處理。此時,創建了一個HTMLHtmlElement元素,并將其附加到根Document對象上。

    狀態此時變為“before head”,接收到body符號時,即使這里沒有head符號,也將自動創建一個HTMLHeadElement元素并附加到樹上。

    現在,轉到“in head”模式,然后是“after head”。到這里,body符號會被再次處理,將創建一個HTMLBodyElement并插入到樹中,同時,轉移到“in body”模式。

    然后,接收到字符串“Hello world”的字符符號,第一個字符將導致創建并插入一個text節點,其他字符將附加到該節點。

    接收到body結束符號時,轉移到“after body”模式,接著接收到html結束符號,這個符號意味著轉移到了“after after body”模式,當接收到文件結束符時,整個解析過程結束。

    ?

    圖11:示例html樹的構建過程

    解析結束時的處理 Action when the parsing is finished

    在這個階段,瀏覽器將文檔標記為可交互的,并開始解析處于延時模式中的腳本——這些腳本在文檔解析后執行。

    文檔狀態將被設置為完成,同時觸發一個load事件。

    Html5規范中有符號化及構建樹的完整算法(http://www.w3.org/TR/html5/syntax.html#html-parser)。

    瀏覽器容錯 Browsers error tolerance

    你從來不會在一個html頁面上看到“無效語法”這樣的錯誤,瀏覽器修復了無效內容并繼續工作。

    以下面這段html為例:

    <html>

    <mytag>

    </mytag>

    <div>

    <p>

    </div>

    Really lousy HTML

    </p>

    </html>

    這段html違反了很多規則(mytag不是合法的標簽,p及div錯誤的嵌套等等),但是瀏覽器仍然可以沒有任何怨言的繼續顯示,它在解析的過程中修復了html作者的錯誤。

    瀏覽器都具有錯誤處理的能力,但是,另人驚訝的是,這并不是html最新規范的內容,就像書簽及前進后退按鈕一樣,它只是瀏覽器長期發展的結果。一些比較知名的非法html結構,在許多站點中出現過,瀏覽器都試著以一種和其他瀏覽器一致的方式去修復。

    Html5規范定義了這方面的需求,webkit在html解析類開始部分的注釋中做了很好的總結。

    解析器將符號化的輸入解析為文檔并創建文檔,但不幸的是,我們必須處理很多沒有很好格式化的html文檔,至少要小心下面幾種錯誤情況。

    1. 在未閉合的標簽中添加明確禁止的元素。這種情況下,應該先將前一標簽閉合

    2. 不能直接添加元素。有些人在寫文檔的時候會忘了中間一些標簽(或者中間標簽是可選的),比如HTML HEAD BODY TR TD LI等

    3. 想在一個行內元素中添加塊狀元素。關閉所有的行內元素,直到下一個更高的塊狀元素

    4. 如果這些都不行,就閉合當前標簽直到可以添加該元素。

    下面來看一些webkit容錯的例子:

    </br>替代<br>

    一些網站使用</br>替代<br>,為了兼容IE和Firefox,webkit將其看作<br>。

    代碼:

    if (t->isCloseTag(brTag) && m_document->inCompatMode()) {

    reportError(MalformedBRError);

    t->beginTag = true;

    }

    Note-這里的錯誤處理在內部進行,用戶看不到。

    迷路的表格

    這指一個表格嵌套在另一個表格中,但不在它的某個單元格內。

    比如下面這個例子:

    <table>

    <table>

    <tr><td>inner table</td></tr>

    </table>

    <tr><td>outer table</td></tr>

    </table>

    webkit將會將嵌套的表格變為兩個兄弟表格:

    <table>

    <tr><td>outer table</td></tr>

    </table>

    <table>

    <tr><td>inner table</td></tr>

    </table>

    代碼:

    if (m_inStrayTableContent && localName == tableTag)

    popBlock(tableTag);

    webkit使用堆棧存放當前的元素內容,它將從外部表格的堆棧中彈出內部的表格,則它們變為了兄弟表格。

    嵌套的表單元素

    用戶將一個表單嵌套到另一個表單中,則第二個表單將被忽略。

    代碼:

    if (!m_currentFormElement) {

    m_currentFormElement = new HTMLFormElement(formTag, m_document);

    }

    太深的標簽繼承

    www.liceo.edu.mx是一個由嵌套層次的站點的例子,最多只允許20個相同類型的標簽嵌套,多出來的將被忽略。

    代碼:

    bool HTMLParser::allowNestedRedundantTag(const AtomicString& tagName)

    {

    unsigned i = 0;

    for (HTMLStackElem* curr = m_blockStack;

    i < cMaxRedundantTagDepth && curr && curr->tagName == tagName;

    curr = curr->next, i++) { }

    return i != cMaxRedundantTagDepth;

    }

    放錯了地方的html、body閉合標簽

    又一次不言自明。

    支持不完整的html。我們從來不閉合body,因為一些愚蠢的網頁總是在還未真正結束時就閉合它。我們依賴調用end方法去執行關閉的處理。

    代碼:

    if (t->tagName == htmlTag || t->tagName == bodyTag )

    return;

    所以,web開發者要小心了,除非你想成為webkit容錯代碼的范例,否則還是寫格式良好的html吧。

    CSS解析 CSS parsing

    還記得簡介中提到的解析的概念嗎,不同于html,css屬于上下文無關文法,可以用前面所描述的解析器來解析。Css規范定義了css的詞法及語法文法。

    看一些例子:

    每個符號都由正則表達式定義了詞法文法(詞匯表):

    comment ///*[^*]*/*+([^/*][^*]*/*+)*//

    num [0-9]+|[0-9]*”.”[0-9]+

    nonascii [/200-/377]

    nmstart [_a-z]|{nonascii}|{escape}

    nmchar [_a-z0-9-]|{nonascii}|{escape}

    name {nmchar}+

    ident {nmstart}{nmchar}*

    “ident”是識別器的縮寫,相當于一個class名,“name”是一個元素id(用“#”引用)。

    語法用BNF進行描述:

    ruleset

    : selector [ ',' S* selector ]*

    ‘{’ S* declaration [ ';' S* declaration ]* ‘}’ S*

    ;

    selector

    : simple_selector [ combinator selector | S+ [ combinator selector ] ]

    ;

    simple_selector

    : element_name [ HASH | class | attrib | pseudo ]*

    | [ HASH | class | attrib | pseudo ]+

    ;

    class

    : ‘.’ IDENT

    ;

    element_name

    : IDENT | ‘*’

    ;

    attrib

    : ‘[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S*

    [ IDENT | STRING ] S* ] ‘]’

    ;

    pseudo

    : ‘:’ [ IDENT | FUNCTION S* [IDENT S*] ‘)’ ]

    ;

    說明:一個規則集合有這樣的結構

    div.error , a.error {

    color:red;

    font-weight:bold;

    }

    div.error和a.error時選擇器,大括號中的內容包含了這條規則集合中的規則,這個結構在下面的定義中正式的定義了:

    ruleset

    : selector [ ',' S* selector ]*

    ‘{’ S* declaration [ ';' S* declaration ]* ‘}’ S*

    ;

    這說明,一個規則集合具有一個或是可選個數的多個選擇器,這些選擇器以逗號和空格(S表示空格)進行分隔。每個規則集合包含大括號及大括號中的一條或多條以分號隔開的聲明。聲明和選擇器在后面進行定義。

    Webkit CSS 解析器 Webkit CSS parser

    Webkit使用Flex和Bison解析生成器從CSS語法文件中自動生成解析器。回憶一下解析器的介紹,Bison創建一個自底向上的解析器,Firefox使用自頂向下解析器。它們都是將每個css文件解析為樣式表對象,每個對象包含css規則,css規則對象包含選擇器和聲明對象,以及其他一些符合css語法的對象。

    ?

    圖12:解析css

    腳本解析 Parsing scripts

    本章將介紹Javascript。

    處理腳本及樣式表的順序 The order of processing scripts and style sheets

    腳本

    web的模式是同步的,開發者希望解析到一個script標簽時立即解析執行腳本,并阻塞文檔的解析直到腳本執行完。如果腳本是外引的,則網絡必須先請求到這個資源——這個過程也是同步的,會阻塞文檔的解析直到資源被請求到。這個模式保持了很多年,并且在html4及html5中都特別指定了。開發者可以將腳本標識為defer,以使其不阻塞文檔解析,并在文檔解析結束后執行。Html5增加了標記腳本為異步的選項,以使腳本的解析執行使用另一個線程。

    預解析 Speculative parsing

    Webkit和Firefox都做了這個優化,當執行腳本時,另一個線程解析剩下的文檔,并加載后面需要通過網絡加載的資源。這種方式可以使資源并行加載從而使整體速度更快。需要注意的是,預解析并不改變Dom樹,它將這個工作留給主解析過程,自己只解析外部資源的引用,比如外部腳本、樣式表及圖片。

    樣式表 Style sheets

    樣式表采用另一種不同的模式。理論上,既然樣式表不改變Dom樹,也就沒有必要停下文檔的解析等待它們,然而,存在一個問題,腳本可能在文檔的解析過程中請求樣式信息,如果樣式還沒有加載和解析,腳本將得到錯誤的值,顯然這將會導致很多問題,這看起來是個邊緣情況,但確實很常見。Firefox在存在樣式表還在加載和解析時阻塞所有的腳本,而chrome只在當腳本試圖訪問某些可能被未加載的樣式表所影響的特定的樣式屬性時才阻塞這些腳本。

    渲染樹的構造 Render tree construction

    當Dom樹構建完成時,瀏覽器開始構建另一棵樹——渲染樹。渲染樹由元素顯示序列中的可見元素組成,它是文檔的可視化表示,構建這棵樹是為了以正確的順序繪制文檔內容。

    Firefox將渲染樹中的元素稱為frames,webkit則用renderer或渲染對象來描述這些元素。

    一個渲染對象直到怎么布局及繪制自己及它的children。

    RenderObject是Webkit的渲染對象基類,它的定義如下:

    class RenderObject{

    virtual void layout();

    virtual void paint(PaintInfo);

    virtual void rect repaintRect();

    Node* node; //the DOM node

    RenderStyle* style; // the computed style

    RenderLayer* containgLayer; //the containing z-index layer

    }

    每個渲染對象用一個和該節點的css盒模型相對應的矩形區域來表示,正如css2所描述的那樣,它包含諸如寬、高和位置之類的幾何信息。盒模型的類型受該節點相關的display樣式屬性的影響(參考樣式計算章節)。下面的webkit代碼說明了如何根據display屬性決定某個節點創建何種類型的渲染對象。

    RenderObject* RenderObject::createObject(Node* node, RenderStyle* style)

    {

    Document* doc = node->document();

    RenderArena* arena = doc->renderArena();

    RenderObject* o = 0;

    switch (style->display()) {

    case NONE:

    break;

    case INLINE:

    o = new (arena) RenderInline(node);

    break;

    case BLOCK:

    o = new (arena) RenderBlock(node);

    break;

    case INLINE_BLOCK:

    o = new (arena) RenderBlock(node);

    break;

    case LIST_ITEM:

    o = new (arena) RenderListItem(node);

    break;

    }

    return o;

    }

    元素的類型也需要考慮,例如,表單控件和表格帶有特殊的框架。

    在webkit中,如果一個元素想創建一個特殊的渲染對象,它需要復寫“createRenderer”方法,使渲染對象指向不包含幾何信息的樣式對象。

    渲染樹和Dom樹的關系 The render tree relation to the DOM tree

    渲染對象和Dom元素相對應,但這種對應關系不是一對一的,不可見的Dom元素不會被插入渲染樹,例如head元素。另外,display屬性為none的元素也不會在渲染樹中出現(visibility屬性為hidden的元素將出現在渲染樹中)。

    還有一些Dom元素對應幾個可見對象,它們一般是一些具有復雜結構的元素,無法用一個矩形來描述。例如,select元素有三個渲染對象——一個顯示區域、一個下拉列表及一個按鈕。同樣,當文本因為寬度不夠而折行時,新行將作為額外的渲染元素被添加。另一個多個渲染對象的例子是不規范的html,根據css規范,一個行內元素只能僅包含行內元素或僅包含塊狀元素,在存在混合內容時,將會創建匿名的塊狀渲染對象包裹住行內元素。

    一些渲染對象和所對應的Dom節點不在樹上相同的位置,例如,浮動和絕對定位的元素在文本流之外,在兩棵樹上的位置不同,渲染樹上標識出真實的結構,并用一個占位結構標識出它們原來的位置。

    ?

    圖13:渲染樹及對應的Dom樹

    創建樹的流程 The flow of constructing the tree

    Firefox中,表述為一個監聽Dom更新的監聽器,將frame的創建委派給Frame Constructor,這個構建器計算樣式(參看樣式計算)并創建一個frame。

    Webkit中,計算樣式并生成渲染對象的過程稱為attachment,每個Dom節點有一個attach方法,attachment的過程是同步的,調用新節點的attach方法將節點插入到Dom樹中。

    處理html和body標簽將構建渲染樹的根,這個根渲染對象對應被css規范稱為containing block的元素——包含了其他所有塊元素的頂級塊元素。它的大小就是viewport——瀏覽器窗口的顯示區域,Firefox稱它為viewPortFrame,webkit稱為RenderView,這個就是文檔所指向的渲染對象,樹中其他的部分都將作為一個插入的Dom節點被創建。

    樣式計算 Style Computation

    創建渲染樹需要計算出每個渲染對象的可視屬性,這可以通過計算每個元素的樣式屬性得到。

    樣式包括各種來源的樣式表,行內樣式元素及html中的可視化屬性(例如bgcolor),可視化屬性轉化為css樣式屬性。

    樣式表來源于瀏覽器默認樣式表,及頁面作者和用戶提供的樣式表——有些樣式是瀏覽器用戶提供的(瀏覽器允許用戶定義喜歡的樣式,例如,在Firefox中,可以通過在Firefox Profile目錄下放置樣式表實現)。

    計算樣式的一些困難:

    1. 樣式數據是非常大的結構,保存大量的樣式屬性會帶來內存問題

    2. 如果不進行優化,找到每個元素匹配的規則會導致性能問題,為每個元素查找匹配的規則都需要遍歷整個規則表,這個過程有很大的工作量。選擇符可能有復雜的結構,匹配過程如果沿著一條開始看似正確,后來卻被證明是無用的路徑,則必須去嘗試另一條路徑。

    例如,下面這個復雜選擇符

    div div div div{…}

    這意味著規則應用到三個div的后代div元素,選擇樹上一條特定的路徑去檢查,這可能需要遍歷節點樹,最后卻發現它只是兩個div的后代,并不使用該規則,然后則需要沿著另一條路徑去嘗試

    3. 應用規則涉及非常復雜的級聯,它們定義了規則的層次

    我們來看一下瀏覽器如何處理這些問題:

    共享樣式數據

    webkit節點引用樣式對象(渲染樣式),某些情況下,這些對象可以被節點間共享,這些節點需要是兄弟或是表兄弟節點,并且:

  • 這些元素必須處于相同的鼠標狀態(比如不能一個處于hover,而另一個不是)
  • 不能有元素具有id
  • 標簽名必須匹配
  • class屬性必須匹配
  • 對應的屬性必須相同
  • 鏈接狀態必須匹配
  • 焦點狀態必須匹配
  • 不能有元素被屬性選擇器影響
  • 元素不能有行內樣式屬性
  • 不能有生效的兄弟選擇器,webcore在任何兄弟選擇器相遇時只是簡單的拋出一個全局轉換,并且在它們顯示時使整個文檔的樣式共享失效,這些包括+選擇器和類似:first-child和:last-child這樣的選擇器。
  • Firefox規則樹 Firefox rule tree

    Firefox用兩個樹用來簡化樣式計算-規則樹和樣式上下文樹,webkit也有樣式對象,但它們并沒有存儲在類似樣式上下文樹這樣的樹中,只是由Dom節點指向其相關的樣式。

    ?

    圖14:Firefox樣式上下文樹

    樣式上下文包含最終值,這些值是通過以正確順序應用所有匹配的規則,并將它們由邏輯值轉換為具體的值,例如,如果邏輯值為屏幕的百分比,則通過計算將其轉化為絕對單位。樣式樹的使用確實很巧妙,它使得在節點中共享的這些值不需要被多次計算,同時也節省了存儲空間。

    所有匹配的規則都存儲在規則樹中,一條路徑中的底層節點擁有最高的優先級,這棵樹包含了所找到的 所有規則匹配的路徑(譯注:可以取巧理解為每條路徑對應一個節點,路徑上包含了該節點所匹配的所有規則)。規則樹并不是一開始就為所有節點進行計算,而是 在某個節點需要計算樣式時,才進行相應的計算并將計算后的路徑添加到樹中。

    我們將樹上的路徑看成辭典中的單詞,假如已經計算出了如下的規則樹:

    ?

    假如需要為內容樹中的另一個節點匹配規則,現在知道匹配的規則(以正確的順序)為B-E-I,因為我們已經計算出了路徑A-B-E-I-L,所以樹上已經存在了這條路徑,剩下的工作就很少了。

    現在來看一下樹如何保存。

    結構化

    樣式上下文按結構劃分,這些結構包括類似border或color這樣的特定分類的樣式信息。一個結構中的所有特性不是繼承的就是非繼承的,對繼承的特性,除非元素自身有定義,否則就從它的parent繼承。非繼承的特性(稱為reset特性)如果沒有定義,則使用默認的值。

    樣式上下文樹緩存完整的結構(包括計算后的值),這樣,如果底層節點沒有為一個結構提供定義,則使用上層節點緩存的結構。

    使用規則樹計算樣式上下文

    當為一個特定的元素計算樣式時,首先計算出規則樹中的一條路徑,或是使用已經存在的一條,然后使 用路徑中的規則去填充新的樣式上下文,從樣式的底層節點開始,它具有最高優先級(通常是最特定的選擇器),遍歷規則樹,直到填滿結構。如果在那個規則節點 沒有定義所需的結構規則,則沿著路徑向上,直到找到該結構規則。

    如果最終沒有找到該結構的任何規則定義,那么如果這個結構是繼承型的,則找到其在內容樹中的parent的結構,這種情況下,我們也成功的共享了結構;如果這個結構是reset型的,則使用默認的值。

    如果特定的節點添加了值,那么需要做一些額外的計算以將其轉換為實際值,然后在樹上的節點緩存該值,使它的children可以使用。

    當一個元素和它的一個兄弟元素指向同一個樹節點時,完整的樣式上下文可以被它們共享。

    來看一個例子:假設有下面這段html

    <html>

    <body>

    <div class=”err” id=”div1″>

    <p>this is a

    <span class=”big”> big error </span>

    this is also a

    <span class=”big”> very big error</span>

    error

    </p>

    </div>

    <div class=”err” id=”div2″>another error</div>

    </body>

    </html>

    以及下面這些規則

    1. div {margin:5px;color:black}

    2. .err {color:red}

    3. .big {margin-top:3px}

    4. div span {margin-bottom:4px}

    5. #div1 {color:blue}

    6. #div2 {color:green}

    簡化下問題,我們只填充兩個結構——color和margin,color結構只包含一個成員-顏色,margin結構包含四邊。

    生成的規則樹如下(節點名:指向的規則)

    ?

    上下文樹如下(節點名:指向的規則節點)

    ?

    假設我們解析html,遇到第二個div標簽,我們需要為這個節點創建樣式上下文,并填充它的樣式結構。

    我們進行規則匹配,找到這個div匹配的規則為1、2、6,我們發現規則樹上已經存在了一條我們可以使用的路徑1、2,我們只需為規則6新增一個節點添加到下面(就是規則樹中的F)。

    然后創建一個樣式上下文并將其放到上下文樹中,新的樣式上下文將指向規則樹中的節點F。

    現在我們需要填充這個樣式上下文,先從填充margin結構開始,既然最后一個規則節點沒有添加margin結構,沿著路徑向上,直到找到緩存的前面插入節點計算出的結構,我們發現B是最近的指定margin值的節點。因為已經有了color結構的定義,所以不能使用緩存的結構,既然color只有一個屬性,也就不需要沿著路徑向上填充其他屬性。計算出最終值(將字符串轉換為RGB等),并緩存計算后的結構。

    第二個span元素更簡單,進行規則匹配后發現它指向規則G,和前一個span一樣,既然有兄弟節點指向同一個節點,就可以共享完整的樣式上下文,只需指向前一個span的上下文。

    因為結構中包含繼承自parent的規則,上下文樹做了緩存(color特性是繼承來的,但Firefox將其視為reset并在規則樹中緩存)。

    例如,如果我們為一個paragraph的文字添加規則:

    p {font-family:Verdana;font size:10px;font-weight:bold}

    那么這個p在內容樹中的子節點div,會共享和它parent一樣的font結構,這種情況發生在沒有為這個div指定font規則時。

    Webkit中,并沒有規則樹,匹配的聲明會被遍歷四次,先是應用非important的高優先級屬性(之所以先應用這些屬性,是因為其他的依賴于它們-比如display),其次是高優先級important的,接著是一般優先級非important的,最后是一般優先級important的規則。這樣,出現多次的屬性將被按照正確的級聯順序進行處理,最后一個生效。

    總結一下,共享樣式對象(結構中完整或部分內容)解決了問題1和3,Firefox的規則樹幫助以正確的順序應用規則。

    對規則進行處理以簡化匹配過程

    樣式規則有幾個來源:

    · 外部樣式表或style標簽內的css規則

    · 行內樣式屬性

    · html可視化屬性(映射為相應的樣式規則)

    后面兩個很容易匹配到元素,因為它們所擁有的樣式屬性和html屬性可以將元素作為key進行映射。

    就像前面問題2所提到的,css的規則匹配可能很狡猾,為了解決這個問題,可以先對規則進行處理,以使其更容易被訪問。

    解析完樣式表之后,規則會根據選擇符添加一些hash映射,映射可以是根據id、class、標簽名或是任何不屬于這些分類的綜合映射。如果選擇符為id,規則將被添加到id映射,如果是class,則被添加到class映射,等等。

    這個處理是匹配規則更容易,不需要查看每個聲明,我們能從映射中找到一個元素的相關規則,這個優化使在進行規則匹配時減少了95+%的工作量。

    來看下面的樣式規則:

    p.error {color:red}

    #messageDiv {height:50px}

    div {margin:5px}

    第一條規則將被插入class映射,第二條插入id映射,第三條是標簽映射。

    下面這個html片段:

    <p class=”error”>an error occurred </p>

    <div id=” messageDiv”>this is a message</div>

    我們首先找到p元素對應的規則,class映射將包含一個“error”的key,找到p.error的規則,div在id映射和標簽映射中都有相關的規則,剩下的工作就是找出這些由key對應的規則中哪些確實是正確匹配的。

    例如,如果div的規則是

    table div {margin:5px}

    這也是標簽映射產生的,因為key是最右邊的選擇符,但它并不匹配這里的div元素,因為這里的div沒有table祖先。

    Webkit和Firefox都會做這個處理。

    以正確的級聯順序應用規則

    樣式對象擁有對應所有可見屬性的屬性,如果特性沒有被任何匹配的規則所定義,那么一些特性可以從parent的樣式對象中繼承,另外一些使用默認值。

    這個問題的產生是因為存在不止一處的定義,這里用級聯順序解決這個問題。

    樣式表的級聯順序

    一個樣式屬性的聲明可能在幾個樣式表中出現,或是在一個樣式表中出現多次,因此,應用規則的順序至關重要,這個順序就是級聯順序。根據css2的規范,級聯順序為(從低到高):

    1. 瀏覽器聲明

    2. 用戶聲明

    3. 作者的一般聲明

    4. 作者的important聲明

    5. 用戶important聲明

    瀏覽器聲明是最不重要的,用戶只有在聲明被標記為important時才會覆蓋作者的聲明。具有同等級別的聲明將根據specifity以及它們被定義時的順序進行排序。Html可視化屬性將被轉換為匹配的css聲明,它們被視為最低優先級的作者規則。

    Specifity

    Css2規范中定義的選擇符specifity如下:

    · 如果聲明來自style屬性,而不是一個選擇器的規則,則計1,否則計0(=a)

    · 計算選擇器中id屬性的數量(=b)

    · 計算選擇器中class及偽類的數量(=c)

    · 計算選擇器中元素名及偽元素的數量(=d)

    連接a-b-c-d四個數量(用一個大基數的計算系統)將得到specifity。這里使用的基數由分類中最高的基數定義。例如,如果a為14,可以使用16進制。不同情況下,a為17時,則需要使用阿拉伯數字17作為基數,這種情況可能在這個選擇符時發生html body div div …(選擇符中有17個標簽,一般不太可能)。

    一些例子:

    * {} /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */

    li {} /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */

    li:first-line {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

    ul li {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

    ul ol+li {} /* a=0 b=0 c=0 d=3 -> specificity = 0,0,0,3 */

    h1 + *[rel=up]{} /* a=0 b=0 c=1 d=1 -> specificity = 0,0,1,1 */

    ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */

    li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */

    #x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */

    style=”" /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */

    規則排序

    規則匹配后,需要根據級聯順序對規則進行排序,webkit先將小列表用冒泡排序,再將它們合并為一個大列表,webkit通過為規則復寫“>”操作來執行排序:

    static bool operator >(CSSRuleData& r1, CSSRuleData& r2)

    {

    int spec1 = r1.selector()->specificity();

    int spec2 = r2.selector()->specificity();

    return (spec1 == spec2) : r1.position() > r2.position() : spec1 > spec2;

    }

    逐步處理 Gradual process

    webkit使用一個標志位標識所有頂層樣式表都已加載,如果在attch時樣式沒有完全加載,則放置占位符,并在文檔中標記,一旦樣式表完成加載就重新進行計算。

    布局 Layout

    當渲染對象被創建并添加到樹中,它們并沒有位置和大小,計算這些值的過程稱為layout或reflow。

    Html使用基于流的布局模型,意味著大部分時間,可以以單一的途徑進行幾何計算。流中靠后的元素并不會影響前面元素的幾何特性,所以布局可以在文檔中從右向左、自上而下的進行。也存在一些例外,比如html tables。

    坐標系統相對于根frame,使用top和left坐標。

    布局是一個遞歸的過程,由根渲染對象開始,它對應html文檔元素,布局繼續遞歸的通過一些或所有的frame層級,為每個需要幾何信息的渲染對象進行計算。

    根渲染對象的位置是0,0,它的大小是viewport-瀏覽器窗口的可見部分。

    所有的渲染對象都有一個layout或reflow方法,每個渲染對象調用需要布局的children的layout方法。

    Dirty bit 系統

    為了不因為每個小變化都全部重新布局,瀏覽器使用一個dirty bit系統,一個渲染對象發生了變化或是被添加了,就標記它及它的children為dirty-需要layout。存在兩個標識-dirty及children are dirty,children are dirty說明即使這個渲染對象可能沒問題,但它至少有一個child需要layout。

    全局和增量 layout

    當layout在整棵渲染樹觸發時,稱為全局layout,這可能在下面這些情況下發生:

    1. 一個全局的樣式改變影響所有的渲染對象,比如字號的改變

    2. 窗口resize

    layout也可以是增量的,這樣只有標志為dirty的渲染對象會重新布局(也將導致一些額外的布局)。增量 layout會在渲染對象dirty時異步觸發,例如,當網絡接收到新的內容并添加到Dom樹后,新的渲染對象會添加到渲染樹中。

    ?

    圖20:增量 layout

    異步和同步layout

    增量layout的過程是異步的,Firefox為增量layout生成了reflow隊列,以及一個調度執行這些批處理命令。Webkit也有一個計時器用來執行增量layout-遍歷樹,為dirty狀態的渲染對象重新布局。

    另外,當腳本請求樣式信息時,例如“offsetHeight”,會同步的觸發增量布局。

    全局的layout一般都是同步觸發。

    有些時候,layout會被作為一個初始layout之后的回調,比如滑動條的滑動。

    優化

    當一個layout因為resize或是渲染位置改變(并不是大小改變)而觸發時,渲染對象的大小將會從緩存中讀取,而不會重新計算。

    一般情況下,如果只有子樹發生改變,則layout并不從根開始。這種情況發生在,變化發生在元素自身并且不影響它周圍元素,例如,將文本插入文本域(否則,每次擊鍵都將觸發從根開始的重排)。

    layout過程

    layout一般有下面這幾個部分:

    1. parent渲染對象決定它的寬度

    2. parent渲染對象讀取chilidren,并:

    1. 放置child渲染對象(設置它的x和y)

    2. 在需要時(它們當前為dirty或是處于全局layout或者其他原因)調用child渲染對象的layout,這將計算child的高度

    3. parent渲染對象使用child渲染對象的累積高度,以及margin和padding的高度來設置自己的高度-這將被parent渲染對象的parent使用

    4. 將dirty標識設置為false

    Firefox使用一個“state”對象(nsHTMLReflowState)做為參數去布局(firefox稱為reflow),state包含parent的寬度及其他內容。

    Firefox布局的輸出是一個“metrics”對象(nsHTMLReflowMetrics)。它包括渲染對象計算出的高度。

    寬度計算

    渲染對象的寬度使用容器的寬度、渲染對象樣式中的寬度及margin、border進行計算。例如,下面這個div的寬度:

    <div style=”width:30%”/>

    webkit中寬度的計算過程是(RenderBox類的calcWidth方法):

    · 容器的寬度是容器的可用寬度和0中的最大值,這里的可用寬度為:contentWidth=clientWidth()-paddingLeft()-paddingRight(),clientWidth和clientHeight代表一個對象內部的不包括border和滑動條的大小

    · 元素的寬度指樣式屬性width的值,它可以通過計算容器的百分比得到一個絕對值

    · 加上水平方向上的border和padding

    到這里是最佳寬度的計算過程,現在計算寬度的最大值和最小值,如果最佳寬度大于最大寬度則使用最大寬度,如果小于最小寬度則使用最小寬度。最后緩存這個值,當需要layout但寬度未改變時使用。

    Line breaking

    當一個渲染對象在布局過程中需要折行時,則暫停并告訴它的parent它需要折行,parent將創建額外的渲染對象并調用它們的layout。

    繪制 Painting

    繪制階段,遍歷渲染樹并調用渲染對象的paint方法將它們的內容顯示在屏幕上,繪制使用UI基礎組件,這在UI的章節有更多的介紹。

    全局和增量

    和布局一樣,繪制也可以是全局的-繪制完整的樹-或增量的。在增量的繪制過程中,一些渲染對象以不影響整棵樹的方式改變,改變的渲染對象使其在屏幕上的矩形區域失效,這將導致操作系統將其看作dirty區域,并產生一個paint事件,操作系統很巧妙的處理這個過程,并將多個區域合并為一個。Chrome中,這個過程更復雜些,因為渲染對象在不同的進程中,而不是在主進程中。Chrome在一定程度上模擬操作系統的行為,表現為監聽事件并派發消息給渲染根,在樹中查找到相關的渲染對象,重繪這個對象(往往還包括它的children)。

    繪制順序

    css2定義了繪制過程的順序-http://www.w3.org/TR/CSS21/zindex.html。這個就是元素壓入堆棧的順序,這個順序影響著繪制,堆棧從后向前進行繪制。

    一個塊渲染對象的堆棧順序是:

    1. 背景色

    2. 背景圖

    3. border

    4. children

    5. outline

    Firefox顯示列表

    Firefox讀取渲染樹并為繪制的矩形創建一個顯示列表,該列表以正確的繪制順序包含這個矩形相關的渲染對象。

    用這樣的方法,可以使重繪時只需查找一次樹,而不需要多次查找——繪制所有的背景、所有的圖片、所有的border等等。

    Firefox優化了這個過程,它不添加會被隱藏的元素,比如元素完全在其他不透明元素下面。

    Webkit矩形存儲

    重繪前,webkit將舊的矩形保存為位圖,然后只繪制新舊矩形的差集。

    動態變化

    瀏覽器總是試著以最小的動作響應一個變化,所以一個元素顏色的變化將只導致該元素的重繪,元素位置的變化將大致元素的布局和重繪,添加一個Dom節點,也會大致這個元素的布局和重繪。一些主要的變化,比如增加html元素的字號,將會導致緩存失效,從而引起整數的布局和重繪。

    渲染引擎的線程

    渲染引擎是單線程的,除了網絡操作以外,幾乎所有的事情都在單一的線程中處理,在Firefox和Safari中,這是瀏覽器的主線程,Chrome中這是tab的主線程。

    網絡操作由幾個并行線程執行,并行連接的個數是受限的(通常是2-6個)。

    事件循環

    瀏覽器主線程是一個事件循環,它被設計為無限循環以保持執行過程的可用,等待事件(例如layout和paint事件)并執行它們。下面是Firefox的主要事件循環代碼。

    while (!mExiting)

    NS_ProcessNextEvent(thread);

    CSS2 可視模型 CSS2 visual module

    畫布 The Canvas

    根據CSS2規范,術語canvas用來描述格式化的結構所渲染的空間——瀏覽器繪制內容的地方。畫布對每個維度空間都是無限大的,但瀏覽器基于viewport的大小選擇了一個初始寬度。

    根據http://www.w3.org/TR/CSS2/zindex.html的定義,畫布如果是包含在其他畫布內則是透明的,否則瀏覽器會指定一個顏色。

    CSS盒模型

    CSS盒模型描述了矩形盒,這些矩形盒是為文檔樹中的元素生成的,并根據可視的格式化模型進行布局。每個box包括內容區域(如圖片、文本等)及可選的四周padding、border和margin區域。

    ?

    每個節點生成0-n個這樣的box。

    所有的元素都有一個display屬性,用來決定它們生成box的類型,例如:

    block-生成塊狀box

    inline-生成一個或多個行內box

    none-不生成box

    默認的是inline,但瀏覽器樣式表設置了其他默認值,例如,div元素默認為block。可以訪問http://www.w3.org/TR/CSS2/sample.html查看更多的默認樣式表示例。

    定位策略 Position scheme

    這里有三種策略:

    1. normal-對象根據它在文檔的中位置定位,這意味著它在渲染樹和在Dom樹中位置一致,并根據它的盒模型和大小進行布局

    2. float-對象先像普通流一樣布局,然后盡可能的向左或是向右移動

    3. absolute-對象在渲染樹中的位置和Dom樹中位置無關

    static和relative是normal,absolute和fixed屬于absolute。

    在static定位中,不定義位置而使用默認的位置。其他策略中,作者指定位置——top、bottom、left、right。

    Box布局的方式由這幾項決定:box的類型、box的大小、定位策略及擴展信息(比如圖片大小和屏幕尺寸)。

    Box類型

    Block box:構成一個塊,即在瀏覽器窗口上有自己的矩形

    ?

    Inline box:并沒有自己的塊狀區域,但包含在一個塊狀區域內

    ?

    block一個挨著一個垂直格式化,inline則在水平方向上格式化。

    ?

    Inline盒模型放置在行內或是line box中,每行至少和最高的box一樣高,當box以baseline對齊時——即一個元素的底部和另一個box上除底部以外的某點對齊,行高可以比最高的box高。當容器寬度不夠時,行內元素將被放到多行中,這在一個p元素中經常發生。

    ?

    定位 Position

    Relative

    相對定位——先按照一般的定位,然后按所要求的差值移動。

    ?

    Floats

    一個浮動的box移動到一行的最左邊或是最右邊,其余的box圍繞在它周圍。下面這段html:

    <p>

    <img style=”float:right” src=”images/image.gif” width=”100″ height=”100″>Lorem ipsum dolor sit amet, consectetuer…

    </p>

    將顯示為:

    ?

    Absolute和Fixed

    這種情況下的布局完全不顧普通的文檔流,元素不屬于文檔流的一部分,大小取決于容器。Fixed時,容器為viewport(可視區域)。

    ?

    圖17:fixed

    注意-fixed即使在文檔流滾動時也不會移動。

    Layered representation

    這個由CSS屬性中的z-index指定,表示盒模型的第三個大小,即在z軸上的位置。Box分發到堆棧中(稱為堆棧上下文),每個堆棧中靠后的元素將被較早繪制,棧頂靠前的元素離用戶最近,當發生交疊時,將隱藏靠后的元素。堆棧根據z-index屬性排序,擁有z-index屬性的box形成了一個局部堆棧,viewport有外部堆棧,例如:

    <STYLE type=”text/css”>

    div {

    position: absolute;

    left: 2in;

    top: 2in;

    }

    </STYLE>

    <P>

    <DIV

    style=”z-index: 3;background-color:red; width: 1in; height: 1in; “>

    </DIV>

    <DIV

    style=”z-index: 1;background-color:green;width: 2in; height: 2in;”>

    </DIV>

    </p>

    結果是:

    ?

    雖然綠色div排在紅色div后面,可能在正常流中也已經被繪制在后面,但z-index有更高優先級,所以在根box的堆棧中更靠前。

    國外也有網友根據瀏覽器的工作原理繪制了幾張工作流程圖,方便大家通過簡易的圖片來了解這個辛苦的過程:

    總結

    以上是生活随笔為你收集整理的浏览器是如何工作的?(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产欧美精品一区二区三区 | 夜夜影院未满十八勿进 | 国内少妇偷人精品视频 | 美女毛片一区二区三区四区 | www国产亚洲精品久久网站 | 日日天干夜夜狠狠爱 | 欧美人与牲动交xxxx | 精品人妻中文字幕有码在线 | 国产超碰人人爽人人做人人添 | 中文字幕乱码人妻无码久久 | 亚洲精品中文字幕 | 国产精品无码成人午夜电影 | 色妞www精品免费视频 | 精品少妇爆乳无码av无码专区 | 亚洲精品中文字幕久久久久 | 精品无码国产自产拍在线观看蜜 | 国产97人人超碰caoprom | 大胆欧美熟妇xx | 亚洲精品一区二区三区婷婷月 | 国产艳妇av在线观看果冻传媒 | 国产情侣作爱视频免费观看 | 久久精品一区二区三区四区 | 亚洲国产精品无码久久久久高潮 | 久久99精品国产麻豆蜜芽 | 精品久久久久久亚洲精品 | 国产成人亚洲综合无码 | 国产精品无码成人午夜电影 | 免费人成网站视频在线观看 | 国产激情艳情在线看视频 | 国产精品久久久久无码av色戒 | 少妇性荡欲午夜性开放视频剧场 | 小鲜肉自慰网站xnxx | 亚洲第一无码av无码专区 | 四虎4hu永久免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品无码一区二区三区的天堂 | 少妇激情av一区二区 | 亚洲成av人综合在线观看 | 国产综合在线观看 | 国内精品人妻无码久久久影院蜜桃 | 真人与拘做受免费视频 | 综合人妻久久一区二区精品 | 无码人妻丰满熟妇区五十路百度 | 国产精品香蕉在线观看 | 97资源共享在线视频 | 久久久精品国产sm最大网站 | 亚洲男女内射在线播放 | 欧美成人免费全部网站 | 亚洲区小说区激情区图片区 | 亚洲国产午夜精品理论片 | 狠狠色欧美亚洲狠狠色www | 亚洲精品中文字幕乱码 | 久久综合九色综合97网 | 中文字幕亚洲情99在线 | 无码人妻av免费一区二区三区 | 午夜熟女插插xx免费视频 | 亚洲精品午夜国产va久久成人 | 国内揄拍国内精品少妇国语 | 麻豆蜜桃av蜜臀av色欲av | 国产亚洲人成a在线v网站 | 国产精品久久久 | 97人妻精品一区二区三区 | 国产av剧情md精品麻豆 | 未满小14洗澡无码视频网站 | 国产精品亚洲综合色区韩国 | 国产热a欧美热a在线视频 | 国产午夜精品一区二区三区嫩草 | 日韩少妇白浆无码系列 | 国产精品久免费的黄网站 | 成人无码精品一区二区三区 | 麻豆人妻少妇精品无码专区 | 午夜福利试看120秒体验区 | 大色综合色综合网站 | 久久 国产 尿 小便 嘘嘘 | 精品无码av一区二区三区 | 国产精品久久福利网站 | 亚洲国产精品无码久久久久高潮 | 18黄暴禁片在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 久久99精品国产.久久久久 | 亚洲精品www久久久 | 亚洲一区二区三区播放 | 亚洲人成网站色7799 | 高潮毛片无遮挡高清免费 | 亚洲日韩一区二区三区 | 免费看少妇作爱视频 | 无码人妻出轨黑人中文字幕 | 亚洲日本一区二区三区在线 | 欧美日韩一区二区三区自拍 | 国产乱人伦av在线无码 | 在线观看国产午夜福利片 | 骚片av蜜桃精品一区 | 久久久久久九九精品久 | 天堂在线观看www | 日本大乳高潮视频在线观看 | 久久精品国产亚洲精品 | 在线视频网站www色 | 在线精品国产一区二区三区 | 无套内谢的新婚少妇国语播放 | 精品水蜜桃久久久久久久 | 四虎国产精品免费久久 | 亚洲中文字幕在线观看 | 国产特级毛片aaaaaaa高清 | 76少妇精品导航 | 久久国产自偷自偷免费一区调 | 亚洲色欲色欲欲www在线 | 18无码粉嫩小泬无套在线观看 | 精品国产一区二区三区四区在线看 | 国产黑色丝袜在线播放 | 国产性生大片免费观看性 | 中文字幕乱码人妻二区三区 | 亚洲中文字幕在线观看 | 国产精品久久久久影院嫩草 | 欧美自拍另类欧美综合图片区 | 综合人妻久久一区二区精品 | 性色欲情网站iwww九文堂 | 久久97精品久久久久久久不卡 | 色欲综合久久中文字幕网 | 精品国产乱码久久久久乱码 | 午夜无码人妻av大片色欲 | 久久精品成人欧美大片 | 国内少妇偷人精品视频 | 亚洲欧美国产精品久久 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产亚洲视频中文字幕97精品 | 成人综合网亚洲伊人 | 国产精品无码一区二区三区不卡 | а√天堂www在线天堂小说 | 成人片黄网站色大片免费观看 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产亚洲人成在线播放 | 青青青手机频在线观看 | 日本精品少妇一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 香港三级日本三级妇三级 | 又粗又大又硬毛片免费看 | 人妻夜夜爽天天爽三区 | 性生交大片免费看女人按摩摩 | 亚洲日韩一区二区三区 | 国产色在线 | 国产 | 麻豆人妻少妇精品无码专区 | 成人性做爰aaa片免费看 | 色欲久久久天天天综合网精品 | 国产高潮视频在线观看 | 噜噜噜亚洲色成人网站 | 正在播放老肥熟妇露脸 | 日韩av无码一区二区三区不卡 | 狠狠色噜噜狠狠狠7777奇米 | 久久国产精品精品国产色婷婷 | 午夜精品久久久久久久 | 久久亚洲日韩精品一区二区三区 | 国产av人人夜夜澡人人爽麻豆 | 人妻天天爽夜夜爽一区二区 | 色婷婷av一区二区三区之红樱桃 | 午夜福利电影 | 国产三级精品三级男人的天堂 | 国产人成高清在线视频99最全资源 | 18无码粉嫩小泬无套在线观看 | 日韩精品无码一区二区中文字幕 | 国产综合久久久久鬼色 | 东京热男人av天堂 | 超碰97人人做人人爱少妇 | 76少妇精品导航 | 久久无码人妻影院 | 一本久道久久综合狠狠爱 | 水蜜桃色314在线观看 | 免费观看的无遮挡av | 男女性色大片免费网站 | 国产精品欧美成人 | 日本精品久久久久中文字幕 | 国产午夜福利100集发布 | 日本欧美一区二区三区乱码 | 久久久久成人片免费观看蜜芽 | 婷婷综合久久中文字幕蜜桃三电影 | 国产成人久久精品流白浆 | 亚洲成a人一区二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 国产精品视频免费播放 | 亚洲色欲色欲欲www在线 | 亚洲国产av精品一区二区蜜芽 | 无码国产乱人伦偷精品视频 | 免费无码肉片在线观看 | 国内老熟妇对白xxxxhd | 亚洲乱码中文字幕在线 | 东北女人啪啪对白 | 久久精品99久久香蕉国产色戒 | 永久免费精品精品永久-夜色 | 伊人久久大香线蕉av一区二区 | 久久无码中文字幕免费影院蜜桃 | 人人妻在人人 | 成人无码精品一区二区三区 | 色诱久久久久综合网ywww | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 少妇无码一区二区二三区 | 欧美国产日韩久久mv | 精品乱子伦一区二区三区 | 国内精品久久毛片一区二区 | 波多野结衣 黑人 | 大胆欧美熟妇xx | 国产片av国语在线观看 | 亚洲色欲色欲天天天www | 久久国产精品萌白酱免费 | 亚洲欧美国产精品久久 | 国产凸凹视频一区二区 | 中文字幕日产无线码一区 | 免费乱码人妻系列无码专区 | 日韩亚洲欧美中文高清在线 | 亚洲人成影院在线无码按摩店 | 欧美阿v高清资源不卡在线播放 | 色偷偷人人澡人人爽人人模 | 国产激情综合五月久久 | 在线欧美精品一区二区三区 | 又大又紧又粉嫩18p少妇 | 色诱久久久久综合网ywww | 国产熟女一区二区三区四区五区 | 99麻豆久久久国产精品免费 | 精品夜夜澡人妻无码av蜜桃 | 亚洲 高清 成人 动漫 | 水蜜桃亚洲一二三四在线 | 亚洲欧美国产精品专区久久 | 成人av无码一区二区三区 | 狠狠色丁香久久婷婷综合五月 | 色婷婷综合中文久久一本 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久人人爽人人爽人人片ⅴ | 亚洲欧美精品伊人久久 | 国产小呦泬泬99精品 | 天天摸天天透天天添 | 中文字幕无码免费久久9一区9 | 日韩精品无码一区二区中文字幕 | 丰满人妻翻云覆雨呻吟视频 | 国产精品无码久久av | 久久综合香蕉国产蜜臀av | 99精品国产综合久久久久五月天 | 欧美野外疯狂做受xxxx高潮 | 兔费看少妇性l交大片免费 | 亚洲成av人片在线观看无码不卡 | 西西人体www44rt大胆高清 | 日本又色又爽又黄的a片18禁 | 成人aaa片一区国产精品 | 亚洲一区二区三区香蕉 | 国产午夜亚洲精品不卡下载 | 成人试看120秒体验区 | 老熟女重囗味hdxx69 | 丁香花在线影院观看在线播放 | 久久国产精品精品国产色婷婷 | 日本熟妇乱子伦xxxx | 亚洲理论电影在线观看 | 欧美丰满少妇xxxx性 | 大色综合色综合网站 | 无码人妻黑人中文字幕 | 国产av无码专区亚洲awww | 狂野欧美性猛交免费视频 | 偷窥日本少妇撒尿chinese | 激情亚洲一区国产精品 | 国产美女精品一区二区三区 | 亚洲成av人片天堂网无码】 | 全球成人中文在线 | 少妇久久久久久人妻无码 | 亚洲乱码国产乱码精品精 | 又粗又大又硬又长又爽 | 免费无码一区二区三区蜜桃大 | 日韩少妇内射免费播放 | 亚洲无人区一区二区三区 | 中文字幕av伊人av无码av | 久久久久99精品成人片 | 97久久国产亚洲精品超碰热 | 日韩少妇白浆无码系列 | 帮老师解开蕾丝奶罩吸乳网站 | 极品尤物被啪到呻吟喷水 | 精品一区二区三区无码免费视频 | 欧美人与善在线com | 激情爆乳一区二区三区 | 亚洲国产欧美在线成人 | 99精品国产综合久久久久五月天 | 久久久中文字幕日本无吗 | 乱码午夜-极国产极内射 | 人妻少妇精品无码专区二区 | 丝袜美腿亚洲一区二区 | 国产精品理论片在线观看 | 亚洲熟熟妇xxxx | 人人澡人摸人人添 | 国产极品视觉盛宴 | 乱码午夜-极国产极内射 | 国产精品99久久精品爆乳 | 亚洲熟妇色xxxxx欧美老妇 | 曰韩少妇内射免费播放 | 亚洲精品成人av在线 | 一个人看的www免费视频在线观看 | 人妻插b视频一区二区三区 | 日韩欧美群交p片內射中文 | 国产又粗又硬又大爽黄老大爷视 | 国产精品香蕉在线观看 | 亚洲精品一区二区三区在线观看 | 国内精品九九久久久精品 | 99在线 | 亚洲 | 丝袜美腿亚洲一区二区 | 偷窥日本少妇撒尿chinese | 久久久无码中文字幕久... | 亚洲aⅴ无码成人网站国产app | 久久精品女人的天堂av | 久久久成人毛片无码 | 国产精品久久福利网站 | 色老头在线一区二区三区 | 性生交片免费无码看人 | 中国女人内谢69xxxxxa片 | 久久精品国产大片免费观看 | 亚洲精品久久久久中文第一幕 | 欧美精品一区二区精品久久 | 十八禁真人啪啪免费网站 | 国产高清av在线播放 | 人妻少妇精品久久 | 欧美 日韩 亚洲 在线 | 国产精品久久久久久亚洲毛片 | 乱码午夜-极国产极内射 | 精品无码国产自产拍在线观看蜜 | 在线观看国产午夜福利片 | 国产免费无码一区二区视频 | 亚洲精品综合一区二区三区在线 | 欧美35页视频在线观看 | 欧美日韩久久久精品a片 | 成人精品视频一区二区 | 国产黑色丝袜在线播放 | 日韩少妇白浆无码系列 | 亚洲综合精品香蕉久久网 | 熟妇人妻激情偷爽文 | 成年美女黄网站色大免费全看 | 中文字幕无码av激情不卡 | 国产亚av手机在线观看 | 色综合久久久无码中文字幕 | 99久久精品无码一区二区毛片 | 无遮挡国产高潮视频免费观看 | 亚洲春色在线视频 | 日韩 欧美 动漫 国产 制服 | 久青草影院在线观看国产 | 无人区乱码一区二区三区 | 久久午夜无码鲁丝片秋霞 | 日韩av无码一区二区三区不卡 | 无码人妻出轨黑人中文字幕 | 超碰97人人做人人爱少妇 | 精品欧洲av无码一区二区三区 | 中文字幕中文有码在线 | 色老头在线一区二区三区 | 7777奇米四色成人眼影 | 国产农村乱对白刺激视频 | 久久精品视频在线看15 | 免费无码的av片在线观看 | 老太婆性杂交欧美肥老太 | av无码电影一区二区三区 | 永久免费精品精品永久-夜色 | 国产在线精品一区二区高清不卡 | 欧美xxxx黑人又粗又长 | 人妻尝试又大又粗久久 | 牛和人交xxxx欧美 | www国产亚洲精品久久网站 | 无码人妻精品一区二区三区下载 | 亚洲精品鲁一鲁一区二区三区 | 亚洲精品一区二区三区四区五区 | 国产av无码专区亚洲awww | 日本大香伊一区二区三区 | 人人妻人人藻人人爽欧美一区 | 一本大道伊人av久久综合 | 亚洲色在线无码国产精品不卡 | 欧美高清在线精品一区 | 亚洲娇小与黑人巨大交 | 亚洲成a人片在线观看无码 | 久久精品人人做人人综合 | 精品人妻人人做人人爽夜夜爽 | 国产av一区二区三区最新精品 | 国产精品无码mv在线观看 | 国产亲子乱弄免费视频 | 亚洲一区二区三区四区 | 又粗又大又硬又长又爽 | 久久国产精品偷任你爽任你 | 三级4级全黄60分钟 | 蜜桃av抽搐高潮一区二区 | 亚洲精品国产第一综合99久久 | 欧美放荡的少妇 | 国产精品二区一区二区aⅴ污介绍 | 国产成人无码区免费内射一片色欲 | 乱人伦人妻中文字幕无码 | 亚洲成av人综合在线观看 | 性做久久久久久久免费看 | 精品人妻中文字幕有码在线 | 欧美一区二区三区视频在线观看 | 国产精品.xx视频.xxtv | 欧美日韩久久久精品a片 | av在线亚洲欧洲日产一区二区 | 又紧又大又爽精品一区二区 | 伊人久久大香线焦av综合影院 | 人人妻人人澡人人爽欧美一区 | 日日碰狠狠丁香久燥 | 中文字幕av无码一区二区三区电影 | 亚洲中文字幕在线无码一区二区 | 97se亚洲精品一区 | 国产精品久久精品三级 | 5858s亚洲色大成网站www | 亚洲综合另类小说色区 | 中文无码精品a∨在线观看不卡 | 国产亚洲精品久久久久久久 | 天海翼激烈高潮到腰振不止 | 久在线观看福利视频 | 亚洲热妇无码av在线播放 | 日韩欧美群交p片內射中文 | 亚洲熟妇色xxxxx欧美老妇y | 国产av一区二区精品久久凹凸 | 日韩欧美中文字幕公布 | 欧美激情内射喷水高潮 | 午夜男女很黄的视频 | 人人妻人人澡人人爽欧美一区 | 18精品久久久无码午夜福利 | 久久久久久久人妻无码中文字幕爆 | 亲嘴扒胸摸屁股激烈网站 | 国产尤物精品视频 | a片免费视频在线观看 | 野狼第一精品社区 | 久久久精品456亚洲影院 | 免费无码一区二区三区蜜桃大 | 国产无遮挡又黄又爽免费视频 | 亚洲欧洲中文日韩av乱码 | 国产精品高潮呻吟av久久 | 无码国产激情在线观看 | 波多野结衣一区二区三区av免费 | 久久综合香蕉国产蜜臀av | 亚洲乱码国产乱码精品精 | а√资源新版在线天堂 | 一区二区传媒有限公司 | 天堂久久天堂av色综合 | 国产精品高潮呻吟av久久 | 人妻无码αv中文字幕久久琪琪布 | 久久99精品久久久久久 | 亚洲综合另类小说色区 | 激情人妻另类人妻伦 | 内射巨臀欧美在线视频 | 无码国产色欲xxxxx视频 | 日本一卡二卡不卡视频查询 | 久久婷婷五月综合色国产香蕉 | 久久久精品欧美一区二区免费 | 色偷偷人人澡人人爽人人模 | 亚洲精品国产精品乱码视色 | 精品国产乱码久久久久乱码 | 蜜桃无码一区二区三区 | 一本精品99久久精品77 | 亚洲а∨天堂久久精品2021 | 三级4级全黄60分钟 | 色五月丁香五月综合五月 | 熟妇人妻激情偷爽文 | 国产深夜福利视频在线 | 国产熟女一区二区三区四区五区 | 国产精品久久久久7777 | 亚洲综合色区中文字幕 | 国产手机在线αⅴ片无码观看 | 久久综合给合久久狠狠狠97色 | 精品一区二区三区波多野结衣 | 亚洲精品鲁一鲁一区二区三区 | 中文字幕无码乱人伦 | 大地资源网第二页免费观看 | 欧美日本免费一区二区三区 | 日日碰狠狠丁香久燥 | 乱人伦人妻中文字幕无码久久网 | 国产精品无码久久av | 国内少妇偷人精品视频 | 99er热精品视频 | 欧美日本免费一区二区三区 | 国产凸凹视频一区二区 | 亚洲一区二区三区播放 | 国产亚洲视频中文字幕97精品 | 精品一二三区久久aaa片 | 国产成人无码a区在线观看视频app | 亚洲区欧美区综合区自拍区 | 免费无码av一区二区 | 一个人免费观看的www视频 | 亚洲日本va午夜在线电影 | 丰满人妻翻云覆雨呻吟视频 | 九月婷婷人人澡人人添人人爽 | 国产真人无遮挡作爱免费视频 | av在线亚洲欧洲日产一区二区 | 精品人妻人人做人人爽 | 无码吃奶揉捏奶头高潮视频 | 精品无人国产偷自产在线 | 噜噜噜亚洲色成人网站 | 俄罗斯老熟妇色xxxx | 影音先锋中文字幕无码 | 7777奇米四色成人眼影 | 欧美丰满老熟妇xxxxx性 | 高潮喷水的毛片 | 在线精品亚洲一区二区 | 又粗又大又硬又长又爽 | 超碰97人人射妻 | 国产suv精品一区二区五 | 亚洲毛片av日韩av无码 | 精品国产一区二区三区av 性色 | 青草视频在线播放 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 欧美黑人巨大xxxxx | 精品一区二区三区波多野结衣 | 久久精品人妻少妇一区二区三区 | 婷婷丁香六月激情综合啪 | 亚洲一区二区三区无码久久 | 中文字幕无码人妻少妇免费 | 国产亚洲人成在线播放 | 久久精品一区二区三区四区 | 无码国产激情在线观看 | 无码任你躁久久久久久久 | 天堂а√在线地址中文在线 | 国产精品亚洲lv粉色 | 国产成人无码av在线影院 | 免费无码肉片在线观看 | 欧美日韩一区二区免费视频 | 中文字幕av无码一区二区三区电影 | 狠狠色噜噜狠狠狠狠7777米奇 | 色欲人妻aaaaaaa无码 | 久久久久久亚洲精品a片成人 | 亚洲国产欧美国产综合一区 | 色狠狠av一区二区三区 | а√资源新版在线天堂 | 久久久亚洲欧洲日产国码αv | 亚洲精品一区二区三区大桥未久 | 久久久久久a亚洲欧洲av冫 | 国产艳妇av在线观看果冻传媒 | 久久视频在线观看精品 | 精品亚洲成av人在线观看 | 97色伦图片97综合影院 | 久久午夜无码鲁丝片秋霞 | 精品久久久中文字幕人妻 | 午夜精品一区二区三区在线观看 | 精品国产一区av天美传媒 | 天下第一社区视频www日本 | 中文字幕人妻丝袜二区 | 国产在线一区二区三区四区五区 | 九九热爱视频精品 | 日本大香伊一区二区三区 | 一本大道伊人av久久综合 | 久久天天躁夜夜躁狠狠 | 无码av最新清无码专区吞精 | 在线亚洲高清揄拍自拍一品区 | 久久久婷婷五月亚洲97号色 | 人妻人人添人妻人人爱 | 狠狠综合久久久久综合网 | 国产在线一区二区三区四区五区 | 一本一道久久综合久久 | 中文字幕无码av激情不卡 | 高潮毛片无遮挡高清免费 | 国产sm调教视频在线观看 | 日本一卡二卡不卡视频查询 | 精品日本一区二区三区在线观看 | 国产熟妇高潮叫床视频播放 | 国产一区二区三区日韩精品 | 久久五月精品中文字幕 | 精品成在人线av无码免费看 | 久久精品人妻少妇一区二区三区 | 久久99精品久久久久婷婷 | 18无码粉嫩小泬无套在线观看 | 国产亚洲精品久久久久久久 | 99久久精品日本一区二区免费 | 亚洲男人av天堂午夜在 | 全黄性性激高免费视频 | 亚洲一区二区三区播放 | 色五月五月丁香亚洲综合网 | 又紧又大又爽精品一区二区 | 亚洲精品国产a久久久久久 | 久久精品人人做人人综合试看 | 丰满人妻被黑人猛烈进入 | 青青久在线视频免费观看 | 国产精品久久精品三级 | 永久免费观看国产裸体美女 | 77777熟女视频在线观看 а天堂中文在线官网 | 妺妺窝人体色www婷婷 | 天堂а√在线中文在线 | 在线看片无码永久免费视频 | 国产另类ts人妖一区二区 | 老司机亚洲精品影院无码 | 免费人成在线视频无码 | 狠狠噜狠狠狠狠丁香五月 | 久久久精品成人免费观看 | 国产午夜福利亚洲第一 | 极品嫩模高潮叫床 | 中文字幕乱码亚洲无线三区 | 亚洲呦女专区 | 夜夜躁日日躁狠狠久久av | 成人一在线视频日韩国产 | 性色欲网站人妻丰满中文久久不卡 | 久久人人爽人人爽人人片av高清 | 67194成是人免费无码 | 亚洲色欲久久久综合网东京热 | 国产av人人夜夜澡人人爽麻豆 | 国产成人无码av在线影院 | 亚洲第一无码av无码专区 | 99久久人妻精品免费二区 | 欧洲精品码一区二区三区免费看 | 鲁大师影院在线观看 | 黑人粗大猛烈进出高潮视频 | 麻花豆传媒剧国产免费mv在线 | 内射巨臀欧美在线视频 | 欧美成人午夜精品久久久 | 人妻插b视频一区二区三区 | 亚洲精品一区二区三区四区五区 | av香港经典三级级 在线 | 亚洲国产精品一区二区第一页 | 精品无码国产自产拍在线观看蜜 | 久久 国产 尿 小便 嘘嘘 | 无码纯肉视频在线观看 | 国语精品一区二区三区 | 国产又爽又黄又刺激的视频 | 精品国偷自产在线 | 大肉大捧一进一出好爽视频 | 亚洲熟女一区二区三区 | 特级做a爰片毛片免费69 | 国产九九九九九九九a片 | 国产精品丝袜黑色高跟鞋 | 日韩精品无码免费一区二区三区 | 亚洲大尺度无码无码专区 | 亚洲无人区午夜福利码高清完整版 | 丰满岳乱妇在线观看中字无码 | 国产另类ts人妖一区二区 | 激情内射亚州一区二区三区爱妻 | 内射巨臀欧美在线视频 | 无码国模国产在线观看 | 久久无码专区国产精品s | 亚洲精品一区三区三区在线观看 | 草草网站影院白丝内射 | 日韩少妇白浆无码系列 | 日韩精品成人一区二区三区 | 日本精品少妇一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 国产精品沙发午睡系列 | 2019午夜福利不卡片在线 | 亚洲国产欧美国产综合一区 | 青草青草久热国产精品 | 日本丰满护士爆乳xxxx | 人妻有码中文字幕在线 | а√天堂www在线天堂小说 | 国产亚洲欧美日韩亚洲中文色 | 人妻无码久久精品人妻 | 无码午夜成人1000部免费视频 | 丰满护士巨好爽好大乳 | 亚洲国精产品一二二线 | 特大黑人娇小亚洲女 | 99久久人妻精品免费二区 | 少妇无码av无码专区在线观看 | 骚片av蜜桃精品一区 | 又粗又大又硬毛片免费看 | 76少妇精品导航 | 夜夜躁日日躁狠狠久久av | 日本精品人妻无码免费大全 | 一二三四社区在线中文视频 | 乌克兰少妇性做爰 | 亚洲а∨天堂久久精品2021 | 精品aⅴ一区二区三区 | 日本乱人伦片中文三区 | 亚洲色大成网站www国产 | 国产成人无码av片在线观看不卡 | 欧美怡红院免费全部视频 | 亚洲日本在线电影 | 国产精品人人爽人人做我的可爱 | 亚洲色欲色欲欲www在线 | 性色欲情网站iwww九文堂 | 色一情一乱一伦一视频免费看 | 亚洲午夜福利在线观看 | 亚洲中文字幕在线无码一区二区 | 国产人妻精品午夜福利免费 | 丰腴饱满的极品熟妇 | 亚洲大尺度无码无码专区 | 日日碰狠狠丁香久燥 | 波多野结衣av一区二区全免费观看 | 特黄特色大片免费播放器图片 | 蜜臀av在线播放 久久综合激激的五月天 | 夜夜高潮次次欢爽av女 | 成人综合网亚洲伊人 | 久久久婷婷五月亚洲97号色 | 国内精品人妻无码久久久影院 | 激情内射日本一区二区三区 | 久久久久久九九精品久 | 久久久久人妻一区精品色欧美 | 色情久久久av熟女人妻网站 | 国产99久久精品一区二区 | 伊人久久大香线蕉亚洲 | 最近免费中文字幕中文高清百度 | 亚洲人成网站色7799 | 无码人妻丰满熟妇区五十路百度 | 综合人妻久久一区二区精品 | 亚洲欧美日韩综合久久久 | 中文字幕久久久久人妻 | 久久午夜夜伦鲁鲁片无码免费 | 国产人妻精品一区二区三区 | 国产精品多人p群无码 | 伊人久久大香线焦av综合影院 | 日韩欧美中文字幕在线三区 | 麻豆精产国品 | 7777奇米四色成人眼影 | 曰本女人与公拘交酡免费视频 | 骚片av蜜桃精品一区 | 强辱丰满人妻hd中文字幕 | 国内精品一区二区三区不卡 | 亚洲精品成人福利网站 | 人人爽人人澡人人人妻 | 亚洲啪av永久无码精品放毛片 | 国产精品亚洲lv粉色 | aⅴ亚洲 日韩 色 图网站 播放 | 中文无码精品a∨在线观看不卡 | 67194成是人免费无码 | 男人的天堂2018无码 | 国产成人无码专区 | 99久久婷婷国产综合精品青草免费 | 特大黑人娇小亚洲女 | 美女毛片一区二区三区四区 | 日本欧美一区二区三区乱码 | 欧美猛少妇色xxxxx | 粗大的内捧猛烈进出视频 | 欧美刺激性大交 | 国产另类ts人妖一区二区 | а√天堂www在线天堂小说 | 久久久久久av无码免费看大片 | 天堂无码人妻精品一区二区三区 | 免费无码的av片在线观看 | 色综合久久中文娱乐网 | 青草青草久热国产精品 | 夜先锋av资源网站 | 亚洲日韩av一区二区三区中文 | 精品国产乱码久久久久乱码 | 激情五月综合色婷婷一区二区 | 大地资源中文第3页 | 少妇被黑人到高潮喷出白浆 | 在线播放免费人成毛片乱码 | 久久久亚洲欧洲日产国码αv | 中文字幕无码免费久久9一区9 | 在教室伦流澡到高潮hnp视频 | 99久久无码一区人妻 | 300部国产真实乱 | 国产超碰人人爽人人做人人添 | 真人与拘做受免费视频 | 四十如虎的丰满熟妇啪啪 | 国产综合色产在线精品 | 久热国产vs视频在线观看 | а√资源新版在线天堂 | 无码人妻久久一区二区三区不卡 | 激情综合激情五月俺也去 | 亚洲精品www久久久 | 免费播放一区二区三区 | 无码一区二区三区在线 | 亚洲日韩av一区二区三区四区 | 少妇无码一区二区二三区 | 国产va免费精品观看 | 蜜桃视频插满18在线观看 | 国产精品久久久久无码av色戒 | 欧美日韩色另类综合 | 国产人妖乱国产精品人妖 | 狠狠躁日日躁夜夜躁2020 | 亚洲人成影院在线观看 | 国产熟妇高潮叫床视频播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 一个人看的视频www在线 | 中文字幕无码热在线视频 | 久久99精品国产.久久久久 | 秋霞成人午夜鲁丝一区二区三区 | 性欧美牲交xxxxx视频 | 狂野欧美性猛交免费视频 | 日本精品久久久久中文字幕 | 自拍偷自拍亚洲精品10p | 国产激情精品一区二区三区 | 亚洲精品一区二区三区四区五区 | 婷婷色婷婷开心五月四房播播 | 高潮毛片无遮挡高清免费视频 | 国产性生交xxxxx无码 | 成人免费视频视频在线观看 免费 | 77777熟女视频在线观看 а天堂中文在线官网 | 蜜桃臀无码内射一区二区三区 | 人妻aⅴ无码一区二区三区 | 乌克兰少妇性做爰 | 国产精品成人av在线观看 | 99国产精品白浆在线观看免费 | 婷婷综合久久中文字幕蜜桃三电影 | 国产精品久久久久久亚洲毛片 | 国产在线aaa片一区二区99 | 亚洲综合精品香蕉久久网 | 男女猛烈xx00免费视频试看 | 强奷人妻日本中文字幕 | 色婷婷综合激情综在线播放 | 最近中文2019字幕第二页 | 久久亚洲精品成人无码 | 伊人久久大香线蕉av一区二区 | 日本一卡二卡不卡视频查询 | aⅴ亚洲 日韩 色 图网站 播放 | 久久国产精品萌白酱免费 | 少妇厨房愉情理9仑片视频 | 亚洲aⅴ无码成人网站国产app | 少妇被黑人到高潮喷出白浆 | 2020最新国产自产精品 | 7777奇米四色成人眼影 | 99久久99久久免费精品蜜桃 | 中文字幕av伊人av无码av | 婷婷色婷婷开心五月四房播播 | 图片小说视频一区二区 | 日本www一道久久久免费榴莲 | 玩弄中年熟妇正在播放 | 国产精品第一国产精品 | 宝宝好涨水快流出来免费视频 | 亚洲成av人片天堂网无码】 | 青草青草久热国产精品 | 国产乱人伦偷精品视频 | 午夜精品久久久内射近拍高清 | 丰满人妻一区二区三区免费视频 | 精品久久综合1区2区3区激情 | 少妇无码吹潮 | 波多野结衣av一区二区全免费观看 | 人妻无码αv中文字幕久久琪琪布 | 特黄特色大片免费播放器图片 | 日韩精品无码一区二区中文字幕 | 无遮无挡爽爽免费视频 | 国产成人综合在线女婷五月99播放 | 男女猛烈xx00免费视频试看 | 欧美亚洲日韩国产人成在线播放 | 欧美乱妇无乱码大黄a片 | 日本熟妇乱子伦xxxx | 奇米影视888欧美在线观看 | 亚洲精品一区二区三区大桥未久 | 东京热无码av男人的天堂 | 高中生自慰www网站 | 国精产品一品二品国精品69xx | 国产精品高潮呻吟av久久4虎 | 亚洲成av人在线观看网址 | 全球成人中文在线 | 国产凸凹视频一区二区 | 成人片黄网站色大片免费观看 | 亚洲小说图区综合在线 | 亚洲国产成人av在线观看 | 无码人妻丰满熟妇区五十路百度 | 性开放的女人aaa片 | 欧美日韩亚洲国产精品 | 久久久久国色av免费观看性色 | 欧美国产日产一区二区 | 美女毛片一区二区三区四区 | 天天躁夜夜躁狠狠是什么心态 | 亚洲の无码国产の无码步美 | 国产手机在线αⅴ片无码观看 | 在线欧美精品一区二区三区 | 无码任你躁久久久久久久 | 免费播放一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 人人超人人超碰超国产 | 日日天日日夜日日摸 | 国产人妻人伦精品1国产丝袜 | 99久久精品日本一区二区免费 | 日韩欧美中文字幕在线三区 | 国精产品一品二品国精品69xx | 欧美熟妇另类久久久久久多毛 | 影音先锋中文字幕无码 | 中文字幕精品av一区二区五区 | 国产在热线精品视频 | 亚洲色大成网站www | 精品欧洲av无码一区二区三区 | 日日碰狠狠丁香久燥 | √天堂中文官网8在线 | 老熟女乱子伦 | 免费男性肉肉影院 | 高清不卡一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 中文字幕乱码中文乱码51精品 | 国产两女互慰高潮视频在线观看 | 久久久久国色av免费观看性色 | 疯狂三人交性欧美 | 又大又黄又粗又爽的免费视频 | 日本一区二区三区免费高清 | 国产偷国产偷精品高清尤物 | 狠狠色丁香久久婷婷综合五月 | 久久精品国产日本波多野结衣 | 国产精品人妻一区二区三区四 | 色五月丁香五月综合五月 | 国产免费观看黄av片 | 日本一区二区三区免费播放 | 欧美丰满熟妇xxxx性ppx人交 | 99麻豆久久久国产精品免费 | 久久精品丝袜高跟鞋 | 国产麻豆精品精东影业av网站 | 色欲久久久天天天综合网精品 | 欧洲精品码一区二区三区免费看 | 男女爱爱好爽视频免费看 | 九九在线中文字幕无码 | 99re在线播放 | 国产乱人伦av在线无码 | 久久成人a毛片免费观看网站 | 日本大香伊一区二区三区 | 综合网日日天干夜夜久久 | 乱码av麻豆丝袜熟女系列 | 国产香蕉尹人综合在线观看 | 98国产精品综合一区二区三区 | 日韩av激情在线观看 | 精品一区二区三区波多野结衣 | 亚洲成av人影院在线观看 | 成熟女人特级毛片www免费 | 国内综合精品午夜久久资源 | 两性色午夜视频免费播放 | 在线天堂新版最新版在线8 | 国产精品欧美成人 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久久久久久人妻无码中文字幕爆 | 欧美 日韩 人妻 高清 中文 | 亚洲の无码国产の无码影院 | 中文字幕无码免费久久9一区9 | 久久久久久九九精品久 | 国产av久久久久精东av | 日本乱偷人妻中文字幕 | 波多野结衣乳巨码无在线观看 | 六月丁香婷婷色狠狠久久 | 精品无码一区二区三区爱欲 | 成人女人看片免费视频放人 | 国产无套内射久久久国产 | 亚洲a无码综合a国产av中文 | 少妇性l交大片欧洲热妇乱xxx | 国产又爽又猛又粗的视频a片 | 国产熟妇高潮叫床视频播放 | 一本久道高清无码视频 | 熟妇人妻激情偷爽文 | 久久精品国产一区二区三区肥胖 | 帮老师解开蕾丝奶罩吸乳网站 | 蜜臀aⅴ国产精品久久久国产老师 | 伊人色综合久久天天小片 | 大色综合色综合网站 | 四虎4hu永久免费 | 伊人久久大香线焦av综合影院 | 少妇性l交大片 | 国产亚洲精品久久久久久大师 | 偷窥日本少妇撒尿chinese | 久久99精品国产.久久久久 | 精品欧洲av无码一区二区三区 | 日本一区二区更新不卡 | 国产精品99久久精品爆乳 | 国产av人人夜夜澡人人爽麻豆 | 一本久久a久久精品vr综合 | 最新版天堂资源中文官网 | 人人妻人人澡人人爽精品欧美 | 人妻少妇被猛烈进入中文字幕 | 久久熟妇人妻午夜寂寞影院 | 亚洲一区二区三区香蕉 | 亚洲成a人片在线观看日本 | 最近免费中文字幕中文高清百度 | а√资源新版在线天堂 | 欧美日本精品一区二区三区 | 性做久久久久久久久 | 成人免费无码大片a毛片 | 国产免费久久久久久无码 | 国产激情艳情在线看视频 | 狠狠色噜噜狠狠狠狠7777米奇 | ass日本丰满熟妇pics | 国产成人久久精品流白浆 | 黄网在线观看免费网站 | 97资源共享在线视频 | 亚洲色偷偷偷综合网 | 亚洲经典千人经典日产 | 亚洲啪av永久无码精品放毛片 | 六十路熟妇乱子伦 | 黑人巨大精品欧美黑寡妇 | 无码免费一区二区三区 | 久热国产vs视频在线观看 | 搡女人真爽免费视频大全 | 麻豆av传媒蜜桃天美传媒 | 亚洲熟熟妇xxxx | 欧美丰满少妇xxxx性 | 水蜜桃亚洲一二三四在线 | 国产suv精品一区二区五 | 久9re热视频这里只有精品 | 我要看www免费看插插视频 | 成人无码影片精品久久久 | 宝宝好涨水快流出来免费视频 | 狠狠cao日日穞夜夜穞av | 麻豆国产人妻欲求不满 | 免费无码午夜福利片69 | 色一情一乱一伦一视频免费看 | 丰满少妇女裸体bbw | 欧美性黑人极品hd | 国产亚洲精品精品国产亚洲综合 | 国产精品va在线观看无码 | 色综合久久久无码网中文 | 呦交小u女精品视频 | 国产精品永久免费视频 | 欧美性猛交xxxx富婆 | 久久久婷婷五月亚洲97号色 | 亚洲一区二区三区国产精华液 | 久久国产自偷自偷免费一区调 | 日本在线高清不卡免费播放 | 俄罗斯老熟妇色xxxx | 国产国产精品人在线视 | 亚洲aⅴ无码成人网站国产app | 日本成熟视频免费视频 | 99久久婷婷国产综合精品青草免费 | 综合网日日天干夜夜久久 | 成年美女黄网站色大免费视频 | 国产精品久久久久久亚洲影视内衣 | 国产两女互慰高潮视频在线观看 | 伊人久久大香线蕉午夜 | 丰满护士巨好爽好大乳 | 亚洲欧美日韩综合久久久 | 少妇性l交大片 | 精品国产福利一区二区 | 亚洲一区二区三区播放 | 亚洲呦女专区 | 日韩精品成人一区二区三区 | 在线播放无码字幕亚洲 | 国产人妻人伦精品1国产丝袜 | 色综合久久久无码网中文 | 久久综合狠狠综合久久综合88 | 成人无码精品一区二区三区 | 曰韩无码二三区中文字幕 | 97色伦图片97综合影院 | 亚洲欧洲无卡二区视頻 | 国产极品视觉盛宴 | 国内揄拍国内精品少妇国语 | 色欲久久久天天天综合网精品 | 欧美自拍另类欧美综合图片区 | 免费人成在线视频无码 | 熟妇人妻中文av无码 | 成人无码精品1区2区3区免费看 | 波多野42部无码喷潮在线 | 国产人妻精品一区二区三区不卡 | 中文字幕+乱码+中文字幕一区 | 国产av人人夜夜澡人人爽麻豆 | 中文精品无码中文字幕无码专区 | 久久久久99精品成人片 | 国产精品毛多多水多 | 老熟女重囗味hdxx69 | 中文无码伦av中文字幕 | 蜜臀aⅴ国产精品久久久国产老师 | 国产偷国产偷精品高清尤物 | 精品厕所偷拍各类美女tp嘘嘘 | 中文字幕av无码一区二区三区电影 | 丰满肥臀大屁股熟妇激情视频 | 久久99热只有频精品8 | 亚洲熟悉妇女xxx妇女av | 日产精品高潮呻吟av久久 | 亚洲精品一区二区三区在线 | 99国产欧美久久久精品 | 鲁鲁鲁爽爽爽在线视频观看 | www国产亚洲精品久久久日本 | 亚洲国产欧美国产综合一区 | 老头边吃奶边弄进去呻吟 | 亚洲无人区一区二区三区 | a片免费视频在线观看 | 九九热爱视频精品 | 奇米影视888欧美在线观看 | 麻豆国产丝袜白领秘书在线观看 | 亚洲欧洲日本综合aⅴ在线 | 亚洲无人区午夜福利码高清完整版 | 97人妻精品一区二区三区 | 欧美老人巨大xxxx做受 | 欧美精品国产综合久久 | 国产成人精品优优av | 老熟女重囗味hdxx69 | 亚洲综合在线一区二区三区 | 中文字幕精品av一区二区五区 | 久久久av男人的天堂 | 扒开双腿吃奶呻吟做受视频 | 成人一在线视频日韩国产 | 欧美老妇与禽交 | 久久精品99久久香蕉国产色戒 | 97资源共享在线视频 | 婷婷丁香六月激情综合啪 | 成人影院yy111111在线观看 | 日韩精品无码一区二区中文字幕 | 成人免费视频在线观看 | 免费人成网站视频在线观看 | 天天燥日日燥 | 国产精品二区一区二区aⅴ污介绍 | 秋霞特色aa大片 | 欧美黑人性暴力猛交喷水 | 国产精华av午夜在线观看 | 麻豆国产97在线 | 欧洲 | 精品人人妻人人澡人人爽人人 | 人妻无码αv中文字幕久久琪琪布 | 人妻有码中文字幕在线 | 国产精品国产自线拍免费软件 | 色综合久久久久综合一本到桃花网 | 国产肉丝袜在线观看 | 国产无遮挡又黄又爽免费视频 | 国产亚洲欧美日韩亚洲中文色 | 久久久久久九九精品久 | 精品人妻av区 | 日本精品高清一区二区 | 色婷婷av一区二区三区之红樱桃 | 玩弄中年熟妇正在播放 | yw尤物av无码国产在线观看 | 成人三级无码视频在线观看 | 色一情一乱一伦一视频免费看 | 久久精品女人的天堂av | 成人精品一区二区三区中文字幕 | 国产xxx69麻豆国语对白 | 麻花豆传媒剧国产免费mv在线 | 俺去俺来也www色官网 | 亚洲一区二区三区四区 | 国产69精品久久久久app下载 | 亚洲中文字幕乱码av波多ji | 亚洲精品久久久久久一区二区 | 99精品无人区乱码1区2区3区 | 一个人看的视频www在线 | 亚洲色偷偷偷综合网 | 日韩欧美中文字幕公布 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲男人av天堂午夜在 | 国产精品怡红院永久免费 | 欧美激情综合亚洲一二区 | 国内精品人妻无码久久久影院蜜桃 | 又大又紧又粉嫩18p少妇 | 无码精品国产va在线观看dvd | 小sao货水好多真紧h无码视频 | 东京一本一道一二三区 | 日本va欧美va欧美va精品 | 亚洲乱码日产精品bd | 伊在人天堂亚洲香蕉精品区 | 99久久精品日本一区二区免费 | 日本护士xxxxhd少妇 | 中文字幕中文有码在线 | 天堂亚洲2017在线观看 | 国产欧美熟妇另类久久久 | 亚洲午夜无码久久 | 又色又爽又黄的美女裸体网站 | 免费无码一区二区三区蜜桃大 | 野狼第一精品社区 | 成人免费视频在线观看 | 精品国偷自产在线视频 | 蜜桃臀无码内射一区二区三区 | 亚洲国产精品无码久久久久高潮 | 人人妻人人澡人人爽人人精品 | 四虎永久在线精品免费网址 | 日韩精品无码免费一区二区三区 | 最新国产麻豆aⅴ精品无码 | 男女作爱免费网站 | 日日天干夜夜狠狠爱 | 国产成人一区二区三区别 | 亚洲日韩av一区二区三区中文 | 久久国产精品偷任你爽任你 | 99精品视频在线观看免费 | 日韩av无码中文无码电影 | 久久综合久久自在自线精品自 | 国产av剧情md精品麻豆 | 日本丰满护士爆乳xxxx | 亚洲中文字幕在线观看 | 无码av中文字幕免费放 | 亚洲精品中文字幕 | 青草视频在线播放 | 国产女主播喷水视频在线观看 | 未满成年国产在线观看 | 中文字幕av伊人av无码av | 国产香蕉尹人综合在线观看 | 日韩av激情在线观看 | 未满成年国产在线观看 | 国产精品多人p群无码 | 国产成人一区二区三区别 | 性色欲网站人妻丰满中文久久不卡 | 天堂久久天堂av色综合 | 狠狠色噜噜狠狠狠7777奇米 | 极品嫩模高潮叫床 | 久久国产精品偷任你爽任你 | 国产又粗又硬又大爽黄老大爷视 | 国产成人人人97超碰超爽8 | 国产精品毛片一区二区 | 国产女主播喷水视频在线观看 | 国产精品无码一区二区三区不卡 | 红桃av一区二区三区在线无码av | 日本一区二区三区免费高清 | 国产人妻人伦精品1国产丝袜 | 51国偷自产一区二区三区 | 国产精品毛多多水多 | 成人性做爰aaa片免费看 | 人妻aⅴ无码一区二区三区 | av在线亚洲欧洲日产一区二区 | 夫妻免费无码v看片 | 久久久久久av无码免费看大片 | 亚洲色欲久久久综合网东京热 | 在线精品亚洲一区二区 | 波多野结衣av在线观看 | 999久久久国产精品消防器材 | 日韩欧美群交p片內射中文 | 国产内射爽爽大片视频社区在线 | 精品国产av色一区二区深夜久久 | 国产明星裸体无码xxxx视频 | 久久久久久九九精品久 | 风流少妇按摩来高潮 | 中文字幕无码av激情不卡 | 久久伊人色av天堂九九小黄鸭 | av小次郎收藏 | 国产精品久久久av久久久 | 国产亚洲精品久久久闺蜜 | 无码乱肉视频免费大全合集 | 亚洲一区二区三区偷拍女厕 | 国产成人无码av片在线观看不卡 | 国产精品亚洲lv粉色 | 无码一区二区三区在线 | 亚洲精品一区二区三区四区五区 | 一本久道久久综合狠狠爱 | 国产精品亚洲专区无码不卡 | 精品无码一区二区三区爱欲 | 日产精品高潮呻吟av久久 | 欧美怡红院免费全部视频 | 国产在线精品一区二区高清不卡 | 久久精品中文闷骚内射 | 色综合视频一区二区三区 | 性色欲网站人妻丰满中文久久不卡 | 老子影院午夜伦不卡 | 一区二区三区乱码在线 | 欧洲 | 色一情一乱一伦一视频免费看 | 99国产欧美久久久精品 | 好爽又高潮了毛片免费下载 | 日本熟妇大屁股人妻 | 国产成人精品三级麻豆 | 中文字幕av无码一区二区三区电影 | 荫蒂添的好舒服视频囗交 | 鲁一鲁av2019在线 | 国产在线精品一区二区三区直播 | 久久精品人人做人人综合 | 激情综合激情五月俺也去 | 无码国内精品人妻少妇 | 狠狠亚洲超碰狼人久久 | 波多野42部无码喷潮在线 | 中文字幕av无码一区二区三区电影 | 成人无码视频免费播放 | 日韩精品久久久肉伦网站 | 亚洲日韩精品欧美一区二区 | 狠狠色噜噜狠狠狠7777奇米 | 成人无码精品1区2区3区免费看 | 大肉大捧一进一出视频出来呀 | 国产精品亚洲综合色区韩国 | 亚洲精品中文字幕乱码 | 兔费看少妇性l交大片免费 | 国产亚av手机在线观看 | 成人亚洲精品久久久久 | 国产av一区二区精品久久凹凸 | 国产国产精品人在线视 | 欧美丰满少妇xxxx性 | 亚洲国产精华液网站w | 婷婷六月久久综合丁香 | 精品国产一区二区三区av 性色 | 亚洲精品www久久久 | 国产99久久精品一区二区 | 麻豆精品国产精华精华液好用吗 | 国精品人妻无码一区二区三区蜜柚 | 国产精品沙发午睡系列 | 久久99久久99精品中文字幕 | 欧美 日韩 人妻 高清 中文 | 思思久久99热只有频精品66 | 99er热精品视频 | 午夜精品久久久久久久久 | 少妇无码一区二区二三区 | 永久免费精品精品永久-夜色 | 久青草影院在线观看国产 | 亚洲色欲色欲欲www在线 | 亚洲 a v无 码免 费 成 人 a v | 亚洲日韩av一区二区三区中文 | 色窝窝无码一区二区三区色欲 | 亚洲成色在线综合网站 | 久久亚洲日韩精品一区二区三区 | 久久无码人妻影院 | 老熟女乱子伦 | 强伦人妻一区二区三区视频18 | 欧美第一黄网免费网站 | 又色又爽又黄的美女裸体网站 | 7777奇米四色成人眼影 | 久久亚洲精品成人无码 | 久久zyz资源站无码中文动漫 | 天天综合网天天综合色 | 一本一道久久综合久久 | 亚洲人成网站免费播放 | 台湾无码一区二区 | 亚洲一区av无码专区在线观看 | 中文字幕中文有码在线 | 国产凸凹视频一区二区 | av在线亚洲欧洲日产一区二区 | 日本又色又爽又黄的a片18禁 | 亚洲精品久久久久中文第一幕 | 99精品国产综合久久久久五月天 | 成人女人看片免费视频放人 | 日本精品少妇一区二区三区 | 亚洲爆乳大丰满无码专区 | 中文字幕av无码一区二区三区电影 | 亚洲天堂2017无码 | 玩弄中年熟妇正在播放 | 欧美性猛交内射兽交老熟妇 | 欧美激情一区二区三区成人 | 5858s亚洲色大成网站www | 国产精品久久国产精品99 | 国产成人无码专区 | 国产精品高潮呻吟av久久 | 亚洲国产午夜精品理论片 | 久久久久久久久888 | 蜜臀av无码人妻精品 | 在线天堂新版最新版在线8 | 未满小14洗澡无码视频网站 | 人人妻人人澡人人爽欧美一区 | 少妇被粗大的猛进出69影院 | 精品国产麻豆免费人成网站 | 在线成人www免费观看视频 | 日日天干夜夜狠狠爱 | 极品尤物被啪到呻吟喷水 | 国产成人精品无码播放 | 国产精品怡红院永久免费 | 国产成人精品视频ⅴa片软件竹菊 | 无码播放一区二区三区 | 日本乱人伦片中文三区 | 曰韩少妇内射免费播放 | 黑人巨大精品欧美黑寡妇 | 精品无码av一区二区三区 | 久9re热视频这里只有精品 | 国产乱子伦视频在线播放 | 性啪啪chinese东北女人 | 亚洲无人区午夜福利码高清完整版 | 日日摸日日碰夜夜爽av | 婷婷色婷婷开心五月四房播播 | 国产激情无码一区二区 | 精品国偷自产在线 | 97精品国产97久久久久久免费 | 麻豆md0077饥渴少妇 | 久久久久久亚洲精品a片成人 | 色五月丁香五月综合五月 | 无码国模国产在线观看 | 国内老熟妇对白xxxxhd | 正在播放东北夫妻内射 | √天堂中文官网8在线 | а天堂中文在线官网 | 亚洲精品中文字幕久久久久 | 亚洲色成人中文字幕网站 | 成人性做爰aaa片免费看 | 亚洲午夜久久久影院 | aa片在线观看视频在线播放 | 无码任你躁久久久久久久 | 亚洲精品一区二区三区在线 | 国产亚洲精品久久久闺蜜 | 亚洲狠狠色丁香婷婷综合 | 中文字幕无码av波多野吉衣 | 国产成人精品久久亚洲高清不卡 | 麻豆果冻传媒2021精品传媒一区下载 | 女高中生第一次破苞av | 乱人伦中文视频在线观看 | av无码电影一区二区三区 | 99久久精品国产一区二区蜜芽 | 无遮无挡爽爽免费视频 | 人人超人人超碰超国产 | 亚洲区欧美区综合区自拍区 | 中文字幕 亚洲精品 第1页 | 老熟妇乱子伦牲交视频 | 噜噜噜亚洲色成人网站 | 亚洲码国产精品高潮在线 | a在线亚洲男人的天堂 | 无码一区二区三区在线观看 | 国产尤物精品视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 老子影院午夜精品无码 | 国产熟妇另类久久久久 | 激情人妻另类人妻伦 | 夜夜夜高潮夜夜爽夜夜爰爰 | 美女毛片一区二区三区四区 | 少妇太爽了在线观看 | 久久精品国产一区二区三区肥胖 | 图片区 小说区 区 亚洲五月 | 97色伦图片97综合影院 | 亚洲国产精品一区二区第一页 | 日本一卡2卡3卡四卡精品网站 | 人人澡人人妻人人爽人人蜜桃 | 久久99热只有频精品8 | 无码人妻精品一区二区三区不卡 | 精品无码国产一区二区三区av | 亚洲男人av香蕉爽爽爽爽 | 成人欧美一区二区三区黑人 | 牲欲强的熟妇农村老妇女 | 蜜桃av抽搐高潮一区二区 | 久久精品人妻少妇一区二区三区 | 欧美人与禽猛交狂配 | 国产av一区二区三区最新精品 | 国产精品无码一区二区三区不卡 | 天堂一区人妻无码 | 影音先锋中文字幕无码 | 国产熟妇另类久久久久 | 国产亚洲精品久久久久久国模美 | 国产真实乱对白精彩久久 | 俄罗斯老熟妇色xxxx | 日韩人妻无码一区二区三区久久99 | 好爽又高潮了毛片免费下载 | 99久久久国产精品无码免费 | 水蜜桃亚洲一二三四在线 | 亚洲爆乳精品无码一区二区三区 | 久久国产精品精品国产色婷婷 | 亚洲综合伊人久久大杳蕉 | 丝袜足控一区二区三区 | 午夜男女很黄的视频 | 亚洲欧美精品伊人久久 | 精品无码一区二区三区爱欲 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 99久久久无码国产aaa精品 | 小sao货水好多真紧h无码视频 | 国产午夜亚洲精品不卡下载 | 国产做国产爱免费视频 | 国产亚洲精品久久久久久久 | 99精品视频在线观看免费 | 狠狠噜狠狠狠狠丁香五月 | 男女爱爱好爽视频免费看 | 国产人妻人伦精品1国产丝袜 | 熟女体下毛毛黑森林 | 久久亚洲精品中文字幕无男同 | 国产成人无码午夜视频在线观看 | 少女韩国电视剧在线观看完整 | 中文无码成人免费视频在线观看 | 国产无遮挡又黄又爽免费视频 | 久久精品国产99久久6动漫 | 乱人伦人妻中文字幕无码久久网 | 男女性色大片免费网站 | 国产精品18久久久久久麻辣 | 国产在线精品一区二区三区直播 | 国产99久久精品一区二区 | 自拍偷自拍亚洲精品10p | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 中文字幕无码日韩欧毛 | 久久综合久久自在自线精品自 | 国产在线aaa片一区二区99 | 精品人妻av区 | 午夜无码人妻av大片色欲 | 偷窥村妇洗澡毛毛多 | 一本久久伊人热热精品中文字幕 | 无码乱肉视频免费大全合集 | 无遮挡国产高潮视频免费观看 | 亚洲精品美女久久久久久久 | 色 综合 欧美 亚洲 国产 | 国产av久久久久精东av | 久久亚洲中文字幕无码 | 午夜福利一区二区三区在线观看 | 亚洲国产高清在线观看视频 | 精品人妻av区 | 久久精品国产一区二区三区 | 亚欧洲精品在线视频免费观看 | 欧美一区二区三区视频在线观看 | 小泽玛莉亚一区二区视频在线 | 色综合久久久无码中文字幕 | 帮老师解开蕾丝奶罩吸乳网站 | 日韩精品无码一本二本三本色 | 伊人久久婷婷五月综合97色 | 狠狠色丁香久久婷婷综合五月 | 国产成人综合色在线观看网站 | 无码福利日韩神码福利片 | а√天堂www在线天堂小说 | 女高中生第一次破苞av | 男女性色大片免费网站 | 日韩 欧美 动漫 国产 制服 | 99在线 | 亚洲 | 欧美 丝袜 自拍 制服 另类 | 又色又爽又黄的美女裸体网站 | 亚洲精品久久久久久久久久久 | 欧美熟妇另类久久久久久多毛 | 大胆欧美熟妇xx | 免费国产成人高清在线观看网站 | 国产成人一区二区三区在线观看 | 乱码午夜-极国产极内射 | 日韩 欧美 动漫 国产 制服 | 国产精品va在线观看无码 | 国语自产偷拍精品视频偷 | 午夜无码人妻av大片色欲 | 草草网站影院白丝内射 | 中文精品久久久久人妻不卡 | 国产成人午夜福利在线播放 | 国产一区二区不卡老阿姨 | 少妇厨房愉情理9仑片视频 | 国产麻豆精品精东影业av网站 | 亚洲精品久久久久久久久久久 | 俄罗斯老熟妇色xxxx | 99久久99久久免费精品蜜桃 | 最近中文2019字幕第二页 | 无码中文字幕色专区 | 成人无码精品一区二区三区 | 无码播放一区二区三区 | a国产一区二区免费入口 | 国产在线aaa片一区二区99 | 丝袜足控一区二区三区 | 国产舌乚八伦偷品w中 | 国产成人精品优优av | 精品久久久无码中文字幕 | 日韩精品久久久肉伦网站 | 大乳丰满人妻中文字幕日本 | 午夜嘿嘿嘿影院 | 久久国产精品二国产精品 | 在线精品国产一区二区三区 | 国产亚洲日韩欧美另类第八页 | 国产两女互慰高潮视频在线观看 | 国产另类ts人妖一区二区 | 亚洲综合久久一区二区 | 免费看少妇作爱视频 | 免费男性肉肉影院 | 人妻天天爽夜夜爽一区二区 | 成人免费视频在线观看 | 性生交大片免费看女人按摩摩 | 欧美变态另类xxxx | 99久久亚洲精品无码毛片 | 国产舌乚八伦偷品w中 | 无套内谢的新婚少妇国语播放 | av无码不卡在线观看免费 | 97夜夜澡人人双人人人喊 | 国产无遮挡又黄又爽又色 | 黑人巨大精品欧美一区二区 | 四虎4hu永久免费 | 又色又爽又黄的美女裸体网站 | 日日躁夜夜躁狠狠躁 | 99麻豆久久久国产精品免费 | 国产福利视频一区二区 | 东京一本一道一二三区 | 成年女人永久免费看片 | 国产无遮挡又黄又爽免费视频 | 无码人妻精品一区二区三区下载 | 丰满人妻被黑人猛烈进入 | 国产va免费精品观看 | 日韩欧美中文字幕公布 | 成 人影片 免费观看 | 蜜桃av抽搐高潮一区二区 | 婷婷五月综合缴情在线视频 | 亚洲精品一区三区三区在线观看 | 无码国产激情在线观看 | 亚洲码国产精品高潮在线 | 亚洲性无码av中文字幕 | 无人区乱码一区二区三区 | 在线观看免费人成视频 | 日韩在线不卡免费视频一区 | 精品一区二区三区无码免费视频 | 日韩人妻少妇一区二区三区 | 亚洲欧洲日本无在线码 | 日本熟妇人妻xxxxx人hd | 亚洲 a v无 码免 费 成 人 a v | 国产成人无码a区在线观看视频app | 97资源共享在线视频 | 性生交片免费无码看人 | 欧美人妻一区二区三区 | 国产农村乱对白刺激视频 | 99er热精品视频 | 日产国产精品亚洲系列 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品高潮呻吟av久久 | 亚洲娇小与黑人巨大交 | 狠狠亚洲超碰狼人久久 | 久久久亚洲欧洲日产国码αv | 国产精品内射视频免费 | 国产办公室秘书无码精品99 | 成人无码精品一区二区三区 | 女人色极品影院 | 日本饥渴人妻欲求不满 | 国产精品人人爽人人做我的可爱 | 3d动漫精品啪啪一区二区中 | a片在线免费观看 | 国产精品亚洲综合色区韩国 | √8天堂资源地址中文在线 | 色综合久久久无码网中文 | 精品偷自拍另类在线观看 | 98国产精品综合一区二区三区 | 亚洲中文字幕乱码av波多ji | 中文字幕人妻丝袜二区 | 久久精品国产99精品亚洲 | 色婷婷综合中文久久一本 | 在线观看国产一区二区三区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 免费无码肉片在线观看 | 欧美日韩亚洲国产精品 | 欧美成人家庭影院 | 亚洲午夜久久久影院 | 久久久久免费看成人影片 | a国产一区二区免费入口 | 免费观看又污又黄的网站 | 人人妻在人人 | 国产免费观看黄av片 | 中文字幕乱码中文乱码51精品 | 国产激情精品一区二区三区 | 国产性生交xxxxx无码 | 久久午夜无码鲁丝片秋霞 | 国产成人无码一二三区视频 | 国产 浪潮av性色四虎 | 无码精品人妻一区二区三区av | 国模大胆一区二区三区 | 中文字幕乱码中文乱码51精品 | 中文字幕av日韩精品一区二区 | 乌克兰少妇xxxx做受 | 99久久亚洲精品无码毛片 | 宝宝好涨水快流出来免费视频 | 中文字幕无码热在线视频 | 免费看少妇作爱视频 | 四虎永久在线精品免费网址 | 亚洲男人av香蕉爽爽爽爽 | 永久黄网站色视频免费直播 | 久久亚洲精品成人无码 | 欧美35页视频在线观看 | 国产xxx69麻豆国语对白 | 国模大胆一区二区三区 | 天下第一社区视频www日本 | 日本va欧美va欧美va精品 | 久久久精品国产sm最大网站 | 动漫av网站免费观看 | 午夜无码区在线观看 | 色欲综合久久中文字幕网 | 99re在线播放 | 美女张开腿让人桶 | 人妻插b视频一区二区三区 | 日韩亚洲欧美中文高清在线 | 2019午夜福利不卡片在线 | 六月丁香婷婷色狠狠久久 | 伊人久久大香线蕉午夜 | 免费国产成人高清在线观看网站 | 久久人人爽人人爽人人片av高清 | 黄网在线观看免费网站 | 精品久久久无码人妻字幂 | 国产精品久久久久久久影院 | 国产人成高清在线视频99最全资源 | 午夜福利试看120秒体验区 | 亚洲人成网站色7799 | 人妻无码αv中文字幕久久琪琪布 | 最新版天堂资源中文官网 | 国内少妇偷人精品视频免费 | 人妻中文无码久热丝袜 | 国产精品久久久久影院嫩草 | 樱花草在线社区www | 亚洲一区二区三区含羞草 | 久久精品中文字幕一区 | 久久久久久a亚洲欧洲av冫 | 久久久精品人妻久久影视 | 国产成人精品视频ⅴa片软件竹菊 | 久久综合狠狠综合久久综合88 | 日本护士毛茸茸高潮 | 国产乱人伦av在线无码 | 久久天天躁夜夜躁狠狠 | 午夜丰满少妇性开放视频 | 中文字幕+乱码+中文字幕一区 | 亚洲熟悉妇女xxx妇女av | 日韩欧美群交p片內射中文 | 亚洲精品一区二区三区大桥未久 | 一本久久a久久精品vr综合 | 又大又硬又黄的免费视频 | 欧美阿v高清资源不卡在线播放 | 精品人妻av区 | 亚洲人成网站色7799 | 国产成人av免费观看 | 久久国产精品偷任你爽任你 | 亚洲精品久久久久久一区二区 | 日韩av无码一区二区三区 | 欧洲美熟女乱又伦 | 99久久亚洲精品无码毛片 | 熟妇激情内射com | 少妇邻居内射在线 | 日本饥渴人妻欲求不满 | 免费中文字幕日韩欧美 | 黑人巨大精品欧美一区二区 | 在线播放亚洲第一字幕 | 漂亮人妻洗澡被公强 日日躁 | 美女极度色诱视频国产 | 自拍偷自拍亚洲精品被多人伦好爽 | 自拍偷自拍亚洲精品10p | 成熟妇人a片免费看网站 | 国产国产精品人在线视 | 亚洲七七久久桃花影院 | 久久99精品久久久久久动态图 | 国产亚洲精品久久久久久国模美 | 精品人妻人人做人人爽夜夜爽 | 中文字幕无码av波多野吉衣 | 狂野欧美性猛xxxx乱大交 | 97人妻精品一区二区三区 | 国产乱人无码伦av在线a | 国内丰满熟女出轨videos | 国产极品美女高潮无套在线观看 | 牲交欧美兽交欧美 | 偷窥村妇洗澡毛毛多 | 国产国语老龄妇女a片 | 成人性做爰aaa片免费看不忠 | 久久午夜无码鲁丝片午夜精品 | 久久久久久久人妻无码中文字幕爆 | 国产肉丝袜在线观看 | 久久精品国产99久久6动漫 | 国产午夜福利100集发布 | 成在人线av无码免观看麻豆 | 十八禁真人啪啪免费网站 | 国产黄在线观看免费观看不卡 | av无码电影一区二区三区 | 伊人久久大香线蕉亚洲 | 性生交片免费无码看人 | 色狠狠av一区二区三区 | 无遮挡啪啪摇乳动态图 | 亚洲人亚洲人成电影网站色 | 97无码免费人妻超级碰碰夜夜 | 奇米影视7777久久精品 | 无遮挡国产高潮视频免费观看 |