博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器渲染原理、回流和重绘
阅读量:5814 次
发布时间:2019-06-18

本文共 849 字,大约阅读时间需要 2 分钟。

  hot3.png

浏览器渲染原理

浏览器向服务器请求到了HTML文档后便开始解析,产物是DOM(文档对象模型),如果有css,会根据css生成CSSOM(CSS对象模型),然后再由DOM和CSSOM合并产生渲染树,有了渲染树,知道了所有节点的样式,便根据这些节点以及样式计算它们在浏览器中确切的大小和位置,这就是布局。最后把节点绘制到浏览器上。

  • css的加载和解析不会阻塞html文档的解析
  • css的解析会阻塞js的执行,必须等到CSSOM生成后才能执行js
  • js的执行会阻塞html文档的解析
  • html一边解析一边显示
  • css必须完全解析完毕才能进入生成渲染树环节

创建DOM树—创建CSSOM树—执行脚本—生成渲染树—生成布局—绘制

重绘

当页面元素样式改变不影响元素在文档流中的位置时(如background-color,border-color,visibility),浏览器只会将新样式赋予元素并进行重新绘制操作。

回流

当改变的操作响应文档内容或者结构,或者元素位置时,就会触发回流。有以下几种情况:

  • DOM操作(对元素的增删改、顺序变化等)
  • 内容变化,包括表单区域内的文本变化
  • css属性的更改或者重新计算
  • 增删样式表内容
  • 修改class属性
  • 浏览器窗口变化(滚动或缩放)
  • 伪类样式激活(:hover等)

浏览器优化渲染

浏览器本身能够进行优化,尽可能减少重绘和回流。

一个position为absolute或fixed的元素更改,只会影响本身及子元素,而static元素则会影响后面所有元素。

JavaScript执行时,浏览器会缓存所有变化,然后一次性全部绘制。(读取元素属性会引起强制回流)。

我们可以进行的优化:

  • 样式表放在head标签中,脚本放在body结束前。
  • 简化并优化css选择器。(选择器是从右到左匹配)
  • DOM节点保存在一个变量中,避免重复获取。
  • 修改元素样式时,更改其class属性更好。

转载于:https://my.oschina.net/cc4zj/blog/3005803

你可能感兴趣的文章
Webpack入门教程三十
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Kali linux virtualbox rc=1908 错误解决办法
查看>>
linux软件包管理之三(源代码安装)
查看>>
数据库三范式是什么?
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>
九叔Xen App测试报告
查看>>
Apache配置
查看>>
Ext gridPanel 单元格数据的渲染
查看>>
Android SDK 的下载代理
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
LNMP一键安装
查看>>
Linux 目录结构及内容详解
查看>>
startx命令--Linux命令应用大词典729个命令解读
查看>>
华为3026c交换机配置tftp备份命令
查看>>
Oracle命令导入dmp文件
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>