浏览器内核代码有多少行 常见的浏览器及其内核
网友提问:
据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?
优质回答:
浏览器内核的复杂性就在于它几乎囊括了计算机所有的专业知识。
编译原理:V8引擎中的各种黑优化哪个是简单的?没有一定的编译原理基础你还真搞不定!
计算机网络:Chromium是自己搞了一套网络栈的,实现了很多协议,比如目前移动端使用较多的QUIC。
操作系统:Chromium的多进程,必须得每个系统写一套,同时还要消除不同系统之间的差异,如果操作系统你学的一塌糊涂,我想多进程的程序你是写不好的!
图形学:网页排版真的很复杂啊,有木有?你要支持世界各国的奇奇怪怪的文字。
我们以霸主chromium为例,目前的Chrome、360极速浏览器、Edge最新版,以及前段时间被爆丑闻的红芯浏览器都是以其为内核来开发。它到底有多复杂呢?请看下图,我简单列举了一些重要模块的功能:
实际上,拆分开每一项都是一套很复杂的东西。我们以其中的net网络库为例。
net网络库
如果你认为net只是一个简单的网络库实现,那么就大错特错了,还包括谷歌自己牵头实现的一些协议(比如QUIC等)。它里面涉及的知识点,包含了主机解析,cookies,网络改变探测,SSL,资源缓存,ftp,HTTP, OCSP实现,代理 (SOCKS和HTTP) 配置,解析,QUIC(Quick UDP Internet Connection,是谷歌制定的一种基于UDP的低时延的互联网传输层协议),socket池,SPDY,WebSockets……每一项分开来写成一本厚厚的书都不成问题。具体我们可以参考下图,github上关于net模块的代码结构。
浏览器内核到底有多复杂呢?也许只有你真正参与其中才会发现。这也是为什么强大如微软的企业也放弃了浏览器内核的维护,转投chromium怀抱,因为需要投入的人力、物力、财力简直太恐怖了,而且还不见好。
本文为作者“一个程序员的奋斗史”问答原创文章,未经允许转载、抄袭必究!
其他网友回答
请相信,至少百万行. 写一个内核模型并不容易, 单说是要兼容各种操作系统的不同版本,各种内存容量,屏幕大小, 网络状况, 还要优化速度, 尽量少崩溃, 也就是容错性, 就不是件容易的事.
主程序要做的事: 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执行性能上,这部分的复杂性就很高了。
小结
现代全功能浏览器其实就是一个虚拟机,一个平台,支持着繁多的标准和语言。这么高的需求下,这一平台的庞大、复杂也是必然的。尤其在渴求性能的情况下,复杂度会更高。
当然,如果缩减需求,比如减少所需支持的标准和语言,降低性能要求,减少功能(比如视音频播放),浏览器也可以做得不那么复杂。
其他网友回答
复杂是因为HTML这个玩意从诞生起就没有很严格的标准,更没有严格的执行厂家。各家一套标准,html又是个粗糙不严谨的标记语言,发展初期混乱不堪,各家浏览器为了满足向下兼容又只能把自己弄的异常复杂。chrome源码16GB各种核心代码、测试代码加起来大概2000多万行,但实际编译后也就几十M大小。可见其中的冗余代码有多少。
其他网友回答
不是很复杂,是超级复杂。
现在的微软牛逼吧,但是微软浏览器使用的也是Chromium内核,自己现在也没开发属于自己的浏览器内核。
各大浏览器内核如下:
1、IE浏览器内核:Trident内核,也是俗称的IE内核;
2、Chrome浏览器内核:统称为Chromium内核或Chrome内核,以前是Webkit内核,现在是Blink内核;
3、Firefox浏览器内核:Gecko内核,俗称Firefox内核;
4、Safari浏览器内核:Webkit内核;
5、Opera浏览器内核:最初是自己的Presto内核,后来是Webkit,现在是Blink内核;
6、360浏览器、猎豹浏览器内核:IE+Chrome双内核;
7、搜狗、遨游、QQ浏览器内核:Trident(兼容模式)+Webkit(高速模式);
8、百度浏览器、世界之窗内核:IE内核;
9、2345浏览器内核:以前是IE内核,现在也是IE+Chrome双内核;
一个浏览器的内核牵扯的东西太多,不是简简单单一两句话能够说明白的。
浏览器内核的开发,可以说丝毫不比十九世纪中期登陆月球计划简单,甚至犹有过之而无不及。
咱们国内的浏览器,比如百度浏览器,QQ浏览器,UC浏览器,搜狗浏览器等等浏览器,基本上都是使用的原有的内核,利用现成的内核惊醒二次开发,修改,迅速成型,根本没有一家是自己开发的浏览器内核。