據報道稱“瀏覽器內核有上千萬行代碼”,瀏覽器內核真的很復雜嗎?

確實非常的復雜!

首先可以明確的是,瀏覽器是少有的大型軟體系統,其復雜性可以媲美我們每天使用的Windows系統。

微軟甚至放棄自家的IE和edge內核,轉而使用chrome內核,chrome優秀是一方面,更重要是開發瀏覽器內核太復雜,太燒錢。當然微軟已經不是當年的微軟了!

現在微軟也在全力擁抱開源,甚至在win10里面支持內置wsl的Linux內核。如果說某一天我們使用的Windows系統,基于Linux內核開發,大家也不要太驚訝。

隨著微軟加入chrome陣營,chrome實力大增,會加速甩開其他瀏覽器!說不定某一天蘋果也宣布使用chrome內核!

從瀏覽器的基本功能來看,其核心模塊有:

網路請求

我們知道,目前web系統,都是BS模式的,也就是系統相關的頁面,發布在服務器端的。

瀏覽器想要運行,第一件事情就是向服務器請求頁面代碼。

這就是網路請求,瀏覽器的最基本功能之一。

頁面解析

請求到頁面之后,需要對頁面進行解析,先認識頁面,然后才能進行下一步工作。

頁面渲染

解析了頁面之后,就可以對頁面進行渲染了。渲染完成之后,我們就看到了web系統的界面了。

這些功能,似乎看起來沒有那么復雜!那瀏覽器的幾千萬行代碼,到底在實現了哪些復雜的功能呢?

模塊代碼量統計

稍后補充。。。

此外,現代瀏覽器還具備以下特點:

跨平臺

這意味著你不能簡單調用操作系統的api來實現功能,必須考慮跨平臺問題,還有可能要從頭實現某些重要功能。

高性能

Google專門為Google chrome打造了高性能的V8引擎,來解釋執行JS代碼。如今結合nodeJS,V8引擎甚至已經在后端發力。

高標準

也就是各種web標準要支持到位,要做到上圖一樣,360度無死角,才能成為優秀的瀏覽器。

  • HTML

HTML用來描述網站頁面的界面骨架,由一顆樹形結構的HTML文檔構成,也稱為DOM樹。

在HTML中,記錄了構成頁面的各種控件及其位置,參數等等基本結構。頁面加載的時候,是最先下載HTML并解析的。

HTML最新版本是HTML5,其中加入了大量新特性,瀏覽器必須支持這些最新的HTML特性,才能算是一個合格的瀏覽器。

  • CSS

CSS則是負責頁面的美化裝修。什么前景色,背景色,圓角邊框,邊框顏色,邊框大小等等。基本上你能想到的界面調整參數,CSS里面都應有盡有!這也正是瀏覽器的一個復雜模塊。目前最新版本是CSS3。

  • JavaScript

界面骨架有了,也可以做的非常漂亮,盡善盡美了。那頁面的邏輯怎么辦?

沒錯,JavaScript就是負責前端頁面的邏輯部分的。從最早期的前端輸入校驗,發展到如今的近乎萬能,JavaScript經歷了漫長的發展。

其中也經歷了各種標準和版本,目前的主流版本是ES6。

瀏覽器為了支持最新的JavaScript,也需要開發巨量代碼。

  • WebGL

WebGL是最近幾年才火爆起來的一個特性,他將web的渲染性能大幅提升。

因為通過WebGL,我們可以直接調用顯卡進行渲染和計算。

這使得在web端實現大型的三維引擎成為可能。比如Three.js,Cesium等等。

為了支持webgl,瀏覽器又必須進行大量開發工作。

  • Web Assembly

前面說到了JavaScript,使用JavaScript我們已經可以在web端實現大型三維引擎了。

盡管如此,還是不能滿足我們目前對于web端的更為復雜的應用的效率要求。還是有很多人認為JavaScript的速度慢。

于是人們又起草了Web Assembly的標準。這是一種類似匯編語言的web標準,號稱web端的匯編語言。

其目的在于解決JavaScript執行效率低的問題。同時可以使用C++等高級語言,開發Web Assembly模塊。

如今已經有很多Web Assembly結合JavaScript的應用案例了。如Google在其Google earth的web版本中就大量使用該技術。

這也會導致瀏覽器花費大量代碼來支持Web Assembly的各種功能。

總結

非常感謝您能夠耐心的看到這里。不知道您有沒有發現,我們在Windows里面做的很多事情,在瀏覽器里面,居然也能做了!這說明瀏覽器已經慢慢發展到和操作系統差不多的功能了,您說他能不復雜嗎!

10 条回复 A文章作者 M管理員
  1. 我就期待微軟啥時候把系統的IE去掉,換成Edge,那就爽了!

  2. 操作系統只是負責電腦硬件資源的調度和管理,就算是現在的win10系統復雜程度也沒chrome難度大,瀏覽器的最大難度在于js引擎,css引擎,這兩個引擎的難度只有做過的人才知道。css引擎靈活到你甚至都可以用它來制作一部動畫片的程度,js引擎同樣也是強大到無所不能的地步,而且這兩個引擎還要保持高效執行。說實在的,讓開發win10的人去開發瀏覽器未必能做好。但是開發瀏覽器的人去開發win10應該沒問題。

  3. 還是萬維網的設計太低級了,后邊才這么復雜,世界快變天,重構萬維網。

  4. 不知道那么多小白,大陸的瀏覽器都是換了個皮膚的,內核只有chrome,opera, Firefox, safari和以前的IE…這個是常識,好吧[呲牙],\n你們可以在瀏覽器請求的時候查看頭文件的時候能看到[打臉]

  5. 大陸沒有自己的瀏覽器

  6. 一個瀏覽器也差不多半個操作系統了。一個頁面涉及到各種技術,有界面布局、渲染、動畫、音頻、視訊,支持各種文件格式,甚至于游戲都有網頁版,Office軟體都可以整合到瀏覽器里,幾乎電腦里能干的工作,在網頁都可以干。

  7. 那么,為什么微軟做不好瀏覽器

  8. 人家說的是復雜程度可以媲美 并沒有說文件體積代碼量…還操作系統就是win和Linux沒有別的了…macos和unix呢?還不算眾多廠家的分支 嘰嘰喳喳的 不懂就虛心點 要說代碼量 好多行業軟體比操作系統都大多了…挺樓主

  9. 終于寫完了!也算是長篇大論了[捂臉]

  10. 瀏覽器100多M,操作系統2個G,你說他們基礎代碼量差不多,開玩笑呢,操作系統大量適配底層硬件,難度應當大的多