據報道稱“瀏覽器內核有上千萬行代碼”,瀏覽器內核真的很復雜嗎?
請相信,至少百萬行.寫一個內核模型并不容易, 單說是要兼容各種操作系統的不同版本,各種內存容量,屏幕大小, 網絡狀況, 還要優化速度, 盡量少崩潰, 也就是容錯性, 就不是件容易的事.
主程序要做的事: 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執行性能上,這部分的復雜性就很高了 。
小結現代全功能瀏覽器其實就是一個虛擬機,一個平臺,支持著繁多的標準和語言 。這么高的需求下,這一平臺的龐大、復雜也是必然的 。尤其在渴求性能的情況下,復雜度會更高 。
當然,如果縮減需求,比如減少所需支持的標準和語言,降低性能要求,減少功能(比如視音頻播放),瀏覽器也可以做得不那么復雜 。
其他網友觀點我覺得一個瀏覽器的核心功能本來不應該有很多代碼的,但是為什么實際上代碼量會很多呢,主要問題可能是在“兼容”上 。
互聯網中有各種各樣的協議,各種各樣的標準,一個易于使用的瀏覽器必然需要考慮到所有的情況 。所以本來實現一個功能只需要幾十行或者幾百行代碼,但是現實中為了考慮兼容性代碼量就得翻倍 。
推薦閱讀
- 從“包辦婚姻”到“自由選擇”,如何把喜歡的人追回家?
- 女人愿做“號哭族”宣泄心理壓力
- 年末五大鬧心事 你有哪種“年底恐懼癥”
- 解析 你是否惹上了“神經病”
- 白領過年要放輕松 千萬別讓“情緒病”找上門
- 解讀七理由 厭職者擺脫“精神壓迫”良方
- 這些蔬菜讓你的肌膚“喝”足水
- 中金公司全稱 去看看
- 武漢仁愛醫院婦科:拿什么檢驗你的宮腔是否健康,“鏡子”照一照就曉得!
- 如何看待39歲離異男強奸66歲老太,老太覺得“寒磣”不報警?
