欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浏览器渲染页面流程

程序员文章站 2022-09-10 14:42:37
浏览器步骤: 谈谈阻塞: css: css被视为阻塞渲染的资源,也很好理解,要不然怎么构建render tree, 怎么进行布局处理呀~~ 因此浏览器会等待CSSOM tree构建完毕。 js: script标签会阻塞html解析,因为js可能会改变dom和css,因此浏览器会先解析script,避 ......

浏览器步骤:

  1. 解析html文本,构建dom tree
  2. 歇息css样式表,构建cssom tree
  3. 根据dom tree和 cssom tree 构建render tree
  4. 根据render tree来进行布局处理(layout)
  5. 将页面元素进行绘制(painting)

 

谈谈阻塞:

css: css被视为阻塞渲染的资源,也很好理解,要不然怎么构建render tree, 怎么进行布局处理呀~~ 因此浏览器会等待cssom tree构建完毕。

js: script标签会阻塞html解析,因为js可能会改变dom和css,因此浏览器会先解析script,避免浪费。 要想避免阻塞的话,可使用defer 和 async。

 

谈谈repaint和reflow

repaint: 发生在屏幕的一部分要重新画,比如背景颜色,布局没有改变!,浏览器只需要走第五步。

reflow: 布局发生了改变!浏览器需要重新从layout这一步开始,因为render tree已经变了。多走一步,显然更加耗费性能啦~~

所以呢重点关注会引起reflow的操作:

  • 当你增加、删除、修改dom结点时,会导致reflow或repaint
  • 当你移动dom的位置,或是搞个动画的时候。
  • 当你修改css样式的时候。
  • 当你resize窗口的时候(移动端没有这个问题),或是滚动的时候。
  • 注:display:none会触发reflow,而visibility:hidden只会触发repaint,因为没有发现位置变化。