浏览器运行原理

浏览器运行原理

一、浏览器简介
浏览器指可以显示网页服务器或者文件系统的HTML文件(标准统一标记语言的一个应用)内容,并让用户与这些文件交互的一种软件。

浏览器主要功能:向服务器发出请求,在浏览器窗口中展示您选择的网络资源。这里所说的资源一般指HTML文档,也可是PDF,图片或其他类型。资源的位置由用户使用的url(统一资源标符)指定。

浏览器按照引擎分类:
1)Trident引擎:IE;
2)Webkit引擎:Chrome(28版本后基于blink,blink是webkit的一个分支),Safari;
3)Gecko引擎:Firfox;
4)Presto引擎:早期Opera采用,后用webkit引擎。

目前,主流浏览器有五种:IE,Firefox,Safari,Chrome,Opera

二、浏览器主要组件。

1、用户界面:包括用来输入url的地址栏、后退/前进按钮、书签目录、用于刷新及暂停当前加载文档的刷新,暂停按钮、用于到达主页的主页按钮,也就是你所看到的除了用来显示你所请求页面的主窗口之外的其他部分。
2、浏览器引擎:用来查询及操作渲染引擎的接口。
3、渲染引擎:用来显示请求的内容,如,如果请求内容为html,它负责解析html及css,并将解析后的结果显示出来。
4、网络:用来完成网络调用,如http请求,它具有平台无关的接口,可在不同平台上工作。
5、UI后端:用来绘制类似组合选择框及对话框等基本组件,具有不特定与某个平台的通用接口,底层使用操作系统的用户接口。
6、JS解释器:用来解释执行js代码。
7、数据存储:属于持久层,浏览器需要在硬盘中保存类似cookie的各种数据,HTML5定义了web database技术,这是一种轻量级完整的客户端存储技术。

三、浏览器内核工作原理简介

1、渲染引擎
渲染引擎职责就是渲染,即在浏览器窗口中显示所请求的内容。默认下渲染引擎可显示html。xml文档及图片,也可借助插件(一种浏览器扩展)显示其他类型数据,如PDF阅读器插件,可显示PDF格式。

渲染主流程
渲染引擎首先通过网络获得所请求的文档内容(常以8k分块方式完成),取得内容后,渲染引擎正式开始工作。基本流程如下:
1)解析html并构建DOM树
2)构建render树(渲染树)
解析外部css文件及style标签中的样式信息。这些样式信息及html中的可见性指令将被用来构建render树,render树由一些包含颜色,大小等属性的矩形组成,他们将被按照正确的顺序显示到屏幕上
3)布局render树
确定每个节点在屏幕上的确切坐标
4)绘制render树。
即遍历render树,并使用ui后端层绘制每个节点
注意:这个过程是逐步完成的,为更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成后再构建和布局渲染树。解析完一部分内容就显示一部分内容,同时可能还在通过网络下载其余内容。

2、解析,DOM树
解析
解析一个文档即将其转换为具有一定意义的结构(编码可以理解的东西)。解析的结果通常是表达文档结构的节点树,称解析树或语法树。

文法
解析基于文档依据的语法规则(文档的语言或格式)。每种可被解析的格式必须具有由词汇及语法规则组成的特定的文法,成为上下文无关文法。人类语言不具有这一特性,因此不能被一般的解析技术解析。

解析器
解析可分为两个子过程:语法分析,词法分析。

语法分析:对语言应用语法规则。

词法分析:将输入分解为符号,符号是语言的词汇表(基本有效单元的集合)。对于人类语言来说,它相当于我们字典中出现的所有单词。

解析器一般将工作分配给两个组件–词法分析器(有时也叫分词器)负责将输入分解为合法的符号,解析器则根据语言的语法规则分析文档结构,从而构建解析树,词法分析器知道怎么跳过空白和换行之类的无关字符。

