浏览器渲染引擎总结

一、主要模块
1.HTML解析器
解析HTML文本的解析器,主要作用是将HTML代码解析成DOM树
2.CSS解析器
级联样式表的解析器,主要作用是为DOM中的各个元素对象计算出样式信息,
从而为计算最后网页的布局提供基础设施
3.Javascript引擎
解析执行javascript脚本,使用javascript代码可以修改网页的内容,
也能修改css的信息.即javascript可以通过DOM,CSSDOM接口来修改
网页内容和样式信息,从而改变渲染结果
4.布局
在DOM树创建完成之后,渲染引擎需要将DOM节点和样式信息结合起来,
计算他们的大小以及位置等布局信息,形成一个可以表达所有信息的内部模型
5.绘图
使用图形库将布局计算后的各个网页节点,绘制成图形结果

二、模块间是如何协同工作的:
1.将网页内容交由HTML解析器,HTML解析器解析它之后构建成一颗dom树,这期间要是遇到js代码则
交给js引擎去处理;如果网页中包含css样式,则交给css解析器去处理.
2.在dom树建立的过程中,渲染引擎接收来自CSS解析器的样式信息.构建一个新的内部模型.
该模型由布局模块来构建
3.最后由绘图模块完成该模型到图形的绘制

三、详细过程:
1.转化: 浏览器从磁盘或网络读取 HTML 的原始字节,浏览器会将这段原始文件按照相应编码规范进行解码
(现在一般为 utf-8)。
2.符号化:根据 W3C 标准转化为对应的符号。
3.DOM 构建:HTML 解析器会解析其中的 tag 标签,生成 token ,
遇到 CSS 或 JS 会发送相应请求。HTML 解析是阻塞主线程的,CSS一般也是阻塞主线程的,
也就是说它们在解析过程中是无法做出响应的。而 JS 手动添加 async 后达到异步加载,
根据 token 生成相应 DOM 树。
4.CSSOM 构建,添加 CSS 样式生成 CSSOM 树。
5.渲染树构建,从 DOM 树的根节点开始,遍历每个可见的节点,给每个可见节点找到相应匹配的 CSSOM 规则,
并应用这些规则,连带其内容及计算的样式。
6.样式计算,浏览器会将所有的相对位置转换成绝对位置等一系列的样式计算。
7.布局,浏览器将元素进行定位、布局。
8.绘制,绘制元素样式,颜色、背景、大小、边框等。
9.合成,将各层合成到一起、显示在屏幕上

四、一些问题:
1.网络的模型是同步的。网页作者希望解析器遇到 script标记时立即解析并执行脚本。
文档的解析将停止,直到脚本执行完毕。(此处是内联 script)
2.dom树的构建是远快于渲染树的
3.dom树与渲染树的构建几乎是同时进行的,只是渲染树的构建基于dom树
4.如果脚本是外部的,那么整个dom树构建 js解析执行过程都会停止,直到从网络同步抓取资源完成后再继续。

预解析(js)
WebKit 和 Firefox 都进行了这项优化。在执行js脚本时,其他线程会解析文档的其余部分,
找出并加载需要通过网络加载的其他资源。通过这种方式,资源可以在并行连接上加载,
从而提高总体速度。请注意,预解析器不会修改 DOM 树,而是将这项工作交由主解析器处理;
预解析器只会解析外部资源(例如外部脚本、样式表和图片)的引用。
这里还是涉及到os的调度算法,时间片轮转概念

5.样式表
另一方面,样式表有着不同的模型。理论上来说,应用样式表不会更改 DOM 树,
因此似乎没有必要等待样式表并停止文档解析。
但这涉及到一个问题,就是脚本在文档解析阶段会请求样式信息。如果当时还没有加载和解析样式,
脚本就会获得错误的回复,这样显然会产生很多问题。这看上去是一个非典型案例,但事实上非常普遍。
Firefox 在样式表加载和解析的过程中,会禁止所有脚本。而对于 WebKit 而言,
仅当脚本尝试访问的样式属性可能受尚未加载的样式表影响时,它才会禁止该脚本。

