[计算机软件及应用]浏览器内部工作原理

上传人:pu****.1 文档编号:493363439 上传时间:2023-03-21 格式:DOC 页数:32 大小:781.85KB
返回 下载 相关 举报
[计算机软件及应用]浏览器内部工作原理_第1页
第1页 / 共32页
[计算机软件及应用]浏览器内部工作原理_第2页
第2页 / 共32页
[计算机软件及应用]浏览器内部工作原理_第3页
第3页 / 共32页
[计算机软件及应用]浏览器内部工作原理_第4页
第4页 / 共32页
[计算机软件及应用]浏览器内部工作原理_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《[计算机软件及应用]浏览器内部工作原理》由会员分享,可在线阅读,更多相关《[计算机软件及应用]浏览器内部工作原理(32页珍藏版)》请在金锄头文库上搜索。

1、前端必读:浏览器内部工作原理(1)2012-02-01 13:42 icysoul icysoul的博客 我要评论(0) 字号:T | T浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入到你看到google主页过程中都发生了什么。AD:浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入到你看到google主页过程中都发生了什么。将讨论的浏览器今天,有五种主流浏览器IE、Firefox、Safari、Chrome及Opera。本文将基于一些开源浏览器的例子Firefox、 Chrome及Safari,Safar

2、i是部分开源的。根据W3C(World Wide Web Consortium 万维网联盟)的浏览器统计数据,当前(2011年5月),Firefox、Safari及Chrome的市场占有率综合已接近60%。(原文为2009年 10月,数据没有太大变化)因此,可以说开源浏览器已经占据了浏览器市场的半壁江山。浏览器的主要功能浏览器的主要功能是将用户选择得web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括 PDF、image及其他格式。用户用URI(Uniform Resource Identifier 统一资源标识符)来指定所请求资源的位置,在网

3、络一章有更多讨论。HTML和CSS规范中规定了浏览器解释html文档的方式,由W3C组织对这些规范进行维护,W3C是负责制定web标准的组织。HTML规范的最新版本是HTML4(http:/www.w3.org/TR/html401/),HTML5还在制定中(译注:两年前),最 新的CSS规范版本是2(http:/www.w3.org/TR/CSS2),CSS3也还正在制定中(译注:同样两年前)。这些年来,浏览器厂商纷纷开发自己的扩展,对规范的遵循并不完善,这为Web开发者带来了严重的兼容性问题。但是,浏览器的用户界面则差不多,常见的用户界面元素包括: 用来输入URI的地址栏 前进、后退按钮

4、书签选项 用于刷新及暂停当前加载文档的刷新、暂停按钮 用于到达主页的主页按钮奇怪的是,并没有哪个正式公布的规范对用户界面做出规定,这些是多年来各浏览器厂商之间相互模仿和不断改进得结果。HTML5并没有规定浏览器必须具有的UI元素,但列出了一些常用元素,包括地址栏、状态栏及工具栏。还有一些浏览器有自己专有得功能,比如Firefox得下载管理。更多相关内容将在后面讨论用户界面时介绍。浏览器的主要构成High Level Structure浏览器的主要组件包括:1. 用户界面- 包括地址栏、后退/前进按钮、书签目录等,也就是你所看到的除了用来显示你所请求页面的主窗口之外的其他部分2. 浏览器引擎-

5、用来查询及操作渲染引擎的接口3. 渲染引擎- 用来显示请求的内容,例如,如果请求内容为html,它负责解析html及css,并将解析后的结果显示出来4. 网络- 用来完成网络调用,例如http请求,它具有平台无关的接口,可以在不同平台上工作5. UI 后端- 用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口6. JS解释器- 用来解释执行JS代码7. 数据存储- 属于持久层,浏览器需要在硬盘中保存类似cookie的各种数据,HTML5定义了web database技术,这是一种轻量级完整的客户端存储技术图1:浏览器主要组件需要注意的是,不同于

6、大部分浏览器,Chrome为每个Tab分配了各自的渲染引擎实例,每个Tab就是一个独立的进程。对于构成浏览器的这些组件,后面会逐一详细讨论。组件间的通信 Communication between the componentsFirefox和Chrome都开发了一个特殊的通信结构,后面将有专门的一章进行讨论。渲染引擎 The rendering engine渲染引擎的职责就是渲染,即在浏览器窗口中显示所请求的内容。默认情况下,渲染引擎可以显示html、xml文档及图片,它也可以借助插件(一种浏览器扩展)显示其他类型数据,例如使用PDF阅读器插件,可以显示PDF格式,将由专门一章讲解插件及扩展,

7、这里只讨论渲染引擎最主要的用途显示应用了CSS之后的html及图片。渲染引擎 Rendering engines本文所讨论得浏览器Firefox、Chrome和Safari是基于两种渲染引擎构建的,Firefox使用GeokoMozilla自主研发的渲染引擎,Safari和Chrome都使用webkit。Webkit是一款开源渲染引擎,它本来是为linux平台研发的,后来由Apple移植到Mac及Windows上,相关内容请参考http:/webkit.org。主流程 The main flow渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基

