理解WebKit和Chromium: 浏览器综述
来源:互联网 发布:清大在线网络教学平台 编辑:程序博客网 时间:2024/05/16 08:04
# 浏览器简介
浏览器发展到今天还是很令人吃惊的,这很大程度上得益于互联网的快速发展和新的技术不断涌现。浏览器的核心是渲染引擎,通常也称为浏览器的内核,其是将文本,图片等信息渲染成图像,这也是浏览器的主要功能。
现代浏览器的始祖应该是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等。以后将详细介绍。
- 理解WebKit和Chromium: 浏览器综述
- 理解WebKit和Chromium: 浏览器综述
- 理解WebKit和Chromium: Chromium硬件加速合成
- 理解WebKit和Chromium: Chromium硬件加速合成
- 理解WebKit和Chromium: Chromium软件渲染
- 理解WebKit和Chromium: Chromium for Android
- 理解WebKit和Chromium: Chromium硬件加速合成
- 理解WebKit和Chromium: Chromium网络栈
- 理解WebKit和Chromium: Chromium网络栈
- 理解WebKit和Chromium: WebKit和Blink
- 理解WebKit和Chromium: 前言
- 理解WebKit和Chromium: 前言
- 理解WebKit和Chromium: 前言
- 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制
- 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制
- 理解WebKit和Chromium: WebKit渲染基础
- 理解WebKit和Chromium: WebKit渲染基础
- 理解WebKit和Chromium: WebKit布局 (Layout)
- LaTex 基本用法
- 10.1 源代码搜索引擎
- 回收站里的文件清空后如何才能恢复
- 程序员必须知道的10大基础实用算法及其讲解
- copy、copy_backward和copy_if的区别
- 理解WebKit和Chromium: 浏览器综述
- ios atomic nonatomic区别
- 基础数据在内存中的存储-C语言
- 基于X86的小型内存Linux操作系统
- climb stair或fibonacci数
- 驱动精灵V8.0去广告绿色版
- Javascript原型链式模型分析
- spring管理 memcached
- url utf-8编码解码