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

請相信,至少百萬行.寫一個內核模型并不容易, 單說是要兼容各種操作系統的不同版本,各種內存容量,屏幕大小, 網絡狀況, 還要優化速度, 盡量少崩潰, 也就是容錯性, 就不是件容易的事.

主程序要做的事: tcp/ip的解析,http, https , ftp 等各種協議的解析,應答, java script/css/html 的分析及實現, 插件, 哪一個部分單獨實現都得幾萬行代碼了.

其他網友觀點

這樣說比較合適:

一個現代的,全功能的、高性能的瀏覽器內核必然是很復雜 。

關鍵在需求

和普通軟件一樣,瀏覽器內核是否復雜,取決于其需求 。

如果需求很多,內核就很復雜;需求不多,就可以比較簡單 。

現存瀏覽器內核中,有龐大、復雜的,也有短小精悍的 。

簡單的瀏覽器內核

【據報道稱“瀏覽器內核有上千萬行代碼”,瀏覽器內核真的很復雜嗎?】世界上第一個瀏覽器是運行在NextStep系統上的WorldWideWeb(www這一簡寫就是從這里來的),這一瀏覽器恐怕也是最小的瀏覽器了 。

其它較小的瀏覽器還有:

Links:運行于文本模式NetSurf:運行于圖形模式,不支持Javascript

我做了一個統計,這三個瀏覽器源代碼情況大致如下:


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

(用scc完成代碼統計,并去掉License,HTML及純文本)

以上可以說明:瀏覽器代碼可以很少,甚至一萬行以內即可實現一個瀏覽器內核 。

但大家都知道,現代的全功能瀏覽器都是龐大的 。這正是因為需求多 。

全功能現代瀏覽器為何龐大?

主要有兩方面原因 。

一方面,瀏覽器需要兼容各種各樣的網頁標準 。比如:

HTTP標準,從1.0,1.1到2.0,都需要支持;SSL,TLS各種版本的支持,各種根證書的支持都需內置在瀏覽器中;HTML,HTML3.2,HTML 4.0, DHTML一個都不能少;用這些標準編寫的網頁還都存在呢;HTML5肯定要支持,其中的音頻標簽需要支持哪些音頻解碼器?常見的不能少吧?視頻標簽又需要支持哪些視頻解碼器呢?另外,WebSocket要不要支持?CSS1到3,都要支持,往往還需要支持標準以外的各種方言,比如webkit方言 。畢竟有許多網頁都包含這些方言所編寫的代碼;

我們把Javascript支持單獨分出來說,因為這部分復雜性比較高 。

首先,從古老的Javascript到較新的各種ECMA Script都需要支持,這就不簡單 。Javascript支持了,DOM數據也要支持吧?

一旦支持全功能編程語言,就涉及更多問題,因為這根本就是要實現一個虛擬機,一個平臺 。這可以從一些例子看出:如有人在瀏覽器中用Javascript啟動一個Linux系統 。

像谷歌的Chrome瀏覽器,花費了很大工夫在優化Javascript執行性能上,這部分的復雜性就很高了 。

小結

現代全功能瀏覽器其實就是一個虛擬機,一個平臺,支持著繁多的標準和語言 。這么高的需求下,這一平臺的龐大、復雜也是必然的 。尤其在渴求性能的情況下,復雜度會更高 。

當然,如果縮減需求,比如減少所需支持的標準和語言,降低性能要求,減少功能(比如視音頻播放),瀏覽器也可以做得不那么復雜 。

其他網友觀點

我覺得一個瀏覽器的核心功能本來不應該有很多代碼的,但是為什么實際上代碼量會很多呢,主要問題可能是在“兼容”上 。

互聯網中有各種各樣的協議,各種各樣的標準,一個易于使用的瀏覽器必然需要考慮到所有的情況 。所以本來實現一個功能只需要幾十行或者幾百行代碼,但是現實中為了考慮兼容性代碼量就得翻倍 。

    推薦閱讀