浏览器渲染原理以及优化

一、浏览器访问网页时候,做了这几件事:

  1. DNS解析
  2. TCP三次握手链接
  3. HTTP客户端请求和服务端响应
  4. 客户端渲染

前三步散扯请猛戳---这里---
本文主要散扯第四步

二、客户端渲染有以下几步:

  1. HTML 代码解析为 DOM,CSS 代码解析为 CSSOM(CSS Object Model)。
  2. 将 DOM 和 CSSOM 合成一棵渲染树(render tree);
  3. 根据渲染树布局,计算出渲染树的布局(layout);
  4. 将渲染树绘制到屏幕。

注意

  • 以上几步,不一定按照顺序依次执行的,有时候解析每结束,页面就出现了内容。
  • render tree 构建前提必须有CSSOM 以及 DOM,所以先生成CSSOM 和 DOM
webkit渲染引擎流程
1) 那么问题来了,什么是DOM树(选看)?
  • DOM树全称Document Object Model(文档对象模型),它是用来呈现以及与任意XML和HTML交互的API,DOM 是载入到浏览器中的文档模型,以节点树的形式来表现文档,每个节点代表文档的构成部分(例如:页面元素、字符串或注释等等)。
2) 那么问题又来了,什么是CSSOM树?
  • CSSOM是一组允许用JavaScript操纵CSS的API。 它是继DOM和HTML API之后,又一个操纵CSS的接口,从而能够动态地读取和修改CSS样式。

1、解析HTML,CSS,生成DOM树、CSSOM树

将 HTML 解析成 DOM 树,经历一下过程:

  • 编码:将 HTML 原始字节数据转成文件指定编码的字符。
  • 令牌化:浏览器会根据 HTML 规范将字符串转换成各种令牌
    • 什么是令牌:将<html> <body> <div> 这些分割转化成具有特殊意义的一组规则。令牌记录了开始和结束,如果<body>令牌开始与结束中间有<div>令牌,<div> 的父节点是<body>,这就为DOM树形提供了基础
  • 生成对象:将每个令牌转化成定义其属性和规则的对象——节点对象,所有节点对象组成的就是DOM树

CSS 解析成 CSSOM 和 HTML 差不多,CSS 也是具有层级关系,比如:div p {color:red;} div 和 p 就具有父子关系,在给p标签渲染样式的时候,首先去寻找父标签有div的,然后才采取此样式渲染,这也是优化重点,尽量用类名选择器写样式,因为使用标签选择器,浏览器要在大量的标签中进行筛选,速度慢,相同类名量少有利于筛选

构建DOM树的流程,字节 -- 字符 -- 令牌 -- 节点对象 -- 文档对象模型。

解析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树构建过程
  • 当遇到link标签的时候,停止解析HTML,获取对应路径下的css文件

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

    将 CSS 解析成 CSSOM

    CSSOM树

注意

  • HTML在解析生成DOM树的时候,可能会因为CSS和JS加载导致HTML停止解析生成DOM树,这就是渲染阻塞(优化重点),什么是渲染阻塞以及如何优化,请继续往下瞅瞅...
  • 为什么是DOM树,因为HTML标签具有父子关系,树形结构能清晰描述节点之间的关系
  • 当 HTML 解析器被脚本阻塞时,解析器虽然会停止构建 DOM,但仍会识别该脚本后面的资源,并进行预加载。

2、DOM 和 CSSOM 合成一棵渲染树(render tree)

  • DOM和CSSOM是独立的对象,并不能直接渲染到页面,需要将DOM和CSSOM结合在一起,这就是渲染树
渲染树
*   浏览器从DOM的根节点开始遍历每个可见节点并从CSSOM找到对应的css样式规则并应用

3. 根据渲染树布局,计算出渲染树的布局(layout)

  • css布局采用的是盒模型的思维模型来表示节点与节点之间的位置关系,盒模型包括:外边距(margin)、内边距(padding)、边框(border)、内容(content)。每个节点都是一个小盒子
  • 从渲染树的根节点开始遍历根据屏幕的大小确切到每个节点的位置

4. 将渲染树绘制到屏幕

  • 渲染树布局计算完成之后,浏览器立即发出Paint SetupPaint事件,将渲染树绘制到屏幕上

参考:

浏览器渲染过程与性能优化

【干货】十分钟读懂浏览器渲染流程

浏览器环境概述

MDN Web 文档

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

推荐阅读更多精彩内容