解析过程是迭代的,解析器从词法分析器处取到一个新的符号,并试着用这个符号匹配一条语法规则,如果匹配了一条规则,这个符号对应的节点将被添加到解析树上,然后解析器请求另一个符号。如果没有匹配到规则,解析器将在内部保存该符号,并从词法分析器取下一个符号,直到所有内部保存的符号能够匹配一项语法规则。如果最终没有找到匹配的规则,解析器将抛出一个异常,这意味着文档无效或是包含语法错误。

转换
很多时候,解析树并不是最终结果。解析一般在转换中使用——将输入文档转换为另一种格式。编译就是个例子,编译器在将一段源码编译为机器码的时候,先将源码解析为解析树,然后将该树转换为一个机器码文档。

解析器类型
两种基本的解析器:自顶向下解析(查看语法的最高层结构并试着匹配其中一个),自底向上解析(从输入开始,逐步将其转换为语法规则,从底层规则开始直到匹配高层规则)

自动化解析:解析器生成器这个工具可以自动生成解析器,只需要指定语言的文法——词汇表及语法规则,它就可以生成一个解析器。

HTML解析器
将html标识解析为解析树。
html文法定义:W3C组织制定规范定义了HTML的词汇表和语法。
html不能简单用解析所需的上下文无关语法来定义。

浏览器为html定制了专属的解析器。html5规范中描述了这个解析算法,算法包括两个阶段——符号化及构建树。符号化是词法分析的过程,将输入解析为符号,html的符号包括开始标签、结束标签、属性名及属性值。符号识别器识别出符号后,将其传递给树构建器,并读取下一个字符,以识别下一个符号,这样直到处理完所有输入。

树的构建算法
在树的构建阶段,将修改以Document为根的DOM树,将元素附加到树上。每个由符号识别器识别生成的节点将会被树构造器进行处理,规范中定义了每个符号相对应的Dom元素,对应的Dom元素将会被创建。这些元素除了会被添加到Dom树上,还将被添加到开放元素堆栈中。这个堆栈用来纠正嵌套的未匹配和未闭合标签,这个算法也是用状态机来描述,所有的状态采用插入模式

解析结束时的处理
浏览器将文档标记为可交互的,并开始解析处于延时模式中的脚本——这些脚本在文档解析后执行。文档状态将被设置为完成,同时触发一个load事件。

浏览器容错
浏览器修复了无效内容并继续工作。

CSS解析
css属于上下文无关文法,可以用前面所描述的解析器来解析。Css规范定义了css的词法及语法文法。

Webkit使用Flex和Bison解析生成器从CSS语法文件中自动生成解析器。

js引擎
一个专门处理JS脚本的虚拟机,专门设计来解释和执行的 JavaScript 代码。 JS引擎会加载你的源代码,把它分解成字符串,把这些字符串转换成编译器可以理解的字节码,然后执行这些字节码。不同浏览器有不同的JS引擎

四、前端处理流程简介
1、输入url
2、查看浏览器缓存,看是否有缓存,如果有缓存,继续查看缓存是否过期,如果没有过期,直接返回缓存页面,如果没有缓存或者缓存过期,发送一个请求。
3、浏览器解析url地址,获取协议、主机名、端口号和路径。
4、获取主机ip地址过程(1)浏览器缓存(2)主机缓存(3)hosts文件(4)路由器缓存(5)DNS缓存(6)DNS递归查询
5、浏览器发起和服务器的TCP连接,执行三次握手
6、三次握手连接后,浏览器发送一个http请求(这部分是重点,请查询相关资料,详细了解http协议关于请求格式和重要的几个请求头字段含义)。
7、服务器收到请求,转到相关的服务程序,期间可能需要连接并操作数据库(主要分get和post请求)
8、服务器看是否需要缓存,服务器处理完请求,发出一个响应(这部分也是重点,请查询资料了解http响应头各个字段的含义)
9、服务器并根据请求头包含信息决定是否需要关闭TCP连接(如需关闭,则需要四次挥手过程)
10、浏览器对接收到的响应进行解码
11、浏览器解析收到的响应并根据响应的内容(假如是HTML文件)进行构建DOM树,构建render树,渲染render树等过程
12、处理嵌入的其他资源如css文件、js文件、图片文件、音视频等文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值