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。
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
下图表示浏览器的主要组件:
渲染引擎(rendering engine)
即浏览器内核,(发现有的讲 浏览器内核=渲染引擎+JS引擎....)
rendering engine 负责取得网页的内容(HTML, XML, 图片等),整理讯息(加入CSS),计算网页的显示方式,然后输出到显示器或打印机。
渲染主流程:
渲染引擎首先通过网络获得请求文档的内容,通常以8K分块的方式完成。
渲染引擎获取内容之后的基本流程:
解析 html 构建 DOM 树 --->构建render树 --->布局render树 ---> 绘制render树
但是不同的浏览器内核对网页的语法解释不同,导致渲染效果也不同。(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。
浏览器内核实现原理
渲染流程如下所示:
Mozilla架构设计:界面和实现分离。采用标记语言,JavaScript,C++来开发。JSEngine就是指SpideMonkey,Layout就是指Gecko。Mozilla的一个关键部分是XPCOM和NSPR。
Webkit的处理流程:
浏览器内核的优缺点