當咱們在新時代調侃 IE 瀏覽器兼容性問題的時候,或多或少忘記了 IE 瀏覽器是第一款支持 CSS 的商用瀏覽器;當咱們驚歎於 Chrome 將 Webkit 內核發揮的如此極致的時候,又或多或少忘記了 Safari 纔是 Webkit 內核的始做俑者。千姿百態的瀏覽器中,有的很早就被淘汰了,有的直到如今還被普遍使用在各種主流操做系統之上。有趣的是,縱觀瀏覽器的發展史,其內核的派生、競爭與互相借鑑共同演繹出了盤根錯節的「家族圖譜」。前端
本文經過回顧兩次瀏覽器大戰,並對各大主流瀏覽器的發展做出簡介,展開一場瀏覽器內核的初探之旅,揭開神祕的面紗。git
儘管在各式各樣的瀏覽器中有的僅提供純文字接口來實現 HTML 頁面,但絕大多數現代瀏覽器都或多或少擁有有以下特色:github
所以,咱們能夠將可以提供上述多個功能的應用程序稱之爲瀏覽器。web
2003 年,蘋果公司開發的 Safari 瀏覽器代替微軟公司的 IE 瀏覽器,成爲了 Mac OS X v10.3 以後版本的默認瀏覽器。同時 Safari 在不久以後帶來的大名鼎鼎的 Webkit 內核,這一系列動做都印證着曾大一統主流瀏覽器江山的 IE 瀏覽器份額逐漸受到其餘瀏覽器蠶食,由此劃分開了第一輪瀏覽器大戰和第二輪瀏覽器大戰的時代背景。chrome
第一輪瀏覽器大戰主要圍繞在二十世紀末期——人們開始注意到萬維網,而當時的市場及網頁瀏覽標準均以 Netscape (網景公司)主導。這一主導性來源於其推出的 Netscape Navigator 瀏覽器改進了「史前」瀏覽器 Mosaic 的實用性及穩定性,同時在網絡上提供免費試用版倆個要點。這時,以用戶界面友好立足市場的微軟公司也經過爭取到 Mosaic 的受權開發出了 IE 瀏覽器。倆者爲爭取更多的用戶來開了商業戰爭序幕。瀏覽器
縱然 IE 瀏覽器步入市場較晚,IE 瀏覽器從技術層面經過最早支持 CSS、新增網頁動態加載及圖片位置改變等優點,逐步提升了市場佔有率。與之俱來的對開發者開發同時運行在倆個瀏覽器上的網頁難度逐步上升。安全
所以,一場要求網頁不管使用 IE 或 Netscape 均能正常瀏覽的 「可用任何瀏覽器瀏覽」(Viewable With Any Browser)運動悄然崛起。微信
在這輪大戰中,IE 瀏覽器的開發商微軟公司同時使用了諸多商業手段來與公司的規模相對較小的 Netscape 瀏覽器爭搶用戶。網絡
Netscape 瀏覽器從最高峯達到市場 90% 的佔有率降低到遠遠不夠 IE 瀏覽器市場佔有率的同時,網景公司最終落敗,被美國在線公司以 42 億美圓收購。ide
當 IE 瀏覽器成功寡佔瀏覽器市場時,諸多問題逐漸暴露了出來:
Netscape 瀏覽器在其公司衰落之時開放了瀏覽器源代碼,與此同時 IE 瀏覽器的安全性問題持續引起關注,通過長時間的醞釀誕生出了安全性較高的 Firefox 瀏覽器與 IE 瀏覽器展開了競爭。
通過從多種市場佔有率的競爭與發展來看,新出的瀏覽器逐步與 IE 瀏覽器平分市場,最終於 2012 年的報告中顯示,Chrome 瀏覽器的市場佔有率已上升至 33%,超過 IE 瀏覽器併成爲全球第一大瀏覽器。
瀏覽器的內核一般僅指排版引擎。這裏在介紹完瀏覽器中的排版引擎後加入解析 JavaScript 的引擎做出簡要說明。
在沒有計算機的年代,人們經過對藝術的直觀把握來進行報紙、期刊的統一排版。如今咱們只需輸入規則的代碼指令,讓瀏覽器的排版引擎來幫咱們作自動化地作這些事情,並輸出至顯示器或打印機。
一樣的代碼指令在不一樣的排版引擎(即內核)上的執行效果不盡相同,這裏提幾個著名的內核,來展示它們的特色及其相互之間的發展關係。
Trident 內核運行在 IE 上,又稱 IE 內核,是 IE 的排版引擎的名稱。Trident 曾因其市場佔有量龐大而不思進取,一度與 W3C 標準脫節(05 年),給了運行在 Safari、Chrome、Firefox 和 Opera 等瀏覽器 上的內核提供了很大的發展空間。隨着微軟逐步放棄 IE 瀏覽器品牌,Trident 內核版本也再也不更新。
EdgeHTML 內核開啓了 Trident 內核的分支,成爲了替代 IE 瀏覽器的 Microsoft Edge 瀏覽器的主要排版引擎。EdgeHTML 移除全部舊版 IE 瀏覽器遺留下來的代碼,並經過尊重網頁標準、重寫主要的代碼以和其餘現代瀏覽器的設計精神互通有無。
KHTML 是由 KDE 自由軟件社區所開發的 HTML 排版引擎,由 C++ 語言編寫。這裏提到 KHTML 是由於其是早起 Safari 的內核最終選型。Safari 開發團隊因對 KHTML 做出大量的改動,逐步從 KHTML 中脫離出來,KHTML 逐漸淡出主流瀏覽器中。
Webkit 的前身是 KHTML 引擎,屬於其一個開源分支,是 Safari 及早期 Chromium 、Amazon Kindle 等瀏覽器的默認內核。一般所說的 Webkit 不只僅是排版引擎,其包括用來渲染 HTML 和 CSS 的 Webcore 引擎和用來解析 JS 的 JSCore。JSCore 將在後文有關 JS 引擎中敘述。Webcore 便用來處理排版。
Chrome 瀏覽器的內核來源於 Webkit 的 Webcore,最終用谷歌公司自主開發的開源排版引擎 Blink 所代替;同時 Chrome 瀏覽器對於 JavaScript 代碼的解析也使用了本身的 V8 引擎。
Blink 一樣來自於 Webkit,聽說 Blink 刪除了 880w 行 webkit 代碼。Blink 引擎問世後,國產各類 chrome 系的瀏覽器也紛紛投入 Blink 的懷抱,能夠在瀏覽器地址欄輸入 chrome://version 進行查看。
Gecko 是 Netscape6 和 Firefox 的內核。Gecko 代碼公開,使用該內核瀏覽器不少。其誕生來源於 IE 的不思進取。微軟內部人員不滿,與一中止更新 Netscape 的員工一塊兒在創辦 了 Mozila
後開發,常被稱爲 Firefox 內核,跨平臺使用。
Opera 瀏覽器早期使用的內核,Opera 在 Blink 引擎推出以後轉用 Blink,其中緣由包括毫無推廣上的優點(主要緣由)和使用 Webkit 內核的 Opera 能夠兼容谷歌 Chrome 瀏覽器等。但換內核代價慘痛,從快速輕量化與穩定到異常卡頓與不穩定,書籤同步都困難,不少用戶流失。Presto 內核最終停留在了 12.17。
這裏便不一一列舉各個不一樣的內核了,下圖能夠看到內核存在時間的對比,從而方便看出哪些內核還在使用中。
瀏覽器上不只僅能夠解析 HTML 和 CSS,也能夠解析腳本語言 JavaScript ,然後者便須要 JS 引擎做支持。常見的
JS 引擎有 JScript 引擎、Chakra 引擎、V8 引擎、KJS 引擎等,這裏做出小談。
與早期 KHTML 排版引擎相配的,還有用來解析 JavaScript 的 KJS 引擎。KJS 一樣由 KDE 社區開發。其後由於 Webkit 做爲分支的誕生,逐步被能夠直接將 JS 代碼編譯爲原生機器碼的 JavaScriptCore 引擎替代。JavaScriptCore 成爲了 Webkit 中的一個重要組件。
Chakra 是由微軟爲 IE9+ 版本開發的 JavaScript 引擎,在一個獨立的CPU核心上即時編譯腳本,與瀏覽器並行。在 2009 年 11 月 18 日舉行的 SunSpider 測試展現了 IE9 的 PDC 版本對腳本的執行遠快於 IE8,可是仍然慢於 Firefox 3.五、Google Chrome 4 和 Safari 4。
V8 由 Google 公司開發,是開源的 JavaScript 引擎。V8 在運行以前將 JavaScript 編譯成了機器碼,而非字節碼或是解釋執行它,以此提高性能。基於 V8 引擎對 JavaScript 的高性能解析,Node.js 也選擇了 V8 引擎做爲其在服務端解析 JavaScript 的首選引擎,促進了前端的蓬勃發展。
經過前半部分,咱們談到了瀏覽器的特色,並經過兩次瀏覽器大戰交代了主流瀏覽器的發展史;經過後半部分,咱們看到千姿百態的瀏覽器內核原來有足夠多的共性——每個新的內核並非憑空而出的,都從上一個能夠替代的內核中吸取了足夠多的經驗。
這時,若是有人讓你談談對瀏覽器內核的理解,你就能夠說將其拆分紅排版引擎和 JS 引擎來分別說說它們的特色了。但本文只是起點,有關一些瀏覽器爲何宣稱本身是雙內核,有關瀏覽器組成,有關瀏覽器進程調度,有關內核渲染機制等問題都尚未涉及,能夠留在問尾以做延伸思考。
- Hello,我是韓亦樂,現任本科軟工男一枚。軟件工程專業的一路學習中,我有不少感悟,也享受持續分享的過程。若是想了解更多或能及時收到個人最新文章,歡迎訂閱個人我的微信號:韓亦樂。個人簡書我的主頁中,有個人訂閱號二維碼和 Github 主頁地址;[個人知乎主頁]中也會堅持產出,歡迎關注。
- 本文內部編號經由個人 Github 相關倉庫統一管理;本文可能發佈在多個平臺但僅在上述倉庫中長期維護;本文同時採用【知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議】進行許可。