瀏覽器是不是相當於 HTML、CSS 等語言的一個解釋器?


瀉藥

應該說瀏覽器涵蓋了HTML,CSS等這些語言的解釋器

它們僅僅是瀏覽器諸多組成中的一小部分

這些解釋器是為布局提供數據

執行腳本 等操作準備的

其上還有布局引擎

腳本綁定、繪製器等內容

這些合起來是瀏覽器核心模塊

而瀏覽器除核心模塊外

還有許多周邊內容

比如包裹核心 模塊的 RenderView

配合 RenderView 執行 的 RanderProcess

作為 RanderProcess 映射的 RanderProcessHost

為 RanderProcessHost 提供數據的 IO Thread

IO Thread 還包含 File IO、DB IO、HTTP 等等

為了相互通信的 IPC

為了遠程通信的 WS

為了調試的 Devtools

為了記錄用戶數據的 userProfile

為了繪製用戶操作頁面的 WTF(系統相關)

等等

全部都加起來才能叫做瀏覽器


不請自來,曾經讀過《webkit技術內幕》,下面是在團隊內部做分享時留下的幾張圖片(都來自於《webkit技術內幕》)。現在貼出來供大家參考,應該可以更好的了解瀏覽器的相關知識。

1.基於Blink的Chromium(Chromium相當於Chrome的工程版或稱實驗版,新功能會率先在Chromium上實現,待驗證後才會應用在Chrome上)瀏覽器結構

Content 模塊、ContentAPI:對瀏覽器渲染網頁功能的抽象。將渲染機制和插件機制等隱藏起來,提供一個介面層。Content Shell是簡單的「瀏覽器」,僅保留一些核心功能,主要用來測試content模塊很多功能的正確性及供其他外部項目基於Content API做開發做參考。Android WebView:用Chromium的實現替換原來的WebView。2.渲染引擎:能夠將HTML/CSS/JS文本及相應的資源文件轉換成圖像結果。如Triend(IE)、Gecko(FF)、WebKit(Safari,Chrome,Andriod瀏覽器)等。下面是Webkit架構

3.渲染流程及各階段的模塊依賴:


瀏覽器有三塊,html和css的編譯器,js的編譯器,還有內置的伺服器。


瀏覽器,我們可以認為它的功能是將伺服器端的內容呈現到我們的客戶端。其主要的功能有:為用戶代理髮送http請求,根據返回的內容生成DOM樹、呈現樹,並將其繪製出來,然後進入事件循環等待用戶輸入。

發送接收http報文是瀏覽器的網路介面模塊,可以實現資源請求和傳輸,而資源的傳輸過程在前端開發中是尤為重要的。其制約因素多為http協議、tcp協議等協議層面,所以http2.0的到來會為前端開發帶來極大的性能提升。

瀏覽器中一個非常重要的功能模塊就是渲染引擎,我們常提的內核一般就可以認為是這個。渲染引擎中比較重要的就是幾個步驟就是:將html渲染成dom樹(js介面,通過js過去的dom就是它)、解析css文件、為相應的dom節點應用css樣式生成呈現樹、為呈現樹應用布局(計算呈現樹節點的大小以及擺放位置)、將呈現樹繪製到頁面上。其中每一部分的內容都很深入,比如解析出的css樣式如何保存等都是很難的問題,其中各個步驟的具體實現對於不同的瀏覽器來說有所不同,但是差不多都是這些步驟。

上面的是內容與樣式,再稍微說說行為,既js。js解析器也是瀏覽器的一個重要模塊,比如我們常說的chrome的v8就是js解析器。

所以,瀏覽器可以大致等於:渲染引擎(html解析器、css解析器、樣式計算、布局、繪製)+js解析器+其他(瀏覽器UI及功能、持久層等)。

鏈接送上(chrome開發參與人員,大牛寫的,很全面):http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/#The_browsers_we_will_talk_about

答主目前正在苦逼找工作期間,有些地方可能說的不夠精確,還請多多指教。另外,歡迎光臨我的個人網站:暗流[http://peytonzhao88.cn]


瀏覽器的主要功能

瀏覽器的主要功能就是向伺服器發出請求,在瀏覽器窗口中展示您選擇的網路資源。這裡所說的資源一般是指 HTML 文檔,也可以是 PDF、圖片或其他的類型。資源的位置由用戶使用 URI(統一資源標示符)指定。

瀏覽器解釋並顯示 HTML 文件的方式是在 HTML 和 CSS 規範中指定的。這些規範由網路標準化組織 W3C(萬維網聯盟)進行維護。

瀏覽器的結構

  1. 用戶界面 - 包括地址欄、前進/後退按鈕、書籤菜單等。除了瀏覽器主窗口顯示的您請求的頁面外,其他顯示的各個部分都屬於用戶界面。
  2. 瀏覽器引擎 - 在用戶界面和呈現引擎之間傳送指令。
  3. 呈現引擎 - 負責顯示請求的內容。如果請求的內容是 HTML,它就負責解析 HTML 和 CSS 內容,並將解析後的內容顯示在屏幕上。
  4. 網路 - 用於網路調用,比如 HTTP 請求。其介面與平台無關,並為所有平台提供底層實現。
  5. 用戶界面後端 - 用於繪製基本的窗口小部件,比如組合框和窗口。其公開了與平台無關的通用介面,而在底層使用操作系統的用戶界面方法。
  6. JavaScript 解釋器。用於解析和執行 JavaScript 代碼。
  7. 數據存儲。這是持久層。瀏覽器需要在硬碟上保存各種數據,例如 Cookie。新的 HTML 規範 (HTML5) 定義了「網路資料庫」,這是一個完整(但是輕便)的瀏覽器內資料庫。


CSS解釋過程,是從 CSS 字元串經過 CSS 解釋器(CSSParser、CSSGrammer)處理後,變成渲染引擎的內部樣式規則表示的過程。樣式規則是解釋器的輸出結構,是樣式匹配的輸入數據。
具體過程:WebKit 在渲染元素時,CSS 解釋器獲取樣式信息,返回匹配好的結果樣式信息。每個元素可能需要匹配不同來源的規則,依次是用戶代理(瀏覽器)規則集合、用戶規則集合和HTML頁面中包含的自定義規則集合。三者匹配方式類似。
對於每個規則集合,先查找 ID 規則,檢查有無匹配的規則,然後依次檢查類型規則、標籤規則等。匹配好的規則,保存到匹配結果中。WebKit 對這些規則進行排序。對於元素需要的樣式屬性,WebKit 選擇從高優先順序規則中選取,並將樣式屬性值返回。http://sep9.cn/h4k5we


瀏覽器是一個操作系統。有許可權還可以簡單操作你的電腦。


HTML parser、CSS render、JavaScript engine


比解釋更重要的是渲染


推薦閱讀:

把瀏覽器的 rendering engine 翻譯成「渲染引擎」是正確的嗎?
"去你大爺的內置瀏覽器"是幹什麼的?
為什麼國外網站通常從原網頁跳轉,而中國的網站更傾向於打開一個新網頁?

TAG:HTML | 網頁瀏覽器 | 計算機 |