瀏覽器工做原理

1、瀏覽器種類

  • IE (internet Explorer)瀏覽器
  • Firefox 火狐瀏覽器
  • Chrome 谷歌瀏覽器
  • Safari 瀏覽器
  • Opera 瀏覽器

談談幾種瀏覽器的內核web

  • 內核只是一個通俗的說法,其英文名稱爲「Layout engine」,翻譯過來就是「排版引擎」,也被稱爲「頁面渲染引擎」
  • 它負責取得網頁的內容(HTML、XML、圖像等等)、整理信息(例如加入CSS等),以及計算網頁的顯示方式,而後會輸出至顯示器或打印機
  • 全部網頁瀏覽器、電子郵件客戶端以及其它須要編輯、顯示網絡內容的應用程序都須要排版引擎。
  • 內核種類
    • Trident
      • 這是微軟開發的一種排版引擎。
      • 有時候,爲了方便也有不少人直接簡稱其爲IE內核
      • IE、Maxthon、TT、The World
    • Geckos
      • Gecko是套開放源代碼的、以C++編寫的網頁排版引擎。
      • FireFox
    • Presto
      • Presto是一個由Opera Software開發的瀏覽器排版引擎
      • Opera
    • Webkit
      • 蘋果公司本身的內核,也是蘋果的Safari瀏覽器使用的內核
      • Webkit引擎包含WebCore排版引擎及JavaScriptCore解析引擎
      • Safari、Chrome

2、瀏覽器功能

  • 瀏覽器功能:
    • 一、向服務器發出請求
    • 二、在瀏覽器窗口中展現您選擇的網絡資源
    • 這裏所說的資源通常是指HTML文檔,PDF、圖片、其餘的類型
    • 資源的位置:由用戶使用 URI(統一資源標示符)指定。
  • 瀏覽器解釋顯示規範:
    • 瀏覽器解釋並顯示 HTML 文件的方式是在 HTML 和 CSS 規範中指定的。
    • 這些規範由網絡標準化組織 W3C(萬維網聯盟)進行維護。
    • 萬惡之源:雖然制定了相應的規範,可是各瀏覽器都沒有徹底聽從這些規範,同時還在開發本身獨有的擴展程序,這給網絡開發人員帶來了嚴重的兼容性問題。
  • 瀏覽器的界面用戶元素
    • 用來輸入 URI 的地址欄
    • 前進和後退按鈕
    • 書籤設置選項
    • 用於刷新和中止加載當前文檔的刷新和中止按鈕
    • 用於返回主頁的主頁按鈕
  • 瀏覽器的用戶界面並無任何正式的規範,這是多年來的最佳實踐天然發展以及彼此之間相互模仿的結果。

3、瀏覽器構成

  • 瀏覽器主要組件 正則表達式

    • 一、用戶界面-包括地址欄、前進/後退按鈕、書籤菜單等。除了瀏覽器主窗口顯示的您請求的頁面外,其餘顯示的各個部分都屬於用戶界面。
    • 二、瀏覽器引擎 - 在用戶界面和呈現引擎之間傳送指令
    • 三、呈現引擎 - 負責顯示請求的內容。
      • 若是請求的內容是HTML,它就負責解析 HTML 和 CSS 內容,並將解析後的內容顯示在屏幕上。
      • 默認狀況下,呈現引擎可顯示 HTML 和 XML 文檔與圖片。經過插件(或瀏覽器擴展程序),還能夠顯示其餘類型的內容;例如,使用 PDF 查看器插件就能顯示 PDF 文檔。
      • 兩種經常使用的呈現引擎:gecko webkit
      • gecko 火狐Firefox 這是 Mozilla 公司「自制」的呈現引擎。
      • WebKit 是一種開放源代碼呈現引擎,起初用於 Linux 平臺,隨後由 Apple 公司進行修改,從而支持蘋果機和 Windows。
      • 呈現引擎的基本流程
      • 這是一個漸進的過程。爲達到更好的用戶體驗,呈現引擎會力求儘快將內容顯示在屏幕上。它沒必要等到整個HTML文檔解析完畢以後,就會開始構建呈現樹和設置佈局。在不斷接收和處理來自網絡的其他內容的同時,呈現引擎會將部份內容解析並顯示出來
        • 解析 HTML 文檔,並將各標記逐個轉化成「內容樹」上的 DOM 節點
        • 呈現- 解析外部 CSS 文件以及樣式元素中的樣式數據、HTML 中這些帶有視覺指令的樣式信息將用於建立另外一個樹結構:呈現樹 。呈現樹包含多個帶有視覺屬性(如顏色和尺寸)的矩形。這些矩形的排列順序就是它們將在屏幕上顯示的順序。
        • 佈局-也就是爲每一個節點分配一個應出如今屏幕上的確切座標。
        • 繪製-呈現引擎會遍歷呈現樹,由用戶界面後端層將每一個節點繪製出來。在繪製階段,系統會遍歷呈現樹,並調用呈現器的「paint」方法,將呈現器的內容顯示在屏幕上。繪製工做是使用用戶界面基礎組件完成的。

    webkit 主流程數據庫

    • 呈現樹 它由「呈現對象」組成
    • 佈局 元素的放置
    • 附加 鏈接 DOM 節點和可視化信息從而建立呈現樹的過程

    Gecko 主流程後端

    • 框架樹 Gecko將視覺格式化元素組成的樹稱爲「框架樹」。每一個元素都是一個框架
    • 重排 元素的放置
    • Gecko 在 HTML 與 DOM 樹之間還有一個稱爲「內容槽」的層,用於生成 DOM 元素。

