瀏覽器組成

?首先瀏覽器是一個(gè)軟件,就和qq,wechat,沒(méi)什么差別,只是功能不一樣。qq,wechat是社交類(lèi),而瀏覽器就是專(zhuān)門(mén)用來(lái)訪(fǎng)問(wèn)和瀏覽萬(wàn)維網(wǎng)頁(yè)面的客戶(hù)端軟件。

瀏覽器結(jié)構(gòu):

1. User Interface(用戶(hù)界面):

包括工具欄、地址欄、前進(jìn)/后退按鈕、書(shū)簽菜單、可視化頁(yè)面加載進(jìn)度、智能下載處理、首選項(xiàng)、打印等。除了瀏覽器主窗口顯示請(qǐng)求的頁(yè)面之外,其他顯示的部分都屬于用戶(hù)界面。

2. Browser engine(瀏覽器引擎):

瀏覽器引擎是一個(gè)可嵌入的組件,其為渲染引擎提供高級(jí)接口。

瀏覽器引擎可以加載一個(gè)給定的URI,并支持諸如:前進(jìn)/后退/重新加載等瀏覽操作。

瀏覽器引擎提供查看瀏覽會(huì)話(huà)的各個(gè)方面的掛鉤,例如:當(dāng)前頁(yè)面加載進(jìn)度、JavaScript alert。

瀏覽器引擎還允許查詢(xún)/修改渲染引擎設(shè)置。

3.?Rendering Engine(渲染引擎)

渲染引擎為指定的URI生成可視化的表示。

渲染引擎能夠顯示HTML和XML文檔,可選擇CSS樣式,以及嵌入式內(nèi)容(如圖片)。

渲染引擎能夠準(zhǔn)確計(jì)算頁(yè)面布局,可使用“回流”算法逐步調(diào)整頁(yè)面元素的位置。

渲染引擎內(nèi)部包含HTML解析器。

Chrome為每個(gè)Tab分配了各自的渲染引擎實(shí)例,每個(gè)Tab就是一個(gè)獨(dú)立的進(jìn)程。

4. Networking(網(wǎng)絡(luò))

網(wǎng)絡(luò)系統(tǒng)實(shí)現(xiàn)HTTP和FTP等文件傳輸協(xié)議。 網(wǎng)絡(luò)系統(tǒng)可以在不同的字符集之間進(jìn)行轉(zhuǎn)換,為文件解析MIME媒體類(lèi)型。 網(wǎng)絡(luò)系統(tǒng)可以實(shí)現(xiàn)最近檢索資源的緩存功能(前端小伙伴了解下,方便面試)。

5. JavaScript Interpreter(JS解釋器)

JavaScript解釋器能夠解釋并執(zhí)行嵌入在網(wǎng)頁(yè)中的JavaScript(又稱(chēng)ECMAScript)代碼。 為了安全起見(jiàn),瀏覽器引擎或渲染引擎可能會(huì)禁用某些JavaScript功能,如彈出窗口的打開(kāi)。

6. XML Parser(XML解析器)

XML解析器可以將XML文檔解析成文檔對(duì)象模型(Document Object Model,DOM)樹(shù)。 XML解析器是瀏覽器架構(gòu)中復(fù)用最多的子系統(tǒng)之一,幾乎所有的瀏覽器實(shí)現(xiàn)都利用現(xiàn)有的XML解析器,而不是從頭開(kāi)始創(chuàng)建自己的XML解析器

功能相似的HTML解析器和XML解析器為什么前者劃分在渲染引擎中,后者作為獨(dú)立的系統(tǒng)?

XML解析器對(duì)于系統(tǒng)來(lái)說(shuō),其功能并不是關(guān)鍵性的,但是從復(fù)用角度來(lái)說(shuō),XML解析器是一個(gè)通用的,可重用的組件,具有標(biāo)準(zhǔn)的,定義明確的接口。相比之下,HTML解析器通常與渲染引擎緊耦合。

7. UI Backend(顯示后端)

