博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器渲染的过程
阅读量:6916 次
发布时间:2019-06-27

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

在讨论页面渲染性能的时候,经常会听到这几个词“重绘” “回流” “重排”。

回流和重排都是 Reflow的不同翻译(叫法)
重绘对应Repaint,重新绘制的意思。

webkit浏览器的渲染过程

Gecko(firefox)浏览器的渲染过程

从图上可以看出来我们熟知的Reflow的说法源于ff,webkit这个过程称之为layout(计算布局),意思大概差不多吧。

浏览器的工作大致流程

从这个过程中可以了解到浏览器渲染主要有这么几步

  1. 解析HTML/XHTML/SVG 生成DOM tree,解析CSS生成CSS rule tree,解析script脚本

  2. 浏览器引擎通过DOM tree和css rule tree来构造render tree

  3. 调用系统的GUI绘图

几个值得关注的点:

  1. render tree不完全包含dom tree的内容,head或者display:none的元素不会出现在render tree中

  2. reflow/layout

  3. reflow/layout必定会repaintrepaint不一定会reflow/layout

  4. css rule tree的生成过程

  5. Repaint——屏幕的一部分要重画,比如某个CSS的背景色变了。但是元素的几何尺寸没有变。

    Reflow——意味着元件的几何尺寸变了,我们需要重新验证并计算Render Tree。是Render Tree的一部分或全部发生了变化。这就是Reflow,或是Layout。(HTML使用的是flow based layout,也就是流式布局,所以,如果某元件的几何尺寸发生了变化,需要重新布局,也就叫reflow)reflow 会从<html>这个root frame开始递归往下,依次计算所有的结点几何尺寸和位置,在reflow过程中,可能会增加一些frame,比如一个文本字符串必需被包装起来。

参考:

如果对这块知识感兴趣的话,建议去读下这篇文章,比较长,讲的很细致,比如Gecko和webkit在渲染上的一些差异,生成树(dom tree/css render tree)的一些具体算法什么的。

转载地址:http://qhicl.baihongyu.com/

你可能感兴趣的文章
VUE devtools 调试工具安装 让vue飞起来
查看>>
LNMP之memcached实现tomcat群集(三)
查看>>
我的友情链接
查看>>
Android IPC进程间通讯机制
查看>>
无损音乐资源
查看>>
对SpringAop的思考之基于cglib的动态代理
查看>>
Linux5.3双网卡绑定虚拟成一块网卡
查看>>
轻松获取格林尼治Linux时间戳
查看>>
java 执行cmd、shell 、exe 返回结果
查看>>
linux之iptables详解及配置(一)
查看>>
struts2 通过action返回json
查看>>
DHCP
查看>>
python 中的if __name__ == 'main':
查看>>
各网站平台API接口整理
查看>>
以修改字体为例谈Android的listView开发优化
查看>>
addLoadEvent(func) 不管在页面加载完毕执行多少个函数,都应付自如
查看>>
我的友情链接
查看>>
Motion Builder 2016时间控制区的学习
查看>>
NoSQL——MongoDB基础
查看>>
Apache Arrow官方文档-内存结构
查看>>