前端开发那些事WEB前端程序开发让前端飞

游览器渲染浅析

2018-04-23  本文已影响69人  3624d4286e87

前提知识

游览器构成

ylq.png

游览器内核

解析前的工作

  1. DNS域名解析
  2. 建立TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求
  5. 返回响应结果
  6. 关闭TCP连接
  7. 浏览器解析

关键渲染路径

浏览器从最初接收请求来的HTML、CSS、javascript等资源,然后解析、构建树、渲染布局、绘制,最后呈现给客户能看到的界面这整个过程——简单来说,就是对游览器渲染过程的描述。

渲染步骤

  1. 解析html,生成dom树
  2. 解析css,生成cssom树
  3. 将dom树和cssom树合并,生成渲染树
  4. 遍历渲染树,开始布局和计算
  5. 绘制渲染树,显示到屏幕

渲染图示

以webkit渲染引擎为例


xr.png

渲染过程

解析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.png

解析css,生成cssom树

body { font-size: 16px }
p { font-weight: bold }
span { color: red }
p span { display: none }
img { float: right }
css.png

将dom树和cssom树合并,生成渲染树

xrs.png

渲染树与dom树

遍历渲染树,开始布局和计算

绘制渲染树,显示到屏幕

在绘制阶段,浏览器会立即发出Paint Setup与Paint事件,开始将渲染树绘制成像素,绘制所需的时间跟CSS样式的复杂度成正比,绘制完成后,用户就可以看到页面的最终呈现效果了。

关键点

重绘/重排/回流

重绘(replaint)——屏幕的一部分重画,不影响整体布局,比如某个CSS的背景色变了,但元素的几何尺寸和位置不变。
重排(relayout)——意味着元件的几何尺寸变了,我们需要重新验证并计算渲染树。
回流(reflow)——Gecko中布局的称谓,同时也是重排的别称,是指渲染树的一部分或全部发生了变化。

阻塞问题

现代浏览器总是并行加载资源——当html解析器被脚本阻塞时,解析器虽然会停止构建dom,但仍会识别该脚本后面的资源,并进行预加载

css阻塞dom渲染

js阻塞dom解析

css阻塞js执行

动态插入js和css时

改变js阻塞的方式

普通图层和复合图层

描述

absolute和硬件加速的区别

复合图层的作用

一般一个元素开启硬件加速后会变成复合图层,可以独立于普通文档流中,改动后可以避免整个页面重绘,提升性能。但是尽量不要大量使用复合图层,否则由于资源消耗过度,页面反而会变的更卡

如何变成复合图层(硬件加速)

硬件加速时请使用index

优化手段

针对html

针对css

针对js

针对引入位置

针对资源载入

参考资料

上一篇下一篇

猜你喜欢

热点阅读