渲染机制
- 浏览器渲染基本原理解析 https://mp.weixin.qq.com/s/njwpsI-5T2mewPYjNef0jA
- 浏览器渲染机制 https://www.jianshu.com/p/4bc1a46d7e9a
1. 什么是DOCTYPE及作用
- DTD(document type define,文档类型定义)是一系列的语法规则,用来定义XML或(X)HTML的文件类型。浏览器会使用它来判断文档类型,决定使用何种协议来解析,以及切换浏览器模式
- DOCTYPE是用来声明文档类型和DTD规范的,一个主要的用途是文件的合法性验证。如果文件代码不合法,那么浏览器解析时便会出一些差错
- 常见的DOCTYPE类型有哪些:
- HTML5 <!DOCTYPE html>
- HTML4.01 有严格模式和传统模式
2. 浏览器渲染过程
- 从输入url到得到html的详细过程
- 1)浏览器根据DNS服务器得到域名(url)的IP地址。
- 2)向这个IP的机器发送http(https)请求。
- 3)服务器收到、处理并返回http(https)请求。
- 4)浏览器得到返回的内容。
- 浏览器渲染页面的过程(得到返回内容之后怎么渲染成页面的过程
- 1)解析HTML,生成DOM树(DOM)。
- 2)解析CSS,生成CSSOM树(CSSOM)
- 3)将DOM和CSSOM合并,生成渲染树(Render-Tree)。
- 4)计算渲染树的布局(Layout)
- 5)将布局渲染到屏幕上(Paint)
3.几个关键概念
1)CSS阻塞渲染:
- 由于CSSOM负责存储渲染信息,浏览器就必须保证在合成渲染树之前,CSSOM是完备的,这种完备是指所有的CSS(内联、内部和外部)都已经下载完,并解析完,只有CSSOM和DOM的解析完全结束,浏览器才会进入下一步的渲染。CSS阻塞渲染意味着,在CSSOM完备前,页面将一直处理白屏状态,这就是为什么样式放在head中,仅仅是为了更快的解析CSS,保证更快的首次渲染。
2)JS阻塞页面:
- JS可以操作DOM来修改DOM结构,可以操作CSSOM来修改节点样式,这就导致了浏览器在解析HTML时,一旦碰到script,就会立即停止HTML的解析,也阻塞了其后的CSS解析,整个解析进程必须等待JS的执行完成才能够继续。从性能角度上讲,将script放在页面底部,也就合情合理了
3)重排(Reflow):
- DOM结构中的各个元素都有自己的盒子(模型),这些都需要浏览器根据各种样式来计算, 并根据计算结果将元素放到它该出现的位置,这个过程称之为reflow
- 触发重排(reflow):
- 1、当增加、删除、修改DOM节点时,会导致reflow或repaint
- 2、当移动DOM的位置,或是插入动画的时候
- 3、当修改CSS样式的时候
- 4、当Resize窗口的时候,或是滚动的时候
- 5、当修改网页的默认字体时
当网页Repaint完的时候最好不要修改默认字体,会非常耗性能。(把样式放到head里面)
4)重绘(Repaint):
- 当各种盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来后,浏览器便把这些元素都按照各自的特性绘制了一遍,于是页面的内容出现了,这个过程称之为repaint。
- 触发重绘(Repaint):
- 最小化重绘和重排
- 1.一次性修改样式:减少内联样式使用 样式合并写法
- 2.批量修改DOM:使用文档片段创建一个子树,然后再拷贝到文档中(document.fragment)
- 3.缓存布局信息