资讯专栏INFORMATION COLUMN

浏览器渲染原理及流程

陆斌 / 944人阅读

摘要:几乎是无法避免的例如树状目录的折叠,展开,实质上是元素的显示与隐藏等,都将引起浏览器的,鼠标划过,点击,只要这些行为引起了页面上的某些元素的占位面积,定位方式,边距等属性的变化,都会引起它的内部,周围甚至整个页面的重新渲染。

渲染引擎简介

目前常用的浏览器:
Firefox . chrome . safari 是基于两种渲染引擎构建的,Firefox使用Geoko,是Mozilla自主研发的渲染引擎,Safari和Chrome都使用webkit.

渲染主流程

概念解释
DOM Tree:浏览器将HTML解析成树形的数据结构.
CSS Rule Tree:浏览器将CSS解析在树形的数据结构.
Render Tree:DOM和CSSOM(CSS Object Model:CSS对象模型)合并后生成Render Tree.
layout:有了Render Tree,浏览器已经能知道网页中有哪些节点,各个节点的CSS的定义以及他们的从属关系,从而去计算出每个节点的屏幕中的位置.
painting:按照算出来的规则,通过显卡,把内容画到屏幕上.
reflow(回流):当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染,称此为回退的过程,叫reflow.reflow会从这个root frame开始递归往下,依次计算所有的结点几何尺寸和位置。feflow几乎是无法避免的.
例如:树状目录的折叠,展开,实质上是元素的显示与隐藏等,都将引起浏览器的reflow,
鼠标划过,点击,只要这些行为引起了页面上的某些元素的占位面积,定位方式,边距等属性的变化,都会引起它的内部,周围甚至整个页面的重新渲染。
repaint(重绘):改变某个元素的背景色,文字颜色,边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变.

注意点:
1.display:none的节点不会被加入Render Tree,而visibility:hidden则会,所以如果某个节点最开始是不显示的,设为display:none是最好的
2.display:none会触发reflow,而visibility:hidden只会触发repaint,因为位置没有发生变化.
3.有些情况下,比如修改了元素的样式,浏览器不会立刻reflow和repaint一次,而是会把这样的操作积攒一批,然后做一次reflow,这又叫异步reflow或增量异步reflow,但是有些情况,如resize窗口,改变了页面默认的字体等,对于这些操作,浏览器会马上进行reflow

主流程
渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。基本流程为:
解析HTML以构建DOM树 -> 解析CSS构建CSSOM -> 将DOM树与CSSOM树合并,构建Render树 -> 布局render树 -> 绘制render树

来看看webkit的流程:

接下来是Gecko的流程:
Gecko里把格式化好的可视元素称做“桢树”(Frame tree),每一个元素就是一个桢,webkit使用的是渲染树的术语,渲染树由渲染对象组成,webkit里使用layout表示元素的布局,Gecko则称为reflow。webkit使用attachment来链接DOM节点与可视化信息以构建渲染树。一个非语义上的小差别就是Gecko在HTML与DOM树之间有一个附加的层,称作"content sink",是创建DOM对象的工厂.

虽然Webkit与Gecko使用的术语略微不同,但是这个过程是基本相同的,如下:
1.浏览器会将HTML解析成一个DOM树,DOM树构建过程是一个深度遍历过程,当前节点的所有子节点都构建好后才会去构建当前节点的下一个兄弟节点.
2.将CSS解析成CSS Rule Tree.
3.根据DOM和CSSOM来构造Render Tree,Render tree不等于DOM Tree,因为像Header或display:none的东西没有必要放在渲染树中.
4.有了Render Tree,浏览器已经能知道网页中有哪些节点,各个节点的CSS定义以及他们的从属关系,下一步操作称之为layout,顾名思义就是计算出每个节点在屏幕中的位置.
5.下一步就是绘制,即遍历render树,并使用UI后端层绘制每个节点。
注意:上述这个过程是逐步完成的,为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容.

此文章参考此链接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/114574.html

相关文章

  • 览器渲染原理流程

    摘要:几乎是无法避免的例如树状目录的折叠,展开,实质上是元素的显示与隐藏等,都将引起浏览器的,鼠标划过,点击,只要这些行为引起了页面上的某些元素的占位面积,定位方式,边距等属性的变化,都会引起它的内部,周围甚至整个页面的重新渲染。 渲染引擎简介 目前常用的浏览器:Firefox . chrome . safari 是基于两种渲染引擎构建的,Firefox使用Geoko,是Mozilla自主研...

    z2xy 评论0 收藏0
  • 览器渲染原理流程

    摘要:渲染主流程渲染引擎首先通过网络获得所请求文档的内容,通常以分块的方式完成。回流当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫。有了,浏览器已经能知道网页中有哪些节点各个节点的定义以及他们的从属关系。 渲染主流程渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基本流程: 解析html以构建dom树...

    BLUE 评论0 收藏0
  • 览器渲染原理流程

    摘要:渲染主流程渲染引擎首先通过网络获得所请求文档的内容,通常以分块的方式完成。回流当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫。有了,浏览器已经能知道网页中有哪些节点各个节点的定义以及他们的从属关系。 渲染主流程渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基本流程: 解析html以构建dom树...

    ysl_unh 评论0 收藏0
  • 览器渲染原理流程

    摘要:渲染主流程渲染引擎首先通过网络获得所请求文档的内容,通常以分块的方式完成。回流当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫。有了,浏览器已经能知道网页中有哪些节点各个节点的定义以及他们的从属关系。 渲染主流程渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基本流程: 解析html以构建dom树...

    Jenny_Tong 评论0 收藏0
  • 18年求职面经总结

    摘要:年求职面经及总结我的求职之路差不多走到尽头了感觉真是精疲力尽了把这大半年的经历和面试总结写下来希望能给和我一样在求职路上煎熬的人一点帮助先说背景微电子科学与工程专业学过两门和相关的课程语言和单片机这个专业的唯一好处就是大部分人并不知道这个专 18年求职面经及总结 我的求职之路差不多走到尽头了,感觉真是精疲力尽了.把这大半年的经历和面试总结写下来,希望能给和我一样在求职路上煎熬的人一点帮...

    zhangwang 评论0 收藏0

发表评论

0条评论

陆斌

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<