# 浏览器内核

浏览器内核可以分成两个部分:渲染引擎(Layout Engineer 或者 Rendering Engineer) 和JS引擎。其中,渲染引擎负责取得网页的内容(HTML、XML、图像等)、整理信息(例如输入CSS等)、以及计算网页的显示方式,然后会输出至显示器或打印机。不同浏览器内核对网页的语法解释会有不同,所以渲染出的效果也不相同。JS引擎则是用于解析Javascript语言,实现网页的动态效果。

最开始渲染引擎和JS引擎并没有区分得很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。 常见的浏览器内核可以分成这四种:TridentGeckoBlinkWebkit

# Trident

Trident(IE内核):该内核在1997年的IE4中首次被采用,是微软在Mosaic 代码的基础之上修改而来的,并沿用到IE11,也被普遍称作"IE内核"。

Trident实际上是一款开放的内核,其接口内核设计相当成熟,因此才有许多采用IE内核而非IE的浏览器涌现。由于IE本身的"垄断性",似的Trient内核在很长一段时间内一家独大,微软很长时间都没有更新Trient内核。这导致了两个结果——一是Trient内核曾经几乎与W3C标准脱节(2005年),二是Trient内核的大量Bug等安全性问题没有得到及时解决,再加上一些致力于开源的开发者和一些学者们公开自己认为IE浏览器不安全的观点,使得很多用户转向了其他浏览器,Firefox和Opera就是这个时候兴起的。非Trient内核浏览器的市场占有率大幅提高也致使许多网页开发人员开始注意网页标准和非IE浏览器的浏览效果问题。

IE从版本11开始,初步支持WebGL技术。IE8的JS引擎是Jscript ,IE9开始使用Chakra,这两个版本区别很大,Chakra无论是速度还是标准化方面都很出色。

Window10发布后,微软将内置的浏览器命名为Edge,Edge最显著的特点就是新内核EdgeHTML。

# Gecko

Gecko,Netscape6开始采用的内核,后来的 Mozilla Firefox 也采用了该内核。前面说过IE没有使用W3C标准,这导致了微软内部一些开发人员的不满。他们与当时已经停止更新了的Netscape的一些员工一起创办了Mozilla 。以当时的Mosaic内核为基础重新编写内核,于是开发出了Gecko。Gecko也是一个跨平台内核,可以在Window、BSD、Linux和Mac OS X中使用。

# Webkit

webkit是 safari 所使用的内核。它的前身是KDE小组的KHTML引擎,可以说webkit是KHTML的一个开源分支。当年苹果在比较了Gecko和KHTML后,选择了后者来做引擎开发,是因为KHTML拥有清晰的源码结构和极快的渲染速度。

2008年,谷歌公司发布了chrome浏览器,浏览器使用的内核被命名为chromium

chromium fork开源引擎 webkit,却把webkit的代码梳理得可读性提高很多,因此chromium引擎和基于webkit的引擎所渲染的页面,效果也是有出入的。谷歌还研发了自己的Javascript引擎V8 ,极大地提高了Javascript的运行速度。

2013年4月,谷歌发表博客,在chromium项目中研发Blink内核,内置于Chrome浏览器之中。

Blink其实是webkit的分支,如同webkit是KHTML的分支。谷歌的Chromium项目此前一直使用webkit作为渲染引擎,但出于某种原因,并没有将其多进程架构移植入webkit。后来,由于苹果推出的webkit2与Chromium的沙箱设计存在冲突,所以Chromium一直停留在webkit,并使用移植的方式来实现和主线webkit2的对接。这增加了Chromium的复杂性,且在一定程度上影响了Chromium的架构移植工作。

基于以上原因,Google决定从webkit衍生出自己的Blink引擎(后由Google和Opera共同研发)。将在webkit代码的基础上研发更加快速和简约的渲染引擎,并逐步脱离webkit的影响,创建一个完全独立的Blink引擎。

PS: Chromium浏览器是谷歌为发展自家的浏览器Chrome而开启的计划,所以Chromium相当于Chrome的工程版或称实验版(尽管Chrome自身也有β版阶段),新功能会率先在Chromium上实现,待验证后才会应用在Chrome上。Chromium一天最多可以更新十几二十个版本,实验性的新特性都会现在这里放出,但是Chromium本身其实并不稳定;而Chrome总共有四个更新分支:Canary、Dev、Beta、Stable,稳定性依次增强。

# Presto

Presto 是挪威产浏览器 opera 的 “前任” 内核,为何说是 “前任”,因为最新的 opera 浏览器早已将之抛弃从而投入到了谷歌大本营。

Opera 的一个里程碑作品是 Opera7.0,因为它使用了 Opera Software 自主开发的 Presto 渲染引擎,取代了旧版 Opera 4 至 6 版本使用的 Elektra 排版引擎。该款引擎的特点就是渲染速度的优化达到了极致,然而代价是牺牲了网页的兼容性。

Presto 加入了动态功能,例如网页或其部分可随着 DOM 及 Script 语法的事件而重新排版。Presto 在推出后不断有更新版本推出,使不少错误得以修正,以及阅读 Javascript 效能得以最佳化,并成为当时速度最快的引擎。

然而为了减少研发成本,Opera 在 2013 年 2 月宣布放弃 Presto,转而跟随 Chrome 使用 WebKit 分支的 Chromium 引擎作为自家浏览器核心引擎,Presto 内核的 Opera 浏览器版本永远的停留在了 12.17。在 Chrome 于 2013 年推出 Blink 引擎之后,Opera 也紧跟其脚步表示将转而使用 Blink 作为浏览器核心引擎。

Presto 与开源的 WebKit 和经过谷歌加持的 Chromium 系列相比毫无推广上的优势,这是 Opera 转投 WebKit 的主要原因,并且使用 WebKit 内核的 Opera 浏览器可以兼容谷歌 Chrome 浏览器海量的插件资源。但是换内核的代价对于 Opera 来说过于惨痛。使用谷歌的 WebKit 内核之后,原本快速,轻量化,稳定的 Opera 浏览器变得异常的卡顿,而且表现不稳定,Opera 原本旧内核浏览器书签同步到新内核上的工作 Opera 花了整整两年时间,期间很多 Opera 的用户纷纷转投谷歌浏览器和其他浏览器,造成了众多的用户流失。时至今日现在还有上千万人在使用老版本的 Opera。

# 关于移动端

移动端的浏览器内核主要说的是系统内置浏览器的内核。

目前移动设备浏览器上常用的内核有 Webkit,Blink,Trident,Gecko 等,其中 iPhone 和 iPad 等苹果 iOS 平台主要是 WebKit,Android 4.4 之前的 Android 系统浏览器内核是 WebKit,Android4.4 系统浏览器切换到了Chromium,内核是 Webkit 的分支 Blink,Windows Phone 8 系统浏览器内核是 Trident。

# 备注

webkit其实是KHTML的分支,这里的KHTML指渲染引擎。webkit其实就泛指webkit的渲染引擎WebCore,而webkit引擎的Javascript引擎JSCore是KJS的分支。Chrome则搭载了自己的Javascript引擎V8。


抄自:

各主流浏览器内核介绍 (opens new window)

主流浏览器内核介绍 (opens new window)

Last Updated: 3/10/2020, 9:50:22 AM