理解WebKit和Chromium: 浏览器综述
转载请注明出处:http://blog.csdn.net/milado_nju/
# 浏览器简介
浏览器发展到今天还是很令人吃惊的,这很大程度上得益于互联网的快速发展和新的技术不断涌现。浏览器的核心是渲染引擎,通常也称为浏览器的内核,其是将文本,图片等信息渲染成图像,这也是浏览器的主要功能。
现代浏览器的始祖应该是1993发布的Mosaic,其领导者Marc Andreessen也就是Netscape浏览器的创始人。刚开始,其功能很简单,也就是能渲染简单的静态HTML元素,没有JavaScript,没有CSS,更没有现在功能丰富的各种能力。后来,这些技术逐渐被引入Netscape浏览器并被加以实现。
受Mosaic浏览器的深刻影响,微软于1995年推出了Internet Explorer(以下简称为IE)浏览器,开始第一次浏览器大战,后来大家都知道了,就是IE获得了空前的成功,这导致了后来它裹足不前,很长时间没有更新和推进。而Netscape凤凰重生,创立了一个基金会,开发了著名的Mozilla Firefox。2005年,苹果的渲染引擎WebKit开源,这拉开了一个新的序幕,从此基于WebKit的浏览器遍地开花,不仅包括PC市场,也包括了逐步崛起的移动市场。随后,Google于2008年发布了基于WebKit的Chrome浏览器,很快深受用户的喜爱,市场份额逐步上升。
目前,对于PC市场而言,三大主流的浏览器是MicrosoftIE、Mozilla Firefox和Google Chrome,他们占据了PC市场超过了90%的浏览器份额,其对应的渲染内核分别是Trident,Gecko和WebKit(现在是Blink)。
对于移动市场来说,就是另外一个情形了。基于WebKit内核的浏览器占据了绝对垄断的地位,这是因为占据移动市场主导地位的操作系统是苹果的iOS和Google的Android,而它们的默认浏览器都是基于WebKit内核的。对于中国市场来说,Android上有很多定制的浏览器,例如UC,腾讯,百度,360等,其中主要基于AndroidWebView(这是一个嵌入式的编程接口,以后会详细介绍)开发,所以从内核角度来说,它们同Android默认浏览器并无什么大的不同。不过,它们中的一些也开始基于WebKit定制自己的内核,修改其行为以便更好适应自己的需求。
#支持的操作系统
就三大浏览器来说,Chrome支持的平台是最多的,基本上覆盖了桌面和移动上的主流操作系统,其次是Firefox,IE垫底,具体如下图表格所示:
|
Chrome |
Firefox |
IE |
Windows |
Y |
Y |
Y |
Mac |
Y |
Y |
N |
Linux |
Y |
Y |
N |
Android |
Y |
Y |
N |
iOS |
Y |
Y |
N |
Windows phone |
N |
N |
Y |
对于那些三者都不支持的或者非主流的操作系统,这里就不再列出来了。
就浏览器所使用的内核来说,WebKit支持的操作系统当然也是最多的,基本上所有现有的操作系统都支持,其次是Gecko,垫底的依然是IE。
|
WebKit |
Gecko |
Trident |
Windows |
Y |
Y |
Y |
Mac |
Y |
Y |
N(4.0后) |
Linux |
Y |
Y |
N |
Android |
Y |
Y(but not work for android-x86) |
N |
iOS |
Y |
N |
N |
Windows phone |
N |
N |
Y |
BlackBerry |
Y |
N |
N |
Tizen |
Y |
N |
N |
Symbian |
Y |
N |
N |
特别指出的是,这里WebKit是广义上的WebKit,而不是仅仅指Chrome所使用的WebKit部分。
#内核特性
一个浏览器内核无非需要以下几个主要部分,如HTML/CSS解析器,网络处理,JavaScript引擎,2D/3D图形引擎,多媒体支持等等
|
WebKit(chromium) |
Gecko |
Trident |
JavaScript引擎 |
V8 |
SpiderMonkey |
JScript/Chakra |
2D图形引擎 |
Skia |
Cairo |
GDI |
3D图形引擎 |
OpenGL, OpenGLes, D3D |
OpenGL, OpenGLes, D3D |
D3D |
视频 |
Windows Media Framework, FFmpeg, openmax |
Windows Media Framework
|
Windows Media Framework,gstreamer |
#浏览器特性
浏览器的共同特征这里不想赘述,例如书签管理,历史记录管理,设置,开发者工具,下载管理等这些基本能力。下面介绍浏览器中所涉及的一些重要特征:
进程架构:
安全机制:包含用户的数据和本地信息,例如URL黑名单机制,沙箱模型等
嵌入本地代码的能力: 浏览器能够运行本地代码的能力,例如chrome的native Client和IE的activeX
书签,历史记录等用户数据同步: 书签的云端存储实现多个操作系统或者终端的统一体验。
|
Chrome |
Firefox |
IE |
进程架构 |
不同网页,不同进程 |
单一进程 |
不同网页,不同进程 |
安全机制 |
沙箱模型,URL黑名单机制 |
黑名单机制 |
黑名单机制 |
嵌入本地代码的能力 |
NativeClient,NPAPI, Chrome extension |
NPAPI, 复杂的支持编写Firefox extension的能力 |
ActiveX,NPAPI |
书签,历史记录等用户数据同步: |
Google的同步服务 |
Firefox的同步服务 |
IE8目前没有看到,后面应该会加入该项功能 |
在中国的浏览器市场上,还有一个有趣的现象就是所谓的双核浏览器,其本质是使用主流的浏览器内核来兼顾兼容性和性能问题,常见的做法是使用Trident来保持网页的兼容性,使用WebKit内核来提高性能和新的HTML5特性。
# 对标准的支持
目前而言,Chrome基本上是走在了支持HTML5标准的前面,Firefox其次,IE垫底。但是IE也在加大对标准的支持,这是个非常好的消息。
下面是各个浏览器对HTML5标准的支持情况,可以使用html5test.com(检查浏览器支持HTML5功能的著名网站)来测试,支持的标准越多,得分越高。
|
Chrome |
Firefox |
IE |
浏览器版本 |
26 |
20 |
10 |
得分(满分500) |
468 |
394 |
320 |
# 用户代理(user agent)
用户代理是个很奇怪的东西,其作用是用来表示浏览器的身份,因而互联网的内容供应商能够知道发送请求的浏览器是什么,它能够支持什么样的功能。因此,网页内容提供商便可以为不同的浏览器发送不同的网页内容,例如通常为chrome的桌面版和Android版会发送不通的网页以适应屏幕和操作系统的差别。
最初Mozilla是设置了自己的用户代理值,例如“Mozilla/1.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101Firefox/4.0.1”,这个含义表明这是Mozilla的windows版,使用Gecko引擎的firefox浏览器。所以,互联网的内容提供商就发送了特定的网页到浏览器。问题来了,IE发现很多内容提供商传给IE浏览器的内容没有传给Mozilla的丰富。那怎么版呢?看看IE7的用户代理设置了什么你就知道了:“Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)”。这个值表明什么呢?表明这是一个可以和Mozilla兼容的Windows版IE浏览器。这样,内容提供商会根据“Mozilla”字符串信息,发送同Firefox获得的同样的网页内容。
在这之后,风气越来越严重。Safari浏览器也设置了类似的代理,但是其加入了同AppleWebKit, Safari等信息,随着Safari的流行(特别是移动领域),Chrome等浏览器除了包含Mozilla之外,还添加了Safari浏览器的那些信息,导致它越来越长,如下:
Mozilla/5.0 (Linux; Android4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko)Chrome/18.0.1025.133 Mobile Safari/535.19
在Chrome中,你可以给用户代理设置任何自己定义的内容。方法是加入命令行参数--user-agent=”xxx”,或者你也可以打开chrome的开发者工具->设置->用户代理来为每个页面设置,需要的记住是,它们都不会被保存,所以重启后无效。
# 未来
浏览器发展了20年,其能力越来越强,未来浏览器会发展成什么样还非常难说,就目前而言,随着HTML5技术的不断成熟,其中一个重要的方向就是,浏览器厂商已经开始向Web的平台化方向发展,例如FirefoxOS,Chrome OS等。以后将详细介绍。
#参考资料
1. http://baike.baidu.com/view/1369399.htm
2. http://en.wikipedia.org/wiki/Trident_(layout_engine)
3. http://en.wikipedia.org/wiki/Gecko_(layout_engine)
4. http://en.wikipedia.org/wiki/JavaScript
5. http://en.wikipedia.org/wiki/Comparison_of_web_browser_engines
6. http://en.wikipedia.org/wiki/Comparison_of_web_browsers
7. http://www.infoworld.com/d/applications/13-features-make-each-web-browser-unique-119
By yongsheng@chromium.org