浏览器内核的解析和对比
要搞清楚浏览器内核是什么,首先应该先搞清楚浏览器的构成。简单来说浏览器可以分为两部分,shell+内核。其中shell的种类相对比较多,内核则比较少。Shell是指浏览器的外壳:例如菜单,工具栏等。主要是提供给用户界面操作,参数设置等等。它是调用内核来实现各种功能的。内核才是浏览器的核心。内核是基于标记语言显示内容的程序或模块。也有一些浏览器并不区分外壳和内核。从Mozilla将Gecko独立出来后,才有了外壳和内核的明确划分。目前主流的浏览器有IE6、IE8、Mozilla、FireFox、Opera、Safari、Chrome、Netscape等。
什么是浏览器内核
浏览器内核又可以分成两部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎。它负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。(参见维基百科)JS引擎则是解析Javascript语言,执行javascript语言来实现网页的动态效果。最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。有一个网页标准计划小组制作了一个ACID来测试引擎的兼容性和性能。内核的种类很多,如加上没什么人使用的非商业的免费内核,可能会有10多种,但是常见的浏览器内核可以分这四种:Trident、Gecko、Presto、Webkit。
Trident又称MSHTML,是微软开发的渲染引擎(包含了Javascript引擎JScript),他已经深入了Windows操作系统的骨髓,例如Windows Media Play,Windows Explorer,Outlook Express等都使用了。目前很多浏览器都使用这个引擎,例如IE,Maxthon(最新版已经不使用)等。
Gecko是C++开发的,Open Source的渲染引擎,包括了SpiderMonkey(Rhino)。主要的使用者有Firefox。
Webkit是苹果公司基于KHTML开发的。他包括Webcore和JavaScriptCore(SquirrelFish,V8)两个引擎。主要的使用者有Safari,Chrome。
Presto由Opera Software公司开始的,用于Opera的渲染引擎。Macromedia Dreamweaver (MX版本及以上)和Adobe Creative Suite 2也使用了Presto的内核。
主流浏览器所使用的内核分类
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等
Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto内核:Opera7及以上
Webkit内核:Safari,Chrome等
Engine |
Creator |
Software license |
Leading application |
Gecko |
Netscape/Mozilla Foundation |
MPL/GNU GPL/GNU LGPL tri-license |
Mozilla Firefox |
KHTML |
KDE |
GNU LGPL |
Konqueror |
Presto |
Opera Software |
Proprietary |
Opera |
Tasman |
Microsoft |
Proprietary |
Microsoft Entourage |
Trident |
Microsoft |
Proprietary |
Internet Explorer |
WebKit (Based on KHTML) |
WebKit Foundation |
GNU LGPL, BSD-style |
Safari, Google Chrome |
JS引擎
JavaScript最初由网景公司的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。以它为基础,制定了ECMAScript标准。他的起源并不是如《Javascript高级程序设计》书中所述,是Brendan Eich自主发明的。(参考aimingoo的考证文章)JavaScript在浏览器的实现中还必须含有DOM和BOM。Web浏览器一般使用公共API来创建主机对象来负责将DOM对象反射进JavaScript。
Trident |
Gecko |
WebKit |
KHTML |
Presto |
||
Name of ECMAScript Engine |
JScript |
Spidermonkey |
JavaScriptCore |
KJS |
linear b/futhark |
|
ECMAScript Version |
Edition 3 |
Yes |
0.6 |
Yes |
Yes |
7.0 |
JavaScript 1.5 extensions |
No |
0.6 |
Yes |
Yes |
7.0 |
|
JavaScript 1.7 extensions |
No |
1.8.1 |
No |
No |
No |
|
JavaScript 1.8 extensions |
No |
1.9 |
No |
No |
No |
浏览器内核实现原理
渲染流程如下所示:
Mozilla架构设计:界面和实现分离。采用标记语言,JavaScript,C++来开发。JSEngine就是指SpideMonkey,Layout就是指Gecko。Mozilla的一个关键部分是XPCOM和NSPR。
Webkit的处理流程:
浏览器内核的优缺点
Trident:这种浏览器内核是IE浏览器用的内核,因为在早期IE占有大量的市场份额,所以这种内核比较流行,以前有很多网页也是根据这个内核的标准来编写的,但是实际上这个内核对真正的网页标准支持不是很好,甚至在2005年,与网页标准制定组织(W3C理事会)所制定的标准发生了脱节,同时 Trident 内核本身的BUG比较多,对一些符合W3C标准的网页代码支持不是很好,这在早期的IE版本中比较明显,比如IE5.5以前(包括IE5.5),其实IE6对W3C标准的支持也不是很好,而我们现在很多人都在使用IE6,事实上它也属于一个比较早的版本。
但是由于IE的高市场占有率,微软也很长时间没有更新Trident内核,这导致了二个结果
1,Trident内核和W3C标准脱节。
2,Trident内核的大量Bug等安全问题没有得到解决,加上一些专家学者公开自己认为IE浏览器不安全的观点,使很多用户开始转向其他浏览器,FF,Opera就是这时期兴起的。
Gecko:这是Firefox 和 Flock 所采用内核,这个内核的优点就是功能强大、丰富,可以支持很多复杂网页效果和浏览器扩展接口,但是代价是也显而易见就是要消耗很多的资源,比如内存。
Presto:Opera 采用的是 Presto内核,Presto内核被称为公认的浏览网页速度最快的内核,这得益于它在开发时的天生优势,在处理JS脚本等脚本语言时,会比其他的内核快3倍左右,缺点就是为了达到很快的速度而丢掉了一部分网页兼容性。
Webkit:Webkit 是 Safari 采用的内核,不过 Safari 是苹果系统下的浏览器(虽然也有windows版,但是比较少),所以只简单介绍一下这个内核的优点和缺点,优点就是网页浏览速度较快,虽然不及 Presto 但是也胜于 Gecko 和 Trident,缺点是对于网页代码的容错性不高,也就是说对网页代码的兼容性较低,会使一些编写不标准的网页无法正确显示。
总结:就浏览器来说,互联网经历了十年的高速发展期,近几年市场上也推出了很多新的浏览器,但是他们并非是采用自主开发的内核,所以浏览器内核本身实际没有实质突破。