浏览器渲染

浏览器渲染

只涉及浏览器客户端渲染

浏览器客户端渲染大体步骤

1.将从服务器获取的HTML文档进行解析、构建成DOM
2.将CSS样式进入载入、解析、构建成CSSDOM

2.5 为每个 DOM Tree 中的元素根据 CSS 的解析结果来确定生成怎样的 renderer

  • 当Webkit需要为HTML元素创建RenderObject的时候,首先StyleResolver负责获取样式信息,(其中选择器就在进行,是从右向左解析,来进行匹配的),并返回RenderStyle对象,RenderStyle对象包含了匹配完的结果样式信息
  • 每个元素可能需要匹配不同来源的规则,依次是浏览器规则集合、用户规则集合和HTML网页中包含的自定义规则集合.这三个规则的匹配方式是类似的,这里以自定义规则匹配为例;
  • 对于自定义规则集合,它先查找ID规则,检测有无匹配的规则,之后依次检测类型规则、标签规则等。如果某个规则匹配上该元素,Webkit把这些规则保存到匹配结果中;
  • Webkit对这些规则进行排序。对于该元素需要的样式属性,Webkit选择从高优先级规则中选取,并将样式属性返回。

3.DOM、CSSDOM 合并形成渲染树
4.根据渲染树进行布局,计算元素的几何信息 (回流)
5.进行绘制渲染(重绘)

阻塞渲染

HTML解析器在解析时,会被资源或脚本所阻塞,但并不会影响后续的资源加载(即虽影响了解析渲染,但不影响资源加载)

1.遇到CSS资源时,在CSSDOM构建完成前,浏览器不会渲染任何已处理的内容;并且浏览器会延迟JavaScript的执行和DOM的构建
2.当遇到script标签时,DOM构建将停止,直到脚本执行完

所以 在html页面,css标签资源通常在前,script标签通常在后
(这也是一种常见的优化首屏加载速度的方法)

回流与重绘

1.回流

计算渲染树树在视窗的位置和大小,这一过程即回流。

1.1何时发生回流:

当页面布局或元素的几何信息发生变化时,就会发生回流

具体涉及到:

  • 页面首次渲染
  • 浏览器窗口大小发生改变
  • 元素尺寸或位置发生改变
  • 元素内容变化(文字数量或图片大小等等)
  • 元素字体大小变化
  • 添加或者删除可见的DOM元素
  • 激活CSS伪类(例如::hover)
  • 查询某些属性或调用某些方法:

一些常用且会导致回流的属性和方法: https://gist.github.com/paulirish/5d52fb081b3570c81e3a

  • clientWidth、clientHeight、clientTop、clientLeft
  • offsetWidth、offsetHeight、offsetTop、offsetLeft
  • scrollWidth、scrollHeight、scrollTop、scrollLeft
  • scrollIntoView()、scrollIntoViewIfNeeded()
  • getComputedStyle()
  • getBoundingClientRect()
  • scrollTo()
1.2关于为何查询某些属性或调用某些方法会导致回流

浏览器对于回流的请求,并不是来一次就执行一次,而是对于回流的请求,先放入一个队列中,当达到一定阈值,就好触发回流,即会合并多次回流请求,改为一次执行。
但发生查询某些属性或调用某些方法时,队列会被强制执行并清空,因为需要获取到实时的DOM的位置信息等

2.重绘

将渲染树的元素绘制出来,这一过程即重绘

2.1何时发生重绘

当元素的样式等信息发生变化但不影响几何位置时,会发生重绘

所以,当发生回流时,一定会发生重绘;当发生重绘时,不一定会发生回流

关于提升性能

在了解了相关渲染的原理后,对于提升性能的优化,可能就有了一些思路。

  • 减少阻塞渲染
  • 减少回流和重绘

对于减少阻塞渲染

可以通过将CSS标签 置前,script标签置后,来实现

减少回流、重绘

  • 在批量操作大量DOM时,可以先创建个documentFragment,在其中进行操作
  • 在查询、调用某些会引起回流的属性或方法时,可以用变量进行缓存,避免多次重复调用
  • css3硬件加速

参考:
1.浏览器的渲染:过程与原理——天方夜
2.前端开发者应知必会:浏览器是如何渲染网页的——余博伦
3.你真的了解回流和重绘吗——腾讯IVWEB团队
4.浏览器的回流与重绘 (Reflow & Repaint)——腰花
5.探究 CSS 解析原理
6.Webkit底层原理(5)--CSS解释器和布局

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

推荐阅读更多精彩内容

  • 浏览器如何渲染网页 要了解浏览器渲染页面的过程,首先得知道一个名词——关键渲染路径。关键渲染路径是指浏览器从最初接...
    oWSQo阅读 32,907评论 5 74
  • 背景(做前端永远也跨不过去了就是性能优化) 公司目前有大量前后端耦合项目,浏览器的首屏加载速度非常的慢,在不段优化...
    天一呀阅读 1,153评论 0 4
  • 一、浏览器如何渲染网页 要了解浏览器渲染页面的过程,首先得知道一个名词——关键路径渲染。关键渲染路径(Critic...
    Srtian阅读 994评论 1 3
  • 一、浏览器渲染的过程简析 关键渲染路径 (Critical Rendering Path)是指与当前用户操作有关的...
    hui树阅读 517评论 1 0
  • 一周一度的 儿童节 欢乐周末又开始啦,一群小朋友要来中心湖搞事情?! 看看他们要干嘛 精心的场地布局设计 每个到...
    Automn阅读 189评论 0 0