* 四、 網絡 - 用於網絡調用,好比HTTP請求。其接口與平臺無關,併爲全部平臺提供底層實現。 * 五、 用戶界面後端-用於繪製基本的窗口小部件,好比組合框和窗口。其公開了與平臺無關的通用接口,而在底層使用操做系統的用戶界面方法。 * 六、 JavaScript解釋器。用於解析和執行 JavaScript 代碼。 * 七、 數據存儲-這是持久層。瀏覽器須要在硬盤上保存各類數據,例如 Cookie。新的 HTML規範(HTML5)定義了「網絡數據庫」,這是一個完整(可是輕便)的瀏覽器內數據庫。

  • 和大多數瀏覽器不一樣,Chrome瀏覽器的每一個標籤頁都分別對應一個呈現引擎實例。每一個標籤頁都是一個獨立的進程

4、呈現引擎的主流程步驟

解析瀏覽器

  • 解析文檔是指將文檔轉化成爲有意義的結構,也就是可以讓代碼理解和使用的結構。
  • 解析是一個迭代的過程。
  • 解析獲得的結果一般是表明了文檔結構的節點樹,它稱做解析樹或者語法樹

  • 能夠解析的格式都必須對應肯定的語法——這些語法由詞彙和語法規則構成。人類語言並不屬於這樣的語言,所以沒法用常規的解析技術進行解析。
  • 解析過程分爲:詞法分析語法分析
    • 詞法分析:將輸入內容分割成大量標記的過程。
      • 標記是語言中的詞彙,即構成內容的單位。
      • 標記在人類語言中,它至關於語言字典中的單詞。
    • 語法分析:是應用 語言的語法規則 的過程
  • 解析器一般將解析工做分給如下兩個組件來處理:
    • 詞法分析器(有時也稱爲標記生成器),負責將輸入內容分解成一個個有效標記;詞法分析器知道如何將無關的字符(好比空格和換行符)分離出來
    • 解析器負責根據語言的語法規則分析文檔的結構,從而構建解析樹。
    • 解析器類型:
      • 自上而下解析器 :從語法的高層結構出發,嘗試從中找到匹配的結構
      • 自下而上解析器 :從低層規則出發,將輸入內容逐步轉化爲語法規則,直至知足高層規則。
  • 原文檔=>詞法分析=>語法分析=>解析樹

編譯服務器

  • 源代碼=>(解析)=>解析樹=>(翻譯)=>機器代碼

解析器生成器網絡

  • WebKit 使用了兩種很是有名的解析器生成器:
    • Flex: 用於建立詞法分析器。Flex 的輸入是包含標記的正則表達式定義的文件
    • Bison: 用於建立解析。Bison 的輸入是採用 BNF 格式的語言語法規則。
相關文章
相關標籤/搜索