页面渲染流程

1.  浏览器把获取到的HTML代码解析成1个DOM树,HTML中的每个tag都是DOM树中的1个节点,根节点就是我们常用的document对象。DOM树里包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等。

2. 浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体,在解析的过程中会去掉浏览器不能识别的样式,比如IE会去掉-moz开头的样式,而FF会去掉_开头的样式。

3、DOM Tree 和样式结构体组合后构建render tree, render tree类似于DOM tree,但区别很大,render tree能识别样式,render tree中每个NODE都有自己的style,而且 render tree不包含隐藏的节点 (比如display:none的节点,还有head节点),因为这些节点不会用于呈现,而且不会影响呈现的,所以就不会包含到 render tree中。注意 visibility:hidden隐藏的元素还是会包含到 render tree中的,因为visibility:hidden 会影响布局(layout),会占有空间。根据CSS2的标准,render tree中的每个节点都称为Box (Box dimensions),理解页面元素为一个具有填充、边距、边框和位置的盒子。

4. 一旦render tree构建完毕后,浏览器就可以根据render tree来绘制页面了。
浏览器页面渲染流程是一个复杂但有序的过程,它确保了网页内容能够正确显示在用户的屏幕上。整个流程可以分为以下几个主要阶段: ### 解析HTML并构建DOM树 浏览器首先接收HTML文档的字节流,将其转换为字符流,然后进行词法分析生成令牌(Token),接着这些令牌被解析成节点(Node),最终形成文档对象模型(DOM)树。DOM树包含了HTML文档的结构化表示,每个元素、属性和文本都是DOM树中的一个节点。 ### 解析CSS并构建CSSOM树 与此同时,浏览器解析CSS样式表,构建CSS对象模型(CSSOM)树。CSSOM树描述了样式规则及其优先级,它是样式计算的基础。CSSOM树与DOM树是独立构建的,这意味着CSS的解析不会直接阻塞HTML的解析,但两者最终需要结合以确定页面上每个元素的视觉表现。 ### 合成渲染树 接下来,DOM树和CSSOM树被结合起来生成渲染树(Render Tree)。渲染树只包含需要显示的节点,并且每个节点都带有计算后的样式信息。这个阶段不会包含那些不可见的元素,例如`<head>`部分的内容或者设置了`display: none`的元素。 ### 布局计算(Layout) 布局计算阶段也被称为“重排”(Reflow),在这个过程中,浏览器根据渲染树的结构来计算每个元素的确切位置和大小。这是个相对耗时的过程,因为每个元素的位置都可能影响到其他元素的位置。 ### 分层 为了提高渲染效率,现代浏览器会对页面进行分层处理。每个图层可以独立渲染,并且可以在GPU上进行合成,从而利用硬件加速提升性能。当元素的状态发生变化时,如动画效果,浏览器可能会创建新的复合图层。 ### 绘制页面(Paint) 在绘制阶段,浏览器会将每个图层的内容转化为实际的像素点,这个过程称为“重绘”(Repaint)。重绘是将元素的可视部分绘制到屏幕上的过程,它发生在布局计算之后。 ### 回流与重绘 如果页面上的某些部分发生了变化,比如元素的尺寸或位置改变,那么就需要重新进行布局计算和绘制,这可能导致回流和重绘的发生。频繁的回流和重绘会影响页面性能,因此应尽量减少这类操作。 ### 性能优化策略 为了优化页面渲染性能,开发者可以采取多种措施,例如避免使用table布局,使用`transform`代替`top`/`left`动画,将频繁变化的元素设为独立图层,以及通过内联关键CSS、异步加载JavaScript、代码分割等方法来加速解析过程。此外,还可以利用HTTP/2多路复用、资源压缩、CDN加速等网络层优化技术来提升加载速度。 ### 示例代码 下面是一个简单的HTML示例,展示了基本的DOM结构: ```html <html> <head> <title>渲染示例</title> </head> <body> <div class="container"> <h1>Hello World</h1> <p>浏览器渲染原理</p> </div> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值