理解WebKit和Chromium: 浏览器综述

浏览器简介

浏览器发展到今天还是很令人吃惊的,这很大程度上得益于互联网的快速发展和新的技术不断涌现。浏览器的核心是渲染引擎,通常也称为浏览器的内核,其是将文本,图片等信息渲染成图像,这也是浏览器的主要功能。

现代浏览器的始祖应该是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等。以后将详细介绍。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值