简述浏览器渲染

前端设计工程师重在设计网站,只有了解了浏览器的渲染方式,才能在发现问题的同时更好的定位,便于网站的优化。

浏览器工作的大致流程

如图:

image.png

根据上图,简单的分析一下:
1、浏览器会解析三个东西:

a. HTML/SVG/XHTML,Webkit有三个C++的类对应这三类文档,解析这三种文件会产生一个DOM Tree。
b. CSS 解析CSS会产生CSS Rule Tree。
c. JavaScript,脚本,主要是通过DOM API和CSSOM API来操作DOM Tree和CSS Rule Tree。

2、解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule Tree 来构造 Rendering Tree。

a. Rendering Tree 渲染树并不等同于DOM树,因为一些像Header或display:none的东西就没必要放在渲染树中了。
b. CSS 的 Rule Tree主要是为了完成匹配并把CSS Rule附加上Rendering Tree上的每个Element。也就是DOM结点。也就是所谓的Frame。
c. 然后,计算每个Frame(也就是每个Element)的位置,这又叫layout和reflow过程。

3、最后通过调用操作系统Native GUI的API绘制。

渲染

流程:

  1. 计算CSS样式
  2. 构建Render Tree
  3. Layout-定位坐标和大小,是否换行,或者其他属性
  4. 绘画

Reflow和Repaint

当JS修改了CSS属性,或者手动修改的CSS属性导致layout时,涉及到两个概念,Reflow和Repaint。

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

显然,Reflow的成本比Repaint的成本要高得多。下面列举一些高成本的动作:

a. 当增加、删除、修改DOM结点时,会导致Reflow或Repaint
b. 当移动DOM的位置,或是搞个动画的时候。
c. 当修改CSS样式的时候。
d. 当Resize窗口的时候(移动端没有这个问题),或是滚动的时候。
e. 当修改网页的默认字体时。

基本上,Reflow的原因如下:

a. Initial。网页初始化的时候。
b. Incremental。一些Javascript在操作DOM Tree时。
c. Resize。其些元件的尺寸变了。
d. StyleChange。如果CSS的属性发生变化了。
e. Dirty。几个Incremental的reflow发生在同一个frame的子树上。

尽量减少Reflow的操作:

a. 不要一条一条地修改DOM的样式。与其这样,还不如预先定义好css的class,然后修改DOM的className。
b. 把DOM离线后修改。
c. 不要把DOM结点的属性值放在一个循环里当成循环里的变量。
d. 尽可能的修改层级比较低的DOM。
e. 为动画的HTML元件使用fixed或absoult的position
f. 千万不要使用table布局。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 互联网不断高速发展的今天,使用浏览器浏览页面几乎已经变成日常必做事项了,那么你了解浏览器是怎么把一堆枯燥的代码变成...
    抱着熊喵啃什么阅读 366评论 0 0
  • 看到这个标题大家一定会想到这篇神文《How Browsers Work》,这篇文章把浏览器的很多细节讲得很细,而且...
    光小月阅读 720评论 0 4
  • 1)浏览器会解析三个东西:一个是HTML/SVG/XHTML,事实上,Webkit有三个C++的类对应这三类文档。...
    24_Magic阅读 266评论 0 2
  • 首先,我们应该知道,浏览器会解析三个东西: 一个是HTML/SVG/XHTML,事实上,Webkit有三个C++的...
    李博洋li阅读 289评论 0 0
  • 首先,看一张图片: 首先是解析:1)这是一个解析的过程,浏览器会解析三个东西:一个是HTML/SVG/XHTML,...
    osborne阅读 350评论 0 0