zoukankan      html  css  js  c++  java
  • 理解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


  • 相关阅读:
    Sending post
    <<the not so short introduction to Latex2e >> 读书笔记
    Latex 书签中文乱码解决方案
    VisualSVN迁移到其他服务器 子曰
    C#遍历DataSet中数据的几种方法总结 子曰
    Extjs formpanel加载数据的两种方式 子曰
    向老销售取经,学来的一点软件销售技巧 子曰
    extjs 实现 NumberField 即时计算 子曰
    Ext.form.DateField简单用法及日期范围控制 子曰
    解决.aspx中插入浮动广告不滚动问题 子曰
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313856.html
Copyright © 2011-2022 走看看