用來(lái)繪制類(lèi)似組合選擇框及對(duì)話(huà)框等基本組件,具有不特定于某個(gè)平臺(tái)的通用接口,底層使用操作系統(tǒng)的用戶(hù)接口。

8.?Data Persistence(數(shù)據(jù)持久層)

數(shù)據(jù)持久層將與瀏覽會(huì)話(huà)相關(guān)聯(lián)的各種數(shù)據(jù)存儲(chǔ)在硬盤(pán)上。 這些數(shù)據(jù)可能是諸如:書(shū)簽、工具欄設(shè)置等這樣的高級(jí)數(shù)據(jù),也可能是諸如:Cookie,安全證書(shū)、緩存等這樣的低級(jí)數(shù)據(jù)(前端小伙伴了解下,面試用來(lái)吹)。

瀏覽器內(nèi)核:

瀏覽器內(nèi)核負(fù)責(zé)取得網(wǎng)頁(yè)的內(nèi)容(HTML、XML、圖像等等)、整理訊息(例如加入 CSS 等),以及計(jì)算網(wǎng)頁(yè)的顯示方式,然后會(huì)輸出至顯示器或打印機(jī)。

瀏覽器的內(nèi)核的不同對(duì)于網(wǎng)頁(yè)的語(yǔ)法解釋會(huì)有不同,所以渲染的效果也不相同。所有網(wǎng)頁(yè)瀏覽器、電子郵件客戶(hù)端以及其它需要編輯、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核。

內(nèi)核分為兩個(gè)部分:渲染引擎和js引擎,由于js引擎越來(lái)越獨(dú)立,內(nèi)核就傾向于只指渲染引擎

1. 渲染引擎

負(fù)責(zé)請(qǐng)求網(wǎng)絡(luò)頁(yè)面資源加以解析排版并呈現(xiàn)給用戶(hù),渲染引擎可以顯示html、xml文檔及圖片,它也可以借助插件顯示其他類(lèi)型數(shù)據(jù),例如使用PDF閱讀器插件,可以顯示PDF格式。

2. js引擎

JS 引擎則是解析 Javascript 語(yǔ)言,執(zhí)行 javascript 語(yǔ)言來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)效果。

3. 當(dāng)前主流內(nèi)核

Trident ([‘tra?d(?)nt]):普遍稱(chēng)作 “IE內(nèi)核”

該內(nèi)核程序在 1997 年的 IE4 中首次被采用,是微軟在 Mosaic(”馬賽克”,這是人類(lèi)歷史上第一個(gè)瀏覽器,從此網(wǎng)頁(yè)可以在圖形界面的窗口瀏覽) 代碼的基礎(chǔ)之上修改而來(lái)的,并沿用到 IE11,也被普遍稱(chēng)作 “IE內(nèi)核”。

IE 從版本 11 開(kāi)始,初步支持 WebGL 技術(shù)。IE8 的 JavaScript 引擎是 Jscript,IE9 開(kāi)始用 Chakra,這兩個(gè)版本區(qū)別很大,Chakra 無(wú)論是速度和標(biāo)準(zhǔn)化方面都很出色。

Window10 發(fā)布后,IE 將其內(nèi)置瀏覽器命名為 Edge,Edge 最顯著的特點(diǎn)就是新內(nèi)核 EdgeHTML。

Gecko ([‘gek??]):Firefox 內(nèi)核

Gecko 內(nèi)核的瀏覽器Firefox (火狐) 用戶(hù)最多,所以有時(shí)也會(huì)被稱(chēng)為 Firefox 內(nèi)核,此外 Gecko 也是一個(gè)跨平臺(tái)內(nèi)核,可以在Windows、 BSD、Linux 和 Mac OS X 中使用。

Webkit:

ebkit內(nèi)核 可以說(shuō)是以硬件盈利為主的蘋(píng)果公司給軟件行業(yè)的最大貢獻(xiàn)之一。隨后,2008 年谷歌公司發(fā)布 chrome 瀏覽器,采用的 chromium 內(nèi)核便 fork 了 Webkit。

Chromium/Blink:

2008 年,谷歌公司發(fā)布了 chrome 瀏覽器,瀏覽器使用的內(nèi)核被命名為 chromium。

