什么是浏览器内核?
维基百科中对浏览器内核的定义:网页浏览器的排版引擎(Layout Engine或Rendering Engine)也被称为浏览器内核、页面渲染引擎或模板引擎,它负责取得网页的内容(HTML、XML、图像等等)、整理消息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要根据表示性的标记语言(Presentational markup)来显示内容的应用程序都需要排版引擎。
现在有几个主流的排版引擎,因为这些排版引擎都有其代表的浏览器,所以常常会把排版引擎的名称和浏览器的名称混用,比如常的说IE内核、Chrome内核。其实这样子是不太合理的,因为一个完整的浏览器不会只有一个排版引擎,还有自己的界面框架和其它的功能支撑,而排版引擎本身也不可能实现浏览器的所有功能。
现时主要的四大排版引擎为:Trident(应用于Internet Explorer);Gecko(应用于Mozilla Firefox);Blink(应用于Chrome );WebKit (应用于Apple Safari和早期版本的Google Chrome)。
1. Trident
Trident(又称为MSHTML、IE内核),是微软的视窗操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称,它的第一个版本随着1997年10月Internet Explorer第四版发布,之后不断的加入新的技术并随着新版本的Internet Explorer发布。在Internet Explorer第七版中,微软对Trident排版引擎做了的重大的变动,除了加入新的技术之外,并增加对网页标准的支持。尽管这些变动已经在相当大的程度上落后了其它的排版引擎,如Gecko、WebCore、KHTML、Webkit及Presto。
Trident引擎被设计成一个软件组件(模块),使得其他软件开发人员很容易的将网页浏览的功能加到他们自行开发的应用程序里。微软提出了一个称为组件对象模型(COM)的软件接口架构。供其它支持的组件对象模型开发环境的应用程序(如:C++及.NET)访问及编辑网页。例如,由C++所撰写的程序可以加入浏览器控件里,并通过Trident引擎访问当前显示在浏览器上的网页内容及网页的各种元素的值,从浏览器控件触发的事件亦可被程序截取并进行处理。Trident引擎所提供的所有库可以通过与mshtml.dll这个文件的链接而达成撰写程序时所需要的功能。
老的Trident内核(比如常说的IE6内核)一直是不遵循W3C标准的,但是由于当时IE6的市场份额最大,所以后果就是大量的网页专门为IE6等老Trident内核编写,在IE6下显示很正常,但其实这些网页的代码并不符合W3C标准,于是,完全依据W3C标准写的网页在老的Trident内核下面又出现偏差,这就是为什么很多人觉得后来的IE9的网页排版有时会乱了,而IE6则正常,其实不是浏览器兼容性差了,而是你访问的网页不符合新的标准。目前可供调用的最新版的Trident内核是IE9所用的内核,相较之前的版本对W3C标准的支持增强了很多。
Trident内核的常见浏览器有:
IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0);
世界之窗、 360安全浏览器、傲游;搜狗浏览器;腾讯TT;阿云浏览器(早期版本)、百度浏览器(早期版本)、瑞星安全浏览器、Slim Browser; GreenBrowser、爱帆浏览器(12 之前版本)、115浏览器、155浏览器; 闪游浏览器、N氧化碳浏览器、糖果浏览器、彩虹浏览器、瑞影浏览器、勇者无疆浏览器、114浏览器、蚂蚁浏览器、飞腾浏览器、速达浏览器、佐罗浏览器;
其中部分浏览器的新版本是“双核”甚至是“多核”,其中一个内核是Trident,然后再增加一个其他内核。国内的厂商一般把其他内核叫做“高速浏览模式”,而Trident则是“兼容浏览模式”,用户可以来回切换。
2. Gecko
Gecko是一款开放源代码网页排版引擎,目前由Mozilla Firefox、Mozilla Thunderbird和众多开源软件项目和所使用。
这套排版引擎提供了一个丰富的应用程序接口以供互联网相关的应用程序使用,例如:网页浏览器、HTML编辑器、客户端/服务器等等。
Gecko使用C++编写且支持跨平台,可运行于许多的的操作系统上,包含BSD、Linux、Mac OS X、Solaris、OS/2、AIX、OpenVMS和Microsoft Windows等。
1997年,网景导航者在各方面的表现已经比不上它的主要竞争对手Internet Explorer,这包括程序的运行速度、对W3C标准的支持度等等。于是,网景收购了DigitalStyle,开始研发下一代的排版引擎,并期望把新的排版引擎应用于下一版本的网景浏览器上。
1998年初,这个新的排版引擎名为Raptor,以开放源代码的方式发放于网络上。后来,因为商标问题,Raptor改名为NGLayout(即Next Generation Layout之意)。而最后NGLayout被网景市场部门重命名为Gecko。但由于Gecko为网景公司的商标,所以有一段时期Mozilla.org(网景成立的非正式组织,Mozilla基金会前身)以NGLayout来称呼这个新的排版引擎。不过,最后还是采用Gecko作为名称。
1998年10月,网景公布下一版的浏览器将会使用这个排版引擎,而该浏览器亦需要被大幅度重写。对于致力推动网络标准的人,这是一个令人振奋的消息。然而,对于网景开发者而言,这是一个长达六个月的大工程,而他们在网景5.0上(包括旧有的Mariner排版引擎)所花的心血亦被白白浪费,结果导致采用Gecko引擎的网景6.0在2000年11月才被正式发布。
随着Gecko排版引擎的开发,越来越多应用程序开始使用它。AOL作为网景的母公司,终于在CompuServe 7.0和AOL for Mac OS X上使用了Gecko。可惜,Windows版的AOL浏览器始终没有使用过Gecko。
2003年7月15日,美国在线解散了网景公司,大部分网景开发者被解雇。而Mozilla基金会亦在当天成立,继续推动着Gecko的发展。直到今天,Gecko排版引擎继续由Mozilla员工和社群志工所维护。
比较可惜的是,虽然是开源的,也开发了这么多年,基于Gecko的浏览器并不多见。
3. WebKit
WebKit是一个排版引擎,主要设计是用来让网页浏览器绘制网页。WebKit目前作为Apple Safari及Google Chrome(直到版本27)等浏览器的主要引擎。根据StatCounter的浏览器市场份额调查,于2012年11月,Webkit市占超过了40%,它已经成为拥有最大市场份额的排版引擎,超越了Internet Explorer所使用的Trident及Firefox所使用的Gecko引擎。Webkit也作为一些实验性质浏览器的基础引擎,包含AmazonKindle 电子书阅读器,同时也使用在下列行动操作系统的默认浏览器,包含苹果电脑iOS、Android, BlackBerry Tablet OS、Bada、Tizen及webOS。WebKit的C++应用程序接口提供了一系列的Class让我们可以在视窗上显示网页内容,并且实现了一些浏览器的特色,包含使用者连结点击、管理前后页面列表以及使用者曾经拜访过的历史页面等等。
WebKit的HTML及JavaScript程式码源自于KDE的KHTML及KJS函式库,现在已经由KDE、苹果电脑、诺基亚、Google、Bitstream、RIM、Igalia等进行独立专案开发。OS X、Windows、GNU/Linux以及其他类Unix系统操作系统,皆支援这个专案。
WebKit的WebCore及JavaScriptCore元件使用GNU宽通用公共许可证开源,而其他的WebKit元件则采用BSD许可证开源。
截至2013年3月7日,Webkit商标已被苹果公司在美国专利及商标局注册为其拥有商标。
常见的WebKit内核的浏览器:Apple Safari (Win/Mac/iPhone/iPad)、Symbian手机浏览器、Android 默认浏览器。
4. Blink
Blink是一个由Google和Opera Software开发的浏览器排版引擎,Google计划将这个渲染引擎作为Chromium计划的一部分,并且在2013年4月的时候公布了这一消息。这一渲染引擎是开源引擎WebKit中WebCore组件的一个分支,并且在Chrome(28及往后版本)、Opera(15及往后版本)和Yandex浏览器中使用 。
JavaScript引擎
顾名思义,JavaScript引擎就是用来执行JS代码的。譬如说,一个算圆周率的网页,排版引擎把页面的框架给显示出来了,但最终的结果需要用到 Javascript 来计算,所以Javascript引擎的快慢也是对整个网页的速度有着很大影响,特别是目前越来越多类似 WebQQ、Gmail 等大量应用了复杂的 Javascript 运算的网站,不同的引擎最终的速度差异会相当大。
在2008年到2009年的第二次浏览器大战之前,JavaScript引擎(JavaScript engine)仅简单地被当作能阅读执行JavaScript源代码的解释器。
第一款JavaScript引擎由布兰登·艾克在网景公司开发,用于Netscape Navigator网页浏览器中。引擎的名字叫做SpiderMonkey,由C实现。它自JavaScript 1.5升级以符合ECMA-262 版本3。Rhino引擎,由网景公司的Norris Boyd开发,由Java实现。像SpiderMonkey一样,Rhino符合ECMA-262 版本3。JavaScript引擎的应用例子还包括: Apple Safari 4的Nitro,Google Chrome的V8和 Mozilla Firefox 3.5的TraceMonkey。
目前为止,最通用的JavaScript宿主环境是网页浏览器。网页浏览器一般使用公共的API创建“宿主对象”以便于在JavaScript中支持DOM。
网页服务器是另一种通过的应用程序引擎。一个JavaScript服务器能够处理HTTP请求并回应,这样JavaScript程序能动态生成页面。微软用于IIS中ASP技术允许服务器端代码以VB Script或JScript(微软的JavaScript实现)写成。Jaxer是以JavaScript编写成的网页服务器,这有利于在服务器端和客户端使用同样的代码。
经常看见很多文章在报道说哪个浏览器更快,其实大部分说的就是JavaScript的渲染速度,而不是页面的载入速度。在网速许可的情况下,其实各个浏览器的页面载入速度差别不大(Opera逊色一些)。那是不是说对比JavaScript的渲染速度其实没有意义?也不是这么说,因为现在JavaScript在页面中的比重会越来越大,越来越多的动态页面开始大量借助JavaScript,比如现在主流的SNS、邮箱、网页游戏,所以JavaScript的渲染速度也是一个很重要的指标。JavaScript的渲染速度越快,动态页面的展示也越快。Opera在JavaScript引擎的跑分上面一直都是很牛逼的,一般来说最新测试版之间PK,Opera基本都会夺冠。
1、Chakra 查克拉,IE9启用的新的JavaScript引擎。
2、SpiderMonkey / TraceMonkey / JaegerMonkey
SpiderMonkey应用在Mozilla Firefox 1.0-3.0,TraceMonkey应用在Mozilla Firefox 3.5-3.6版本,JaegerMonkey应用在Mozilla Firefox 4.0及后续的版本。
3、V8 应用于Chrome、傲游3。
4、Nitro 应用于Safari 4及后续的版本。
5、Linear A/Linear B/Futhark/Carakan
Linear A应用于Opera 4.0-6.1版本,Linear B应用于Opera 7.0~9.2版本,Futhark应用于Opera 9.5-10.2版本,Carakan应用于Opera 10.5及后续的版本。
6、KJS KHTML对应的JavaScript引擎。
多核浏览器
多核浏览器,即有多个内核的浏览器,目前主要是指双核浏览器。
浏览器为啥要双核?这样的概念是在大家对IE使用的Trident内核落后于主流,稳定性、浏览速度大幅落后于Firefox、Opera、Chrome等第三方选手,,但是受限于国外国内网站、在线支付对于第三方浏览器的支持非常差,所以就有人提出了双核浏览器的概念,建立一个兼容性网址库,自动帮助用户在IE内核与第三方浏览器内核进行切换。傲游3首先提出了这一概念,但是最快推出稳定成品的是搜狗浏览器,依靠快速改进获取了不少用户的青睐。而后傲游3推出,腾讯测试中的QQ浏览器5也采用了双核浏览,就连360都意欲借助Chromium的东风开发双核浏览器,之前收购的凤凰工作室具备这方面的开发经验。
一时间仿佛双核浏览变成了时尚名词,在理想很唯美现实很残酷的情况下,我们创造了双核浏览器这样的概念让性能与兼容性兼得。这是一个很好的折衷解决方案,但同时也只是一个临时解决方案,第一现在IE9已经大幅提升了性能、功能和体验,对于HTML5的支持完成度也颇为可观,在微软一反常态大幅改进IE浏览器性能的情况下,双核浏览器想要改进用户浏览体验的愿望很可能落空,因为IE的体验也很好。第二如果国内网站、在线支付改进了对标准第三方浏览器的支持,事实上这是一种大趋势,那么在这种情况下采用双核概念更是费力不讨好。
最终的结果就是IE和Firefox、Opera、Chrome等第三方浏览器站在同一起跑线,而双核浏览器由于要同时维护两个内核的开发,维护一个不断更新的网址兼容性数据库,最终的结果就是开发资源被大幅浪费,产品开发完成度大大降低。所以未来最好的选择,选择一个喜欢的内核进行开发,例如Webkit,结合自己的理念和优势进行深度开发,以退为进才是制胜之道。