作為一名常規前端開發,日常工作主要與瀏覽器打交道,但對瀏覽器的了解真的多嗎?就拿我個人來說,對瀏覽器內核知之甚少……
瀏覽器內核
瀏覽器的核心部分,瀏覽器內核傾向于指渲染引擎(layout engineer or Rendering Engine)。早期的瀏覽器內核同時包含JS引擎,后來隨著web的功能越來越強大,作為腳本的JS越來越復雜,于是獨立出了JS引擎。
- 渲染引擎:也叫排版引擎、解釋引擎,它負責取得網頁的內容(HTML、XML、圖像等)、布局和樣式(CSS等),以及計算網頁的顯示方式,然后輸出到顯示器或打印機
- JS引擎:顧名思義,JS引擎是專門用來解析JavaScript語言的,執行JavaScript語言來實現網頁的動態效果
有哪些常見的瀏覽器內核?
Trident([‘tra?d(?)nt])
說這個名字可能有點陌生,但換另外一種說法——IE內核應該就很熟悉了。該內核程序從1997年的IE4沿用到IE11,普遍稱之為IE內核。回顧一下歷史,微軟在90年代為了與當時的網景(Netscape Navigator)對抗,與Spyglass合作開發IE,確切來講IE是從Spyglass Mosaic(人類歷史上第一個瀏覽器)派生出來的,后來微軟購買了mosaic的源碼合并獲取授權,IE也就成了微軟專屬瀏覽器,其排版引擎也就是Trident。
當時的微軟很強,瀏覽器市場份額占了很大,而很長一段時間微軟都沒有去更新Trident內核,這直接導致了兩個后果:
- Trident內核幾乎與W3C標準脫軌
- bug很多
這些問題讓很多的開發者認為IE不安全,很多的用戶聽聞也開始棄用IE而轉用其它瀏覽器,如Firefox和Opera等。
Gecko ([‘gek??])
之前的Netscape 6采用的就是該內核,后來的瀏覽器Mozilla Firefox(火狐)也采用了該內核。Gecko內核完全開源,可開發程度很高,因此也收到了很多人的青睞。Gecko的由來與IE有很大的關系,當初IE在很長一段時間的不作為(不跟上W3C標準)導致了內部很多工程師的不滿,于是他們聯手當時以及停止更新的Netscape員工一起成立了Mozilla,以當時的Mosaic(沒錯,又是它)內核為基礎重新編寫一個新的內核Gecko。
由于Firefox的用戶最多,一般被稱為Firefox內核。
Webkit
在整理這一篇之前,我一直以為Webkit是Chrome的內核,然而并不是,準確地來講并不完全是。Webkit最開始的使用是Safari,作為蘋果一系列產品的默認瀏覽器,Safiri一開始使用了KDE(Linux桌面系統)的KHTML引擎作為瀏覽器的內核。Webkit前身是KHTML,確切來講是KHTML的一個分支。
蘋果后來推出了Webkit2后,Chrome就不再使用Webkit了,所以Webkit現在應該稱為safiri內核
Chromium/Blink
最后來到這里,為什么Chrome的內核會誤以為是Webkit呢?這是因為在2008年谷歌發布Chrome瀏覽器的時候,采用的內核是Chromium,而Chromium fork自開源引擎webkit,自己梳理了一遍Webkit的代碼,提高了可讀性的同時還大大降低了編譯時間。這些改動造成的影響是Chromium和Webkit渲染的結果有所出入。在2013年的時候,谷歌宣布與Webkit分道揚鑣,在Chromium項目中研發自己的Blink渲染引擎(內核),從此內置于Chrome之中。這里既有技術上的沖突也有商業利益上的沖突,有興趣的可以自尋搜索。Blink同樣fork自Webkit,但據說刪除了880w行Webkit的代碼。
所以,現在Chrome內核是Chromium/Blink。另外說一下,很多國產的瀏覽器通常采用的也是Chrome內核
各主流瀏覽器的JS引擎
IE
老版本IE使用Jscript引擎,IE9后包括現在的Edge瀏覽器使用的都是Charkra引擎(沒錯,查克拉引擎)
Firefox
這個詳細說起來就很多了,主要采用Monkey系列引擎
Safiri
Safiri采用的是JavaScriptCore引擎
Chrome
Chrome使用的是V8引擎,現今流行的Nodejs其實就是封裝了V8引擎