study:brower frameworks

浏览器架构:

浏览器最核心的任务就是对HTML代码进行解释以及显示Web服务器的执行结果,承担这项任务的核心软件也被称为浏览器的“排版引擎(Engine,也称为网页渲染引擎)”,引擎的上一个逻辑层则是浏览器的“用户界面(UI)”,这两者结合起来构成一个完整的“浏览器(Browser)”。其中,引擎承担最核心的任务,它的交互对象是互联网中的Web服务器,浏览器采用何种标准、兼容性如何便完全取决于它,网页打开速度也很大程度上决定于引擎;用户界面则直接面向使用者,包括视觉外观、菜单/工具栏布局、按钮等与操作相关的元素由它界定。这两者只是松散的耦合关系:一个引擎可以采用多种不同的用户界面,衍生出多种不同的浏览器—由于引擎相同,这些浏览器在核心功能方面高度一致;反过来,一个用户界面也可以对应多种不同的引擎,不过这些产品虽然拥有共同的外观和操作方式,但在兼容性、性能和功能方面可能大有不同。目前,活跃于市场上的浏览器引擎主要有Trident/Tasman、Gecko、Presto、KHTML等四种,采用Trident/Tasman引擎的浏览器只有微软的Internet Explorer(Windows版和Mac版);采用Gecko引擎的包括Netscape 6/7、Mozilla、Mozilla Firefox及许多Firefox衍生型浏览器产品,Gecko在源代码层面上完全开放;采用Presto引擎的暂时只有Opera一种(7.0版以后),它具有核心精简、速度快等优点,拥有不少忠实的用户;而采用KHTML引擎的浏览器包括KDE桌面环境下的Konqueror和苹果Mac OS X平台下的Safari。

study:brower frameworks
study:brower frameworks
 
 



firefox:

参考链接:http://www.iplaysoft.com/browsers-engine.html ;http://www.iefans.net/liulanqi-neihe-jiexi/ ;

                      http://kb.cnblogs.com/page/129756;http://www.jianshu.com/p/df97d3b866d5

浏览器的主要构成:

1.用户界面

2.浏览器引擎(the browser engine)--- 用来查询及操作渲染引擎的接口;

3.渲染引擎(the  rendering engine)--- 显示请求的内容;

4.网络 --- 用来完成网络调用,例如 HTTP 请求;

5.UI 后端 --- 用来回执类似组合框以及对话框等基本组件;

6.JS 解释器 --- 解释执行JS 代码;

7.数据存储 --- 属于持久层 ,浏览器或许会在本地保存各种数据,比如cookie


   下图表示浏览器的主要组件:

study:brower frameworks


渲染引擎(rendering engine)

即浏览器内核,(发现有的讲 浏览器内核=渲染引擎+JS引擎....)

rendering engine   负责取得网页的内容(HTML, XML, 图片等),整理讯息(加入CSS),计算网页的显示方式,然后输出到显示器或打印机。

渲染主流程:

渲染引擎首先通过网络获得请求文档的内容,通常以8K分块的方式完成。

渲染引擎获取内容之后的基本流程:

解析 html 构建 DOM 树  --->构建render树 --->布局render树 ---> 绘制render树

study:brower frameworks

但是不同的浏览器内核对网页的语法解释不同,导致渲染效果也不同。(PS:浏览器渲染解析的过程,参考:http://www.cnblogs.com/cnwebdeveloper/articles/2234423.html 以及 http://www.jianshu.com/p/e141d1543143?utm_campaign=maleskine&utm_content=note&utm_medium=pc_author_hots&utm_source=recommendation----过程很详细)


要搞清楚浏览器内核是什么,首先应该先搞清楚浏览器的 构成。简单来说浏览器可以分为两部分,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。

JS引擎

JavaScript最初由网景公司的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。以它为基础,制定了ECMAScript标 准。他的起源并不是如《Javascript高级程序设计》书中所述,是Brendan Eich自主发明的。(参考aimingoo的考证文章)JavaScript在浏览器的实现中还必须含有DOM和BOM。Web浏览器一般使用公共 API来创建主机对象来负责将DOM对象反射进JavaScript。


浏览器内核实现原理

渲染流程如下所示:

study:brower frameworks

Mozilla架构设计:界面和实现分离。采用标记语言,JavaScript,C++来开发。JSEngine就是指SpideMonkey,Layout就是指Gecko。Mozilla的一个关键部分是XPCOM和NSPR。

study:brower frameworks

Webkit的处理流程:

study:brower frameworks浏览器内核的优缺点



Deriving 参考架构

基于两个不同的浏览器的源码和可利用的文档,我们得出了浏览器的参考架构。我们挑选了两个成熟的浏览器实现,对每一个浏览器,基于领域知识和可利用文档,提出了概念架构。
study:brower frameworks
通过使用QLDX****工具包,从每个系统的源码中抽出了具体的架构,并用于改善概念架构。然后基于改善的概念架构提出了参考架构,并且通过另外两个浏览器的实现来验证它。我们得出的参考架构如图 - 2所示。它由8个子系统加上它们之间的依赖组成:(1) User Interface; (2)Browser Engine, 一个可嵌入组件,提供查询和操作Rendering Engine的高层接口(Android中的WebView); (3) Rendering Engine, 负责HTML文档的解析和布局; (4)网络子系统; (5)JavaScritp解释器; (6) XML解析器; (7) Display Backend, 提供绘制界面的API(8) Data Persistence, 存储与浏览回话相关的各种数据。
下面详细讨论Mozilla的架构。
Mozilla的关键设计目标是:支持web标准,支持跨平台,快速网页渲染。与参考架构对应的Mozilla的概念架构如图-3所示。
study:brower frameworks
User Interface被分成两个子系统,其中的一部分可以被Mozilla suit中的其它应用程序使用,例如mail/news客户端。Mozilla profile机制提供了data persistence,它用来存储高层数据,例如书签,低层数据,例如网页缓存。Mozilla的渲染引擎比其它浏览器的更大更复杂。原因之一是,它具备出色的对不规则和不完整HTML解析和渲染的能力。另一个原因是它支持跨平台的User Interface。UI由平台独立的Extensible User Interface Language(XUL)编写, XUL又由适应组件映射到特定平台的库。这一点是和其它浏览器不同的,它们直接使用与平台相关的显示和控件库。