内核
浏览器内核可以分成两部分:渲染引擎 和 JavaScript 引擎,它负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。JavaScript 引擎则是解析 Javascript 语言,执行 javascript 语言来实现网页的动态效果。
最开始渲染引擎和JavaScript引擎并没有区分的很明确,后来JavaScript引擎越来越独立,内核就倾向于渲染引擎,所以现在平常所说的内核一般指的都是渲染引擎。如今常见的浏览器内核可以分这四种:
- Trident
- Gecko
- Blink
- Webkit
Trident
Trident(IE 内核):该内核程序在 1997 年的IE4中首次被采用,是微软在mosaic 代码基础之上修改而来的,并沿用到 IE11,也被普遍称作“IE内核”。
Trident实际上是一款开放的内核,其接口内核设计的相当成熟,因此才有许多采用 IE 内核而非 IE 的浏览器(壳浏览器)涌现。由于 IE 本身的 "垄断性"(虽然名义上 IE 并非垄断,但实际上,特别是从 Windows 95 年代一直到 XP 初期,就市场占有率来说 IE 的确借助 Windows 的东风处于 "垄断" 的地位)而使得 Trident 内核的长期一家独大,微软很长时间都并没有更新 Trident 内核,这导致了两个后果——一是 Trident 内核曾经几乎与 W3C 标准脱节(2005年),二是 Trident 内核的大量 Bug 等安全性问题没有得到及时解决,然后加上一些致力于开源的开发者和一些学者们公开自己认为 IE 浏览器不安全的观点,也有很多用户转向了其他浏览器,Firefox 和 Opera 就是这个时候兴起的。非 Trident 内核浏览器的市场占有率大幅提高也致使许多网页开发人员开始注意网页标准和非 IE浏览器的浏览效果问题。
补充:IE 从版本 11 开始,初步支持 WebGL 技术。IE8 的 JavaScript 引擎是 Jscript,IE9 开始用 Chakra,这两个版本区别很大,Chakra 无论是速度和标准化方面都很出色。
国内很多的双核浏览器的其中一核便是 Trident,美其名曰 "兼容模式"。
Window10 发布后,IE 将其内置浏览器命名为 Edge,Edge 最显著的特点就是新内核 EdgeHTML。关于 Edge 浏览器更多可以参考 如何评价 Microsoft Edge 浏览器? 以及 微软开源Edge的JS引擎ChakraCore
关于 IE 的历史,推荐这篇文章 激荡20年:IE浏览器的辉煌与落寞
Gecko
Gecko(Firefox 内核):Netscape6 开始采用的内核,后来Mozilla FireFox(火狐浏览器)也采用了该内核,Gecko 的特点是代码完全公开,因此,其开发程度很高,全世界程序员都可以为其编写代码,增加功能。因为这是个开源内核,因此受到许多人的青睐,Gecko 内核浏览器也很多,这也是Gecko内核虽然年轻但市场占有率能够迅速提高的重要原因。
事实上,Gecko 引擎的由来跟 IE 不无关系,前面说过 IE 没有使用 W3C的标准,这导致了微软内部一些开发人员的不满;他们与当时已经停止更新了的 Netscape的一些员工一起创办了 Mozilla,以当时的Mosaic 内核为基础重新编写内核,于是开发出了 Gecko。不过事实上,Gecko内核的浏览器仍然还是 Firefox用户最多,所以有时也会被称为 Firefox 内核。此外 Gecko 也是一个跨平台内核,可以在 Windows、BSD、Linux 和 Mac OS X 中使用。
WebKit
一提到 webkit,首先想到的是 Chrome,可以说,Chrome 讲 Webkit 内核深入人心,殊不知,Webkit的鼻祖其实是 Safari。现在很多人错误地把webkit叫做Chrome内核,苹果爸爸哭瞎了双眼。
Safari 是苹果共事开发的浏览器,使用 KDE 的 KHTML 作为浏览器的内核,Safari所用浏览器内核名称是大名鼎鼎的Webkit。Safari 在 2003 年 1 月 7日首次发行测试版,并成为Mac OS X v10.3 与之后版本的默认浏览器,也是成为苹果其他系列产品的指定浏览器(也支持Windows平台)。
由上述可知,webkit 前身是 KDE小组的 KHTML引擎, 可以说webkit 是 KHTML 的一个开源的分支,当年苹果在比较Gecko和KHTML后,选择了后者来做引擎开发, 是因为 KHTML 拥有清晰的源码结构和极快的渲染速度。
webkit内核可以说是硬件盈利为主的苹果公司给软件行业最大贡献之一。随后,2008年谷歌公开发布了 Chrome 浏览器,,采用的 chromium 内核便 fork 了 webkit。
此外,Apple 在Safari里面使用了自己的 Nitro JavaScript 引擎(只用于 webkit 来渲染 HTML),所以一般说道 Webkit, 通常指的就是渲染引擎,而不包括 JavaScript,在文章的开始也是强调过这一点。
Chromium/Blink
2008年,谷歌公司公开发布了 Chrome 浏览器,浏览器使用的内核命名为 chromium。 chromium fork 自开元引擎 webkit,却把 webkit 的代码整理得刻度性提高很多,所以以前可能需要一天进行编译的代码,现在只要两个小时就能搞定,因此 chromium 引擎和其他基于 webkit的引擎所渲染页面效果也是有出入的。所以些地方会把 chromium 引擎和 webkit 区分开来单独介绍的原因。
谷歌公司研发了自己的 JavaScript 引擎,V8,极大地提高了 JavaScript 的运算速度。
chromium 问世后,带动了国产浏览器行业的发展,一些基于 chromium 的单核,双核浏览器如雨后春笋般拔地而起,例如 搜狗、360、QQ浏览器、等等,无一不是套着不同的外壳用着相同的内核。
然而 2013 年 4 月 3 日,谷歌在 chromium Blog 上发表 博客。需要梯子才能打开开。称将与苹果的开元浏览器核心 webkit 分到样表,在 chromium 项目中研发 Blink 渲染引擎(既浏览器和兴),内置于 Chrome 浏览器之中。
webkit 用的好好的,为何要头传入到一个新的内核中去呢?
Blik 其实是 webkit 的分支,如同 webkit 是 KHTML 的分支一样。 谷歌的 chromium 一直停留在 webkit 作为渲染引擎,但出于某种原因,并没有将其多线程架构移植入 Webkit。
后来,由苹果推出的 webkit2 与 chromium 的沙箱设计存在冲突, 所以 chromium 一直停留在 webkit, 并使用移植的方式来实现和主线 webkit2 的对接。这增加了 chromium 的复杂性,且在一定程度上影响力 chromium 的架构移植工作。
基于以上原因,Google 决定从 webkit 衍生出自己的 Blik 引擎(谷歌和 Opera Software 共同研发),将在webkit 代码的基础上研发更加快速和简约的渲染引擎,并逐步脱离 webkit 的影响,创造一个完全独立的 Blink。这样以来,唯一一条维系谷歌和苹果之间技术关系的纽带就这样被切点了。
谷歌和苹果在多个领域都是竞争对手,而唯独在浏览器引擎上有技术合作,利益一致。但为了各自的利益,谁都不会拿出 100%的诚意来做好 webkit,因为你做出来的成果竞争对手直接享用。移动互联网已经崛起,手机和平板设备必将成为浏览器的另一个战场。这个时候,如果苹果跟苹果仍然黏在一起,讲会严重阻碍双方的颈部,也会阻碍 webkit 的进步。
据说 Blink 删除了 880w 行webkit 代码。
Blink 问世之后, 国产各种 Chrome 系浏览器也纷纷投入 B离开 的怀抱, 可以在浏览器地址栏输入 “Chrome://version” 进行查看。
Presto
Presto 是 opera 的前任内核, 为何说是前任,因为最新的 opera 浏览器早已将之抛弃而投入谷歌的怀中。
opera 的一个里程碑作品是 Opera7.0, 因为他使用了 Opera software 自主开发的 Presto 渲染引擎,取代了旧版 Opera4 至 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 浏览器可以兼容谷歌海量的插件资源。但是换内核的代价对于opera 来说过于惨痛。使用谷歌的 webkit 内核后,原本快速,轻量化、稳定的Opera 浏览器变得异常的卡顿,而且表现不稳定,Opera原本旧内核浏览器书签同步到新内核上的工作 Opera 花了两年时间,期间很多Opera 的用户纷纷转投谷歌浏览器和其他浏览器,造成了众多用户流失。至今现在还有上千万人在使用老版本的 Opera。
很多人都认为 Opera 浏览器终止在了 12.17, 此后更新的 Opera 版本号不在是原来那个 Opera。
关于移动端
移动端的浏览器内核主要说的是系统内置浏览器内核。
目前移动设备浏览器上常用的内核有 Webkit、Blink、Trident、Gecko等,其中 iPhone 和 iPad 等苹果 iOS 平台主要是 webkit, Android 4.4 之前得Android 系统内核是 webkit ,Android 4.4 系统浏览器切换到了 chromium, 内核是 webkit 的分支 Blink,Windows phone 8 系统浏览器内核是 Trident。
总结
浏览器内核主要指的是浏览器渲染引擎,2013年以前,代表有 Trident(IE),Gecko(Firefox),Webkit(safari chrome等)以及presto(opera)。2013年之后谷歌开始研发Blink 引擎,Chrome 28 以后开始使用,而 opera 放弃了自主研发的 presto 引擎,投入谷歌的怀抱,和谷歌一起研发 Blink 引擎,国内各种Chrome 系浏览器也纷纷放弃了 webkit, 投入了 Blink 的怀抱。
网友评论