摘要:有趣的是,縱觀瀏覽器的發(fā)展史,其內(nèi)核的派生競(jìng)爭(zhēng)與互相借鑒共同演繹出了盤根錯(cuò)節(jié)的家族圖譜。本文通過回顧兩次瀏覽器大戰(zhàn),并對(duì)各大主流瀏覽器的發(fā)展作出簡介,展開一場(chǎng)瀏覽器內(nèi)核的初探之旅,揭開神秘的面紗。
當(dāng)我們?cè)谛聲r(shí)代調(diào)侃 IE 瀏覽器兼容性問題的時(shí)候,或多或少忘記了 IE 瀏覽器是第一款支持 CSS 的商用瀏覽器;當(dāng)我們驚嘆于 Chrome 將 Webkit 內(nèi)核發(fā)揮的如此極致的時(shí)候,又或多或少忘記了 Safari 才是 Webkit 內(nèi)核的始作俑者。千姿百態(tài)的瀏覽器中,有的很早就被淘汰了,有的直到現(xiàn)在還被廣泛使用在各類主流操作系統(tǒng)之上。有趣的是,縱觀瀏覽器的發(fā)展史,其內(nèi)核的派生、競(jìng)爭(zhēng)與互相借鑒共同演繹出了盤根錯(cuò)節(jié)的“家族圖譜”。
本文通過回顧兩次瀏覽器大戰(zhàn),并對(duì)各大主流瀏覽器的發(fā)展作出簡介,展開一場(chǎng)瀏覽器內(nèi)核的初探之旅,揭開神秘的面紗。
什么,足以稱之為瀏覽器盡管在各式各樣的瀏覽器中有的僅提供純文字接口來實(shí)現(xiàn) HTML 頁面,但絕大多數(shù)現(xiàn)代瀏覽器都或多或少擁有有如下特點(diǎn):
可用于使用萬維網(wǎng);
提供豐富多彩的用戶界面:其中包括上下頁、刷新、地址欄、書簽、顯示源碼等功能;
支持解析多種網(wǎng)頁標(biāo)準(zhǔn):HTML、HTML5、CSS、SVG、XHTML、WebGL、JavaScript 和 MathML 等;
支持多種文件格式及協(xié)議:可以通過瀏覽器打開特定格式的文件進(jìn)行查詢、編輯等操作,且提供 HTTPS、FTP 等網(wǎng)絡(luò)協(xié)議的支持;
可通過多個(gè)窗口或多個(gè)標(biāo)簽頁同時(shí)打開多種由統(tǒng)一資源標(biāo)識(shí)符標(biāo)志的信息資源:網(wǎng)絡(luò)、圖片、影音等;
可通過開放開發(fā)的瀏覽器插件來拓展瀏覽器功能。
因此,我們可以將能夠提供上述多個(gè)功能的應(yīng)用程序稱之為瀏覽器。
瀏覽器大戰(zhàn)2003 年,蘋果公司開發(fā)的 Safari 瀏覽器代替微軟公司的 IE 瀏覽器,成為了 Mac OS X v10.3 之后版本的默認(rèn)瀏覽器。同時(shí) Safari 在不久之后帶來的大名鼎鼎的 Webkit 內(nèi)核,這一系列動(dòng)作都印證著曾大一統(tǒng)主流瀏覽器江山的 IE 瀏覽器份額逐漸受到其他瀏覽器蠶食,由此劃分開了第一輪瀏覽器大戰(zhàn)和第二輪瀏覽器大戰(zhàn)的時(shí)代背景。
第一輪大戰(zhàn)第一輪瀏覽器大戰(zhàn)主要圍繞在二十世紀(jì)末期——人們開始注意到萬維網(wǎng),而當(dāng)時(shí)的市場(chǎng)及網(wǎng)頁瀏覽標(biāo)準(zhǔn)均以 Netscape (網(wǎng)景公司)主導(dǎo)。這一主導(dǎo)性來源于其推出的 Netscape Navigator 瀏覽器改進(jìn)了“史前”瀏覽器 Mosaic 的實(shí)用性及穩(wěn)定性,同時(shí)在網(wǎng)絡(luò)上提供免費(fèi)試用版?zhèn)z個(gè)要點(diǎn)。這時(shí),以用戶界面友好立足市場(chǎng)的微軟公司也通過爭(zhēng)取到 Mosaic 的授權(quán)開發(fā)出了 IE 瀏覽器。倆者為爭(zhēng)取更多的用戶來開了商業(yè)戰(zhàn)爭(zhēng)序幕。
縱然 IE 瀏覽器步入市場(chǎng)較晚,IE 瀏覽器從技術(shù)層面通過最先支持 CSS、新增網(wǎng)頁動(dòng)態(tài)加載及圖片位置改變等優(yōu)勢(shì),逐步提高了市場(chǎng)占有率。與之俱來的對(duì)開發(fā)者開發(fā)同時(shí)運(yùn)行在倆個(gè)瀏覽器上的網(wǎng)頁難度逐步上升。
因此,一場(chǎng)要求網(wǎng)頁無論使用 IE 或 Netscape 均能正常瀏覽的 “可用任何瀏覽器瀏覽”(Viewable With Any Browser)運(yùn)動(dòng)悄然崛起。
在這輪大戰(zhàn)中,IE 瀏覽器的開發(fā)商微軟公司同時(shí)使用了諸多商業(yè)手段來與公司的規(guī)模相對(duì)較小的 Netscape 瀏覽器爭(zhēng)搶用戶。
Netscape 瀏覽器從最高峰達(dá)到市場(chǎng) 90% 的占有率下降到遠(yuǎn)遠(yuǎn)不夠 IE 瀏覽器市場(chǎng)占有率的同時(shí),網(wǎng)景公司最終落敗,被美國在線公司以 42 億美元收購。
第二輪大戰(zhàn)當(dāng) IE 瀏覽器成功寡占瀏覽器市場(chǎng)時(shí),諸多問題逐漸暴露了出來:
IE 瀏覽器使用專屬格式,不尊重網(wǎng)頁公開標(biāo)準(zhǔn),使得開發(fā)者開發(fā)的網(wǎng)頁只能完整地運(yùn)行在 IE 瀏覽器上,其它非微軟平臺(tái)及瀏覽器無法正常顯示;
高占有率的 IE 瀏覽器已然成為電腦蠕蟲病毒攻擊的主要目標(biāo)之一,當(dāng)安全漏洞被發(fā)現(xiàn)時(shí),蠕蟲病毒也隨著IE的普及,在網(wǎng)絡(luò)快速傳播。
Netscape 瀏覽器在其公司衰落之時(shí)開放了瀏覽器源代碼,與此同時(shí) IE 瀏覽器的安全性問題持續(xù)引發(fā)關(guān)注,經(jīng)過長時(shí)間的醞釀?wù)Q生出了安全性較高的 Firefox 瀏覽器與 IE 瀏覽器展開了競(jìng)爭(zhēng)。
經(jīng)過從多種市場(chǎng)占有率的競(jìng)爭(zhēng)與發(fā)展來看,新出的瀏覽器逐步與 IE 瀏覽器平分市場(chǎng),最終于 2012 年的報(bào)告中顯示,Chrome 瀏覽器的市場(chǎng)占有率已上升至 33%,超過 IE 瀏覽器并成為全球第一大瀏覽器。
瀏覽器內(nèi)核瀏覽器的內(nèi)核通常僅指排版引擎。這里在介紹完瀏覽器中的排版引擎后加入解析 JavaScript 的引擎作出簡要說明。
1. 排版引擎在沒有計(jì)算機(jī)的年代,人們通過對(duì)藝術(shù)的直觀把握來進(jìn)行報(bào)紙、期刊的統(tǒng)一排版?,F(xiàn)在我們只需輸入規(guī)則的代碼指令,讓瀏覽器的排版引擎來幫我們做自動(dòng)化地做這些事情,并輸出至顯示器或打印機(jī)。
同樣的代碼指令在不同的排版引擎(即內(nèi)核)上的執(zhí)行效果不盡相同,這里提幾個(gè)著名的內(nèi)核,來展現(xiàn)它們的特點(diǎn)及其相互之間的發(fā)展關(guān)系。
①. Trident 內(nèi)核Trident 內(nèi)核運(yùn)行在 IE 上,又稱 IE 內(nèi)核,是 IE 的排版引擎的名稱。Trident 曾因其市場(chǎng)占有量龐大而不思進(jìn)取,一度與 W3C 標(biāo)準(zhǔn)脫節(jié)(05 年),給了運(yùn)行在 Safari、Chrome、Firefox 和 Opera 等瀏覽器 上的內(nèi)核提供了很大的發(fā)展空間。隨著微軟逐步放棄 IE 瀏覽器品牌,Trident 內(nèi)核版本也不再更新。
②. EdgeHTML 內(nèi)核EdgeHTML 內(nèi)核開啟了 Trident 內(nèi)核的分支,成為了替代 IE 瀏覽器的 Microsoft Edge 瀏覽器的主要排版引擎。EdgeHTML 移除所有舊版 IE 瀏覽器遺留下來的代碼,并通過尊重網(wǎng)頁標(biāo)準(zhǔn)、重寫主要的代碼以和其他現(xiàn)代瀏覽器的設(shè)計(jì)精神互通有無。
③. KHTML 內(nèi)核KHTML 是由 KDE 自由軟件社區(qū)所開發(fā)的 HTML 排版引擎,由 C++ 語言編寫。這里提到 KHTML 是因?yàn)槠涫窃缙?Safari 的內(nèi)核最終選型。Safari 開發(fā)團(tuán)隊(duì)因?qū)?KHTML 作出大量的改動(dòng),逐步從 KHTML 中脫離出來,KHTML 逐漸淡出主流瀏覽器中。
④. Webkit 內(nèi)核Webkit 的前身是 KHTML 引擎,屬于其一個(gè)開源分支,是 Safari 及早期 Chromium 、Amazon Kindle 等瀏覽器的默認(rèn)內(nèi)核。通常所說的 Webkit 不僅僅是排版引擎,其包括用來渲染 HTML 和 CSS 的 Webcore 引擎和用來解析 JS 的 JSCore。JSCore 將在后文有關(guān) JS 引擎中敘述。Webcore 便用來處理排版。
⑤. Chromium/BlinkChrome 瀏覽器的內(nèi)核來源于 Webkit 的 Webcore,最終用谷歌公司自主開發(fā)的開源排版引擎 Blink 所代替;同時(shí) Chrome 瀏覽器對(duì)于 JavaScript 代碼的解析也使用了自己的 V8 引擎。
Blink 同樣來自于 Webkit,據(jù)說 Blink 刪除了 880w 行 webkit 代碼。Blink 引擎問世后,國產(chǎn)各種 chrome 系的瀏覽器也紛紛投入 Blink 的懷抱,可以在瀏覽器地址欄輸入 chrome://version 進(jìn)行查看。
⑥. Gecko 內(nèi)核Gecko 是 Netscape6 和 Firefox 的內(nèi)核。Gecko 代碼公開,使用該內(nèi)核瀏覽器很多。其誕生來源于 IE 的不思進(jìn)取。微軟內(nèi)部人員不滿,與一停止更新 Netscape 的員工一起在創(chuàng)辦 了 Mozila
后開發(fā),常被稱為 Firefox 內(nèi)核,跨平臺(tái)使用。
Opera 瀏覽器早期使用的內(nèi)核,Opera 在 Blink 引擎推出之后轉(zhuǎn)用 Blink,其中原因包括毫無推廣上的優(yōu)勢(shì)(主要原因)和使用 Webkit 內(nèi)核的 Opera 可以兼容谷歌 Chrome 瀏覽器等。但換內(nèi)核代價(jià)慘痛,從快速輕量化與穩(wěn)定到異常卡頓與不穩(wěn)定,書簽同步都困難,很多用戶流失。Presto 內(nèi)核最終停留在了 12.17。
⑧. More這里便不一一列舉各個(gè)不同的內(nèi)核了,下圖可以看到內(nèi)核存在時(shí)間的對(duì)比,從而方便看出哪些內(nèi)核還在使用中。
2. JavaScript 引擎瀏覽器上不僅僅可以解析 HTML 和 CSS,也可以解析腳本語言 JavaScript ,而后者便需要 JS 引擎作支持。常見的
JS 引擎有 JScript 引擎、Chakra 引擎、V8 引擎、KJS 引擎等,這里作出小談。
與早期 KHTML 排版引擎相配的,還有用來解析 JavaScript 的 KJS 引擎。KJS 同樣由 KDE 社區(qū)開發(fā)。其后因?yàn)?Webkit 作為分支的誕生,逐步被可以直接將 JS 代碼編譯為原生機(jī)器碼的 JavaScriptCore 引擎替代。JavaScriptCore 成為了 Webkit 中的一個(gè)重要組件。
②. Chakra 引擎Chakra 是由微軟為 IE9+ 版本開發(fā)的 JavaScript 引擎,在一個(gè)獨(dú)立的CPU核心上即時(shí)編譯腳本,與瀏覽器并行。在 2009 年 11 月 18 日舉行的 SunSpider 測(cè)試展示了 IE9 的 PDC 版本對(duì)腳本的執(zhí)行遠(yuǎn)快于 IE8,但是仍然慢于 Firefox 3.5、Google Chrome 4 和 Safari 4。
③. V8 引擎V8 由 Google 公司開發(fā),是開源的 JavaScript 引擎。V8 在運(yùn)行之前將 JavaScript 編譯成了機(jī)器碼,而非字節(jié)碼或是解釋執(zhí)行它,以此提升性能?;?V8 引擎對(duì) JavaScript 的高性能解析,Node.js 也選擇了 V8 引擎作為其在服務(wù)端解析 JavaScript 的首選引擎,促進(jìn)了前端的蓬勃發(fā)展。
小結(jié)通過前半部分,我們談到了瀏覽器的特點(diǎn),并通過兩次瀏覽器大戰(zhàn)交代了主流瀏覽器的發(fā)展史;通過后半部分,我們看到千姿百態(tài)的瀏覽器內(nèi)核原來有足夠多的共性——每一個(gè)新的內(nèi)核并不是憑空而出的,都從上一個(gè)可以替代的內(nèi)核中吸收了足夠多的經(jīng)驗(yàn)。
這時(shí),如果有人讓你談?wù)剬?duì)瀏覽器內(nèi)核的理解,你就可以說將其拆分成排版引擎和 JS 引擎來分別說說它們的特點(diǎn)了。但本文只是起點(diǎn),有關(guān)一些瀏覽器為什么宣稱自己是雙內(nèi)核,有關(guān)瀏覽器組成,有關(guān)瀏覽器進(jìn)程調(diào)度,有關(guān)內(nèi)核渲染機(jī)制等問題都還沒有涉及,可以留在問尾以作延伸思考。
Hello,我是韓亦樂,現(xiàn)任本科軟工男一枚。軟件工程專業(yè)的一路學(xué)習(xí)中,我有很多感悟,也享受持續(xù)分享的過程。如果想了解更多或能及時(shí)收到我的最新文章,歡迎訂閱我的個(gè)人微信號(hào):韓亦樂。我的簡書個(gè)人主頁中,有我的訂閱號(hào)二維碼和 Github 主頁地址;[我的知乎主頁]中也會(huì)堅(jiān)持產(chǎn)出,歡迎關(guān)注。
本文內(nèi)部編號(hào)經(jīng)由我的 Github 相關(guān)倉庫統(tǒng)一管理;本文可能發(fā)布在多個(gè)平臺(tái)但僅在上述倉庫中長期維護(hù);本文同時(shí)采用【知識(shí)共享署名-非商業(yè)性使用-禁止演繹 4.0 國際許可協(xié)議】進(jìn)行許可。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88794.html
摘要:而用于主線程池的屬性都定義在中本篇只是簡單介紹了一下引導(dǎo)類的配置屬性,下一篇我將詳細(xì)介紹服務(wù)端引導(dǎo)類的過程分析。 從Java1.4開始, Java引入了non-blocking IO,簡稱NIO。NIO與傳統(tǒng)socket最大的不同就是引入了Channel和多路復(fù)用selector的概念。傳統(tǒng)的socket是基于stream的,它是單向的,有InputStream表示read和Outpu...
摘要:年,中科院計(jì)算所半導(dǎo)體所有關(guān)研制大規(guī)模集成電路的單位和廠合并,成立中科院微電子中心。目前是國資比例最高通過中國長城控股的國產(chǎn)企業(yè),是聚焦國家戰(zhàn)略需求和重大項(xiàng)目的國家隊(duì)。年,海光信息同達(dá)成合作,共同合資成立兩家子公司,引入架構(gòu)授權(quán)。本文將重點(diǎn)圍繞國產(chǎn)CPU的發(fā)展歷程與當(dāng)前產(chǎn)業(yè)鏈各領(lǐng)軍企業(yè)的布局情況作詳盡解讀(并包含特大號(hào)獨(dú)家整理的最新進(jìn)展),具體如下:1、國產(chǎn)CPU發(fā)展歷程回溯2、飛騰:PK生...
摘要:流控制通常就是在客戶端的頁面使用一個(gè)隱藏的窗口向服務(wù)端發(fā)出一個(gè)長連接的請(qǐng)求。和長鏈接以上幾種服務(wù)器推的技術(shù)中長輪詢和流控制其實(shí)都是基于長鏈接來實(shí)現(xiàn)的,也就是中所謂的。通信協(xié)議于年被定為標(biāo)準(zhǔn),并被所補(bǔ)充規(guī)范。 初探WebSocket node websocket socket.io 我們平常開發(fā)的大部分web頁面都是主動(dòng)‘拉’的形式,如果需要更新頁面內(nèi)容,則需要刷新一個(gè),但Slack工...
閱讀 3909·2023-04-25 19:07
閱讀 3635·2021-11-22 12:02
閱讀 3193·2021-10-12 10:11
閱讀 4144·2021-09-03 10:49
閱讀 2954·2019-08-30 13:21
閱讀 3079·2019-08-30 11:14
閱讀 2146·2019-08-29 15:40
閱讀 2929·2019-08-28 18:29