浏览器渲染原理以及优化

2019-12-20  本文已影响0人  zackxizi

一、浏览器访问网页时候,做了这几件事:

  1. DNS解析
  2. TCP三次握手链接
  3. HTTP客户端请求和服务端响应
  4. 客户端渲染

前三步散扯请猛戳---这里---
本文主要散扯第四步

二、客户端渲染有以下几步:

  1. HTML 代码解析为 DOM,CSS 代码解析为 CSSOM(CSS Object Model)。
  2. 将 DOM 和 CSSOM 合成一棵渲染树(render tree);
  3. 根据渲染树布局,计算出渲染树的布局(layout);
  4. 将渲染树绘制到屏幕。

注意

  • 以上几步,不一定按照顺序依次执行的,有时候解析每结束,页面就出现了内容。
  • render tree 构建前提必须有CSSOM 以及 DOM,所以先生成CSSOM 和 DOM
webkit渲染引擎流程
1) 那么问题来了,什么是DOM树(选看)?
2) 那么问题又来了,什么是CSSOM树?

1、解析HTML,CSS,生成DOM树、CSSOM树

将 HTML 解析成 DOM 树,经历一下过程:

CSS 解析成 CSSOM 和 HTML 差不多,CSS 也是具有层级关系,比如:div p {color:red;} div 和 p 就具有父子关系,在给p标签渲染样式的时候,首先去寻找父标签有div的,然后才采取此样式渲染,这也是优化重点,尽量用类名选择器写样式,因为使用标签选择器,浏览器要在大量的标签中进行筛选,速度慢,相同类名量少有利于筛选

构建DOM树的流程,字节 -- 字符 -- 令牌 -- 节点对象 -- 文档对象模型。

解析HTML成DOM树栗子:

<html>
  <head>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link href="style.css" rel="stylesheet">
    <title>Critical Path</title>
  </head>
  <body>
    <p>Hello <span>web performance</span> students!</p>
    <div><img src="awesome-photo.jpg"></div>
  </body>
</html>
DOM树构建过程

注意

  • HTML在解析生成DOM树的时候,可能会因为CSS和JS加载导致HTML停止解析生成DOM树,这就是渲染阻塞(优化重点),什么是渲染阻塞以及如何优化,请继续往下瞅瞅...
  • 为什么是DOM树,因为HTML标签具有父子关系,树形结构能清晰描述节点之间的关系
  • 当 HTML 解析器被脚本阻塞时,解析器虽然会停止构建 DOM,但仍会识别该脚本后面的资源,并进行预加载。

2、DOM 和 CSSOM 合成一棵渲染树(render tree)

渲染树
*   浏览器从DOM的根节点开始遍历每个可见节点并从CSSOM找到对应的css样式规则并应用

3. 根据渲染树布局,计算出渲染树的布局(layout)

4. 将渲染树绘制到屏幕

参考:

浏览器渲染过程与性能优化

【干货】十分钟读懂浏览器渲染流程

浏览器环境概述

MDN Web 文档

上一篇 下一篇

猜你喜欢

热点阅读