据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?
请相信,至少百万行.写一个内核模型并不容易, 单说是要兼容各种操作系统的不同版本,各种内存容量,屏幕大小, 网络状况, 还要优化速度, 尽量少崩溃, 也就是容错性, 就不是件容易的事.
主程序要做的事: 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岁老太,老太觉得“寒碜”不报警?