五、两个事件:
当 onload 事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了。
当 DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。

时间: 2024-10-14 04:08:17

浏览器渲染引擎总结的相关文章

浏览器渲染引擎介绍(备忘)

Trident.Gecko.Presto.WebKit --是4种常见的浏览器内核(1)Trident 是微软的Windows搭载的网页浏览器--Internet Explorer浏览器使用的内核(俗称IE内核)(2)Gecko Gecko是开放源代码.以C++编写的网页排版引擎,目前被Mozilla家族网页浏览器以及Netscape 6以后版本浏览器所使用. 也就是现在的Firefox(3)Presto Presto是一个由Opera Software开发的浏览器排版引擎,目前Opera 7.

浏览器渲染引擎工作原理

浏览器内核包括渲染引擎和JS引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具.它负责取得网页的内容(HTML.XML.图象等等).整理信息(例如加入CSS等),以及计算网页的显示方式然后会输出至显示器或打印机 渲染引擎工作流程 HTML解析器解析DOMM树(解析为DOM树上个节点,同时解析CSS样式) 渲染树结构(具有一定的视觉效果,并按照一定顺序排列在屏幕上) 布局渲染树(为每个节点分配固定坐标) 绘制DOM树(渲染引擎会遍历

浏览器渲染引擎,提高css渲染速度。

一.渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上.默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档. 二.各种渲染引擎我们提到的Firefox, Safari两种浏览器构建于两种渲染引擎之上:Firefox使用Gecko —— Mozilla自家的渲染引擎:Safari 和 Chrome 都使用 Webkit. 最终决定浏览器表现出来的页面效果的差异是:渲染引擎 Rendering Engine(也叫做排版引擎),也

[ 浏览器内核 ] 渲染引擎机制

浏览器内核 浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”.负责对网页语法的解释(如标准通用标记语言下的一个应用HTML.JavaScript)并渲染(显示)网页. 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息.不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同

浏览器的渲染引擎

1.浏览器现在市场上分为:chrome ,firefox, Internet Explorer,Safari,Opera ,其中 chrome,safari ,firefox是部分开源的 2.浏览器主要组成组件 1)用户界面 - 包括地址栏.前进/后退按钮.书签菜单等.除了浏览器主窗口显示的你请求的页面外,其他显示的各个部分都属于用户界面.2)浏览器引擎 - 在用户界面和渲染引擎之间传送指令.3)渲染引擎 - 负责显示请求的内容.如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内

浏览器渲染页面和加载页面机制

为什么有些网站打开的时候会加载会很慢,而且是整个页面同时显示的,而有些网站是从顶到下逐步显示出来的?要搞懂这个可以先从下面这个常规流程开始: 1. 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完). 3. 如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载. 4. 并且在下载后进行解析,解析过程中,停止页面所有往下

从浏览器渲染的角度谈谈html标签的语义化

大家都看过报纸或者杂志的排版,里面最主要的一些概念,就是版面的分割,标题的分级等等,web页面作为一种信息展示的形式,其基本的排版形式是从报纸杂志等传统媒介借鉴过来的,看一看html一些常用的tag就可以知道,比如h1-h6,p,img等等. html的语义化从字面的意思来看,就是你选用的tag要尽可能的符合它适用的场景.为什么要语义化呢?可以从浏览器开始说起,报纸和杂志作为信息的载体是通过印刷机将其呈现在大众面前的,同理html是通过浏览器的界面将其展现在用户面前的.html页面展现在我们面前

浏览器内核、渲染引擎、js引擎

[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: firefox使用gecko引擎 IE使用Trident引擎 2015年微软推出自己新的浏览器,原名叫斯巴达,后改名edge,使用edge引擎 opera最早使用Presto引擎,后来弃用 chrome\safari\opera使用webkit引擎 13年chrome和opera开始使用Blink引擎 js

Rendering Engine 主流的浏览器内核(排版引擎、渲染引擎、解释引擎)有哪几种,分别的特点

一.A web browser engine A rendering engine is software that draws text and images on the screen. The engine draws structured text from a document (often HTML), and formats it properly based on the given style declarations (often given in CSS). Example