?首先瀏覽器是一個軟件,就和qq诅福,wechat匾委,沒什么差別,只是功能不一樣氓润。qq赂乐,wechat是社交類,而瀏覽器就是專門用來訪問和瀏覽萬維網(wǎng)頁面的客戶端軟件咖气。
瀏覽器結(jié)構(gòu):
1. User Interface(用戶界面):
包括工具欄挨措、地址欄、前進/后退按鈕崩溪、書簽菜單运嗜、可視化頁面加載進度、智能下載處理悯舟、首選項担租、打印等。除了瀏覽器主窗口顯示請求的頁面之外抵怎,其他顯示的部分都屬于用戶界面奋救。
2. Browser engine(瀏覽器引擎):
瀏覽器引擎是一個可嵌入的組件,其為渲染引擎提供高級接口反惕。
瀏覽器引擎可以加載一個給定的URI尝艘,并支持諸如:前進/后退/重新加載等瀏覽操作。
瀏覽器引擎提供查看瀏覽會話的各個方面的掛鉤姿染,例如:當前頁面加載進度背亥、JavaScript alert。
瀏覽器引擎還允許查詢/修改渲染引擎設(shè)置悬赏。
3.?Rendering Engine(渲染引擎):
渲染引擎為指定的URI生成可視化的表示狡汉。
渲染引擎能夠顯示HTML和XML文檔,可選擇CSS樣式闽颇,以及嵌入式內(nèi)容(如圖片)盾戴。
渲染引擎能夠準確計算頁面布局,可使用“回流”算法逐步調(diào)整頁面元素的位置兵多。
渲染引擎內(nèi)部包含HTML解析器尖啡。
Chrome為每個Tab分配了各自的渲染引擎實例橄仆,每個Tab就是一個獨立的進程。
4. Networking(網(wǎng)絡(luò))
網(wǎng)絡(luò)系統(tǒng)實現(xiàn)HTTP和FTP等文件傳輸協(xié)議衅斩。 網(wǎng)絡(luò)系統(tǒng)可以在不同的字符集之間進行轉(zhuǎn)換盆顾,為文件解析MIME媒體類型。 網(wǎng)絡(luò)系統(tǒng)可以實現(xiàn)最近檢索資源的緩存功能(前端小伙伴了解下畏梆,方便面試)椎扬。
5. JavaScript Interpreter(JS解釋器)
JavaScript解釋器能夠解釋并執(zhí)行嵌入在網(wǎng)頁中的JavaScript(又稱ECMAScript)代碼。 為了安全起見具温,瀏覽器引擎或渲染引擎可能會禁用某些JavaScript功能蚕涤,如彈出窗口的打開。
6. XML Parser(XML解析器)
XML解析器可以將XML文檔解析成文檔對象模型(Document Object Model铣猩,DOM)樹揖铜。 XML解析器是瀏覽器架構(gòu)中復(fù)用最多的子系統(tǒng)之一,幾乎所有的瀏覽器實現(xiàn)都利用現(xiàn)有的XML解析器达皿,而不是從頭開始創(chuàng)建自己的XML解析器
功能相似的HTML解析器和XML解析器為什么前者劃分在渲染引擎中天吓,后者作為獨立的系統(tǒng)?
XML解析器對于系統(tǒng)來說峦椰,其功能并不是關(guān)鍵性的龄寞,但是從復(fù)用角度來說,XML解析器是一個通用的汤功,可重用的組件物邑,具有標準的,定義明確的接口滔金。相比之下色解,HTML解析器通常與渲染引擎緊耦合。
7. UI Backend(顯示后端)
用來繪制類似組合選擇框及對話框等基本組件餐茵,具有不特定于某個平臺的通用接口科阎,底層使用操作系統(tǒng)的用戶接口。
8.?Data Persistence(數(shù)據(jù)持久層)
數(shù)據(jù)持久層將與瀏覽會話相關(guān)聯(lián)的各種數(shù)據(jù)存儲在硬盤上忿族。 這些數(shù)據(jù)可能是諸如:書簽锣笨、工具欄設(shè)置等這樣的高級數(shù)據(jù),也可能是諸如:Cookie道批,安全證書错英、緩存等這樣的低級數(shù)據(jù)(前端小伙伴了解下,面試用來吹)屹徘。
瀏覽器內(nèi)核:
瀏覽器內(nèi)核負責(zé)取得網(wǎng)頁的內(nèi)容(HTML走趋、XML、圖像等等)噪伊、整理訊息(例如加入 CSS 等)簿煌,以及計算網(wǎng)頁的顯示方式,然后會輸出至顯示器或打印機鉴吹。
瀏覽器的內(nèi)核的不同對于網(wǎng)頁的語法解釋會有不同姨伟,所以渲染的效果也不相同。所有網(wǎng)頁瀏覽器豆励、電子郵件客戶端以及其它需要編輯夺荒、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核。
內(nèi)核分為兩個部分:渲染引擎和js引擎良蒸,由于js引擎越來越獨立技扼,內(nèi)核就傾向于只指渲染引擎
1. 渲染引擎
負責(zé)請求網(wǎng)絡(luò)頁面資源加以解析排版并呈現(xiàn)給用戶,渲染引擎可以顯示html嫩痰、xml文檔及圖片剿吻,它也可以借助插件顯示其他類型數(shù)據(jù),例如使用PDF閱讀器插件串纺,可以顯示PDF格式丽旅。
2. js引擎
JS 引擎則是解析 Javascript 語言,執(zhí)行 javascript 語言來實現(xiàn)網(wǎng)頁的動態(tài)效果纺棺。
3. 當前主流內(nèi)核
Trident ([‘tra?d(?)nt]):普遍稱作 “IE內(nèi)核”
該內(nèi)核程序在 1997 年的 IE4 中首次被采用榄笙,是微軟在 Mosaic(”馬賽克”,這是人類歷史上第一個瀏覽器祷蝌,從此網(wǎng)頁可以在圖形界面的窗口瀏覽) 代碼的基礎(chǔ)之上修改而來的茅撞,并沿用到 IE11,也被普遍稱作 “IE內(nèi)核”巨朦。
IE 從版本 11 開始乡翅,初步支持 WebGL 技術(shù)。IE8 的 JavaScript 引擎是 Jscript罪郊,IE9 開始用 Chakra蠕蚜,這兩個版本區(qū)別很大,Chakra 無論是速度和標準化方面都很出色悔橄。
Window10 發(fā)布后靶累,IE 將其內(nèi)置瀏覽器命名為 Edge,Edge 最顯著的特點就是新內(nèi)核 EdgeHTML癣疟。
Gecko ([‘gek??]):Firefox 內(nèi)核
Gecko 內(nèi)核的瀏覽器Firefox (火狐) 用戶最多挣柬,所以有時也會被稱為 Firefox 內(nèi)核,此外 Gecko 也是一個跨平臺內(nèi)核睛挚,可以在Windows邪蛔、 BSD、Linux 和 Mac OS X 中使用扎狱。
Webkit:
ebkit內(nèi)核 可以說是以硬件盈利為主的蘋果公司給軟件行業(yè)的最大貢獻之一侧到。隨后勃教,2008 年谷歌公司發(fā)布 chrome 瀏覽器,采用的 chromium 內(nèi)核便 fork 了 Webkit匠抗。
Chromium/Blink:
2008 年故源,谷歌公司發(fā)布了 chrome 瀏覽器,瀏覽器使用的內(nèi)核被命名為 chromium汞贸。
chromium fork 自開源引擎 webkit绳军,卻把 WebKit 的代碼梳理得可讀性提高很多,所以以前可能需要一天進行編譯的代碼矢腻,現(xiàn)在只要兩個小時就能搞定门驾。因此 Chromium 引擎和其它基于 WebKit 的引擎所渲染頁面的效果也是有出入的。所以有些地方會把 chromium 引擎和 webkit 區(qū)分開來單獨介紹多柑,而有的文章把 chromium 歸入 webkit 引擎中奶是,都是有一定道理的。
谷歌公司還研發(fā)了自己的 Javascript 引擎顷蟆,V8诫隅,極大地提高了 Javascript 的運算速度。
Blink 引擎問世后帐偎,國產(chǎn)各種 chrome 系的瀏覽器也紛紛投入 Blink 的懷抱逐纬。
Presto ([‘prest??]):opera 的 “前任” 內(nèi)核
為何說是 “前任”,因為最新的 opera 瀏覽器早已將之拋棄從而投入到了谷歌大本營削樊。
注釋:Webkit 其實是 KHTML 的分支豁生,這里的 KHTML 指渲染引擎,Webkit 其實就泛指了 Webkit 的渲染引擎 WebCore漫贞,而 Webkit 引擎的 Javascript 引擎 JSCore 則是 KJS 的分支甸箱。而 chrome 則搭載了自己的 Javascript 引擎 V8。引用?各主流瀏覽器內(nèi)核介紹?里的一段話:我們上面提到 Chrome 是基于 WebKit 的分支迅脐,而 WebKit 又由渲染引擎 “WebCore” 和 JS 解釋引擎 “JSCore” 組成芍殖,可能會讓你搞不清 V8 和 JSCore 的關(guān)系。你可以這樣理解—— WebKit 是一塊主板谴蔑,JSCore 是一塊可拆卸的內(nèi)存條豌骏,谷歌實際上認為 Webkit 中的 JSCore 不夠好,才自己搞了一個 V8 JS 引擎隐锭,這就是 Chrome 比 Safari 在某些 JS 測試中效率更高的原因窃躲。
參考文獻:
1. 主流瀏覽器內(nèi)核介紹(前端開發(fā)值得了解的瀏覽器內(nèi)核歷史)
3. 深入理解瀏覽器工作原理
4.?萬維網(wǎng)百科