浏览器加载解析过程

为了搞清楚js  css到底在页面加载的哪个环节中被执行使用了,就找了一些文章看了下,感觉没有理解的很透彻,但也比之前有更近一步认识。

解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树

上面这个流程是最基本的了,但实际上从文档被请求回来之后,一步步的执行,结合几个比较重要的点,我自己理解如下,若有问题,望指正:

重要点:

  最重要的:渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

  dom的解析是深度遍历,所有子元素遍历完后,在解析下一个兄弟元素

  css的选择符从右到左解析。

所以当文档从上到下解析的时候,

1、若遇到css,则构建css rule tree,

2、若遇到html标签,则构建dom tree,

3、若遇到js,则什么都不干,等js解析执行完成,js可能在此阶段修改dom tree 或css rule tree,浏览器希望等所有的都定下来后,再往下走。

-------以上为构建dom

4、然后等到某一部分内容都解析完成了,比如一个<div>...</div>这里所有的内容都解析完了,就利用这部分内容的相关的dom tree  和 css rule tree 生成一个render树(此过程中会将一些display none的元素干掉),

--------以上为构建render树

5、浏览器开始为每个元素定位

--------以上为布局render树

6、然后通过浏览器的绘制展现实际的元素给用户。

--------以上为绘制render树

7、然后浏览器接着往下执行,在后面的任何地方,若有对之前渲染过的部分有(布局)影响,就reflow之前的布局,重新走一遍流程,若只是对颜色等做了修改,不影响布局,则repain;reflow性能比repain 低。

了解后的启发:

  js要放在最后,

  css选择符从右到左寻找,故尽量使用子选择符 #tp > p{},而不是后代选择符 #tp p,更不要用通配符*

  dom的结构,尽量减少嵌套深度

  对于动画的部分(频繁修改的dom元素),采用脱离文档流的布局(fixed  absoult),避免reflow

  尽量用css类来定义或改变dom元素的样式,而不是直接对dom进行一个个属性设置,减少repain次数

  尽量给图片等元素加上宽高,因为图片请求加载后,浏览器继续渲染,等图片回来后,宽高变了,影响了布局,浏览器不得不对这部分内容进行reflow,

  

  

时间: 2024-10-13 11:44:54

浏览器加载解析过程的相关文章

浏览器加载解析渲染网页原理

浏览器加载网页资源的原理 JS与CSS阻塞 重排与重绘 一.浏览器加载网页资源的原理 1.HTML支持的组要资源类型 在浏览器内核有一个管理资源的对象CachedResource类,在CachedResource类下有很多子类来分工不同的资源管理,这些资源管理子类分别是:  资源  资源管理类  HTML  MainResource ===> CachedRawResource  JavaScript  CachedScript  CSS  CachedCSStyleSheet  图片  Cac

浏览器加载解析渲染(浏览器的工作原理)

浏览器的主要功能:将用户选择的web资源呈现出来.而这,它需要从服务器请求资源,并将其显示在浏览器窗口中.资源的格式通常是html,也包括PDF,image等其他格式.用户用URL(Uniform Resource Identifier统一资源标识符)来指定所请求资源的位置,通过DNS(域名系统(英文:DomainNameSystem,缩写:DNS))查询,将网址转换为IP地址.整个浏览器的工作流程如下: 1.输入URL 2.浏览器查找域名的IP地址 3.浏览器给web服务器发送一个http请求

浏览器加载、解析、渲染的过程

最近在学习性能优化,学习了雅虎军规 ,可是觉着有点云里雾里的,因为里面有些东西虽然自己也一直在使用,但是感觉不太明白所以然,比如减少DNS查询,css和js文件的顺序.所以就花了时间去了解浏览器的工作,有一篇经典的文章<how browsers work> ,讲的很详细,也有中文译本 .不过就是文章有点太长,也讲了一堆东西,还是自己总结一下. 为什么要了解浏览器加载.解析.渲染这个过程? 好,我们先说一下,为什么要了解这些呢?如果想写出一个最佳实践的页面,就要好好了解. 了解浏览器如何进行加载

浏览器加载渲染网页过程解析 (转)

浏览器的工作机制,一句话概括起来就是:web浏览器与web服务器之间通过HTTP协议进行通信的过程.所以,C/S之间握手的协议就是HTTP协议.浏览器接收完毕开始渲染之前大致过程如下: 从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,成功之后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请 求头信息 通过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求之后等待处理,最后向浏览器端发回响应,此时在HTTP协议下,浏览器从服务器接收到 text/html

浏览器加载渲染网页过程解析

浏览器的工作机制,一句话概括起来就是:web浏览器与web服务器之间通过HTTP协议进行通信的过程.所以,C/S之间握手的协议就是HTTP协议.浏览器接收完毕开始渲染之前大致过程如下: 从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,成功之后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请 求头信息 通过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求之后等待处理,最后向浏览器端发回响应,此时在HTTP协议下,浏览器从服务器接收到 text/html

浏览器加载渲染网页过程解析--总结(三)

转自:http://blog.csdn.net/longeremmy/article/details/8030736 1.浏览器加载和渲染html的顺序 1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)3.如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载.4.并且在下载后进行解析,解析过程中,停止页面所有往下元素的

浏览器加载渲染网页过程解析--备用

浏览器的工作机制,一句话概括起来就是:web浏览器与web服务器之间通过HTTP协议进行通信的过程.所以,C/S之间握手的协议就是HTTP协议.浏览器接收完毕开始渲染之前大致过程如下: 从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,成功之后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请 求头信息 通过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求之后等待处理,最后向浏览器端发回响应,此时在HTTP协议下,浏览器从服务器接收到 text/html

浏览器加载渲染网页过程解析(二)

转自:http://blog.csdn.net/longeremmy/article/details/8030736 浏览器的工作机制,一句话概括起来就是:web浏览器与web服务器之间通过HTTP协议进行通信的过程.所以,C/S之间握手的协议就是HTTP协议.浏览器接收完毕开始渲染之前大致过程如下 : 从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,成功之后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请 求头信息 通过HTTP协议向此IP地址所在服务器发起请

浏览器~加载,解析,渲染

昨天为了 了解浏览器是怎么处理(.html..css..js)这些文件,我看了网上的好多资料,这好多资料中,有很多是通过转载.或是转载后加之自己的理解,但是因为自己对专业的词汇理解不好,还有一些作者将不同浏览器的处理过程混着说,总之,看完了,还是有很多疑虑的地方.我先根据昨天了解到的内容总结一下,日后随着学的深了,再回过来补充.2014.11.6 why 为什么要了解浏览器加载.解析.渲染这个过程? 了解浏览器如何进行加载,我们可以在引用外部样式文件,外部js时,将他们放到合适的位置,使浏览器以