8、本流程:解析html以构建dom树-构建render树-布局render树-绘制render树图2:渲染引擎基本流程渲染引擎开始解析html,并将标签转化为内容树中的dom节点。接着,它解析外部CSS文件及style标签中的样式信息。这些样式信息以及html中的可见性指令将被用来构建另一棵树render树。Render树由一些包含有颜色和大小等属性的矩形组成,它们将被按照正确的顺序显示到屏幕上。Render树构建好了之后,将会执行布局过程,它将确定每个节点在屏幕上的确切坐标。再下一步就是绘制,即遍历render树,并使用UI后端层绘制每个节点。值得注意的是,这个过程是逐步完成的,为了更好的用户

9、体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。图3:webkit主流程图4:Mozilla的Geoko 渲染引擎主流程从图3和4中可以看出,尽管webkit和Gecko使用的术语稍有不同,他们的主要流程基本相同。Gecko称可见的格式化元素组成的树为 frame树,每个元素都是一个frame,webkit则使用render树这个名词来命名由渲染对象组成的树。Webkit中元素的定位称为布局,而 Gecko中称为回流。Webkit称利用dom节点及样式信

10、息去构建render树的过程为attachment,Gecko在html和dom树之间 附加了一层,这层称为内容接收器,相当制造dom元素的工厂。下面将讨论流程中的各个阶段。解析 Parsing-general既然解析是渲染引擎中一个非常重要的过程,我们将稍微深入的研究它。首先简要介绍一下解析。解析一个文档即将其转换为具有一定意义的结构编码可以理解和使用的东西。解析的结果通常是表达文档结构的节点树,称为解析树或语法树。例如,解析“2+3-1”这个表达式,可能返回这样一棵树。图5:数学表达式树节点文法 Grammars解析基于文档依据的语法规则文档的语言或格式。每种可被解析的格式必须具有由词汇及

11、语法规则组成的特定的文法,称为上下文无关文法。人类语言不具有这一特性,因此不能被一般的解析技术所解析。解析器-词法分析器 Parser-Lexer combination解析可以分为两个子过程语法分析及词法分析词法分析就是将输入分解为符号,符号是语言的词汇表基本有效单元的集合。对于人类语言来说,它相当于我们字典中出现的所有单词。语法分析指对语言应用语法规则。解析器一般将工作分配给两个组件词法分析器(有时也叫分词器)负责将输入分解为合法的符号,解析器则根据语言的语法规则分析文档结构,从而构建解析树,词法分析器知道怎么跳过空白和换行之类的无关字符。图6:从源文档到解析树解析过程是迭代的,解析器从词

12、法分析器处取道一个新的符号,并试着用这个符号匹配一条语法规则,如果匹配了一条规则,这个符号对应的节点将被添加到 解析树上,然后解析器请求另一个符号。如果没有匹配到规则,解析器将在内部保存该符号,并从词法分析器取下一个符号,直到所有内部保存的符号能够匹配一项 语法规则。如果最终没有找到匹配的规则,解析器将抛出一个异常,这意味着文档无效或是包含语法错误。转换 Translation很多时候,解析树并不是最终结果。解析一般在转换中使用将输入文档转换为另一种格式。编译就是个例子,编译器在将一段源码编译为机器码的时候,先将源码解析为解析树,然后将该树转换为一个机器码文档。图7:编译流程解析实例 Pars

13、ing example图5中,我们从一个数学表达式构建了一个解析树,这里定义一个简单的数学语言来看下解析过程。词汇表:我们的语言包括整数、加号及减号。语法:1. 该语言的语法基本单元包括表达式、term及操作符2. 该语言可以包括多个表达式3. 一个表达式定义为两个term通过一个操作符连接4. 操作符可以是加号或减号5. term可以是一个整数或一个表达式现在来分析一下“2+3-1”这个输入第一个匹配规则的子字符串是“2”,根据规则5,它是一个term,第二个匹配的是“2+3”,它符合第2条规则一个操作符连接两个term, 下一次匹配发生在输入的结束处。“2+3-1”是一个表达式,因为我们已

14、经知道“2+3”是一个term,所以我们有了一个term紧跟着一个操作符及另 一个term。“2+”将不会匹配任何规则,因此是一个无效输入。词汇表及语法的定义词汇表通常利用正则表达式来定义。例如上面的语言可以定义为:INTEGER:0|1-90-9*PLUS:+MINUS:-正如看到的,这里用正则表达式定义整数。语法通常用BNF格式定义,我们的语言可以定义为:expression := term operation termoperation := PLUS | MINUSterm := INTEGER | expression如果一个语言的文法是上下文无关的,则它可以用正则解析器来解析。对上

15、下文无关文法的一个直观的定义是,该文法可以用BNF来完整的表达。可查看http:/en.wikipedia.org/wiki/Context-free_grammar。解析器类型 Types of parsers有两种基本的解析器自顶向下解析及自底向上解析。比较直观的解释是,自顶向下解析,查看语法的最高层结构并试着匹配其中一个;自底向上解析则从输入开始,逐步将其转换为语法规则,从底层规则开始直到匹配高层规则。来看一下这两种解析器如何解析上面的例子:自顶向下解析器从最高层规则开始它先识别出“2+3“,将其视为一个表达式,然后识别出”2+3-1“为一个表达式(识别表达式的过程中匹配了其他规则,但出发点是最高层规则)。自底向上解析会扫描输入直到匹配了一条规则,然后用该规则取代匹配的输入,直到解析完所有输入。部分匹配的表达式被放置在解析堆栈中。StackInput 2 + 3 1term+ 3 - 1term operation3 1expression- 1expression operation1expression 自底向上解析器称为shift reduce 解

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号