chromium fork 自開(kāi)源引擎 webkit,卻把 WebKit 的代碼梳理得可讀性提高很多,所以以前可能需要一天進(jìn)行編譯的代碼,現(xiàn)在只要兩個(gè)小時(shí)就能搞定。因此 Chromium 引擎和其它基于 WebKit 的引擎所渲染頁(yè)面的效果也是有出入的。所以有些地方會(huì)把 chromium 引擎和 webkit 區(qū)分開(kāi)來(lái)單獨(dú)介紹,而有的文章把 chromium 歸入 webkit 引擎中,都是有一定道理的。

谷歌公司還研發(fā)了自己的 Javascript 引擎,V8,極大地提高了 Javascript 的運(yùn)算速度。

Blink 引擎問(wèn)世后,國(guó)產(chǎn)各種 chrome 系的瀏覽器也紛紛投入 Blink 的懷抱。

Presto ([‘prest??]):opera 的 “前任” 內(nèi)核

為何說(shuō)是 “前任”,因?yàn)樽钚碌?opera 瀏覽器早已將之拋棄從而投入到了谷歌大本營(yíng)。

注釋?zhuān)篧ebkit 其實(shí)是 KHTML 的分支,這里的 KHTML 指渲染引擎,Webkit 其實(shí)就泛指了 Webkit 的渲染引擎 WebCore,而 Webkit 引擎的 Javascript 引擎 JSCore 則是 KJS 的分支。而 chrome 則搭載了自己的 Javascript 引擎 V8。引用?各主流瀏覽器內(nèi)核介紹?里的一段話(huà):我們上面提到 Chrome 是基于 WebKit 的分支,而 WebKit 又由渲染引擎 “WebCore” 和 JS 解釋引擎 “JSCore” 組成,可能會(huì)讓你搞不清 V8 和 JSCore 的關(guān)系。你可以這樣理解—— WebKit 是一塊主板,JSCore 是一塊可拆卸的內(nèi)存條,谷歌實(shí)際上認(rèn)為 Webkit 中的 JSCore 不夠好,才自己搞了一個(gè) V8 JS 引擎,這就是 Chrome 比 Safari 在某些 JS 測(cè)試中效率更高的原因。

參考文獻(xiàn):

1. 主流瀏覽器內(nèi)核介紹(前端開(kāi)發(fā)值得了解的瀏覽器內(nèi)核歷史)

2.?主流瀏覽器內(nèi)核介紹

3. 深入理解瀏覽器工作原理

4.?萬(wàn)維網(wǎng)百科

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 內(nèi)核 首先得搞懂瀏覽器內(nèi)核究竟指的是什么。 瀏覽器內(nèi)核又可以分成兩部分:渲染引擎(layout engineer ...
    一直以來(lái)都很好閱讀 888評(píng)論 0 1
  • 內(nèi)核 首先得搞懂瀏覽器內(nèi)核究竟指的是什么。瀏覽器內(nèi)核又可以分成兩部分:渲染引擎(layout engineer 或...
    李仁平閱讀 748評(píng)論 0 2
  • 瀏覽器內(nèi)核(browser kernel)是瀏覽器最為核心的部分,國(guó)內(nèi)的瀏覽器(諸如360,QQ,搜狗)大多數(shù)用了...
    沉落的星星閱讀 3,815評(píng)論 1 8
  • 內(nèi)核 首先得搞懂瀏覽器內(nèi)核指的是什么 瀏覽器內(nèi)核又可以分成兩部分:渲染引擎(layout engineer或者Re...
    聞金聽(tīng)鳳閱讀 1,012評(píng)論 0 0
  • 第一次參加水上的訓(xùn)練項(xiàng)目,進(jìn)水的時(shí)候覺(jué)著自己就要漂浮起來(lái),出水的時(shí)候又覺(jué)得又千斤重,奇妙的感覺(jué)。像是五行缺水啊,水...
    星星de海子閱讀 118評(píng)論 0 0

友情鏈接更多精彩內(nèi)容