据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?

请相信,至少百万行.写一个内核模型并不容易, 单说是要兼容各种操作系统的不同版本,各种内存容量,屏幕大小, 网络状况, 还要优化速度, 尽量少崩溃, 也就是容错性, 就不是件容易的事.

主程序要做的事: 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执行性能上,这部分的复杂性就很高了 。

小结

现代全功能浏览器其实就是一个虚拟机,一个平台,支持着繁多的标准和语言 。这么高的需求下,这一平台的庞大、复杂也是必然的 。尤其在渴求性能的情况下,复杂度会更高 。

当然,如果缩减需求,比如减少所需支持的标准和语言,降低性能要求,减少功能(比如视音频播放),浏览器也可以做得不那么复杂 。

其他网友观点

我觉得一个浏览器的核心功能本来不应该有很多代码的,但是为什么实际上代码量会很多呢,主要问题可能是在“兼容”上 。

互联网中有各种各样的协议,各种各样的标准,一个易于使用的浏览器必然需要考虑到所有的情况 。所以本来实现一个功能只需要几十行或者几百行代码,但是现实中为了考虑兼容性代码量就得翻倍 。

    推荐阅读