Web前端基础篇-HTML-04-HTML 渲染流程

今天是5月20号,别人的520是甜蜜、爱情、表白,而老夫的520就是写代码、努力写代码、加班写代码,一入代码深似海,从此爱情是路人。言归正传,老夫要开始装逼啦。


tmpdir__17_9_7_15_04_07.jpg

温馨提示:文章结构如下,可能阅读完需要花费5分钟

HTML的渲染流程分为3个阶段(自己分的)
1、URL访问请求数据阶段
2、浏览器解析渲染
3、页面布局绘制阶段
最后,总结一下渲染过程可以做的性能优化

一、URL访问请求数据阶段

1.用户输入域名地址,浏览器通过URL域名解析访问IP地址

2.发起TCP的3次握手,就是我们熟悉的建立连接,三次握手,报文等等

3.建立TCP连接后,浏览器向服务器发送http请求
这里的http请求有个注意的参数:

User-Agent:产生请求的浏览器类型
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
keep-alive (保持连接)
Authorization: 客户端提供给服务器的认证信息

4.服务端接收到请求开始响应HTTP请求
4.1服务器生成html代码,返回给浏览器
注意:html页面代码可能是经过压缩的
4.2服务返回状态码

1xx: 信息性状态码
e.g:100, 101, 102

2xx: 成功状态码
e.g:200:OK

3xx: 重定向状态码
e.g
301 永久重定向, Location响应首部的值仍为当前URL,因此为隐藏重定向
302 临时重定向,显式重定向, Location响应首部的值为新的URL
304Not Modified 未修改,比如本地缓存的资源文件和服务器上比较时,发现并没有修改,服务器返回一个304状态码, 告诉浏览器,你不用请求该资源,直接使用本地的资源即可

4xx: 客户端错误状态码
e.g 404: Not Found 请求的URL资源并不存在

5xx: 服务器端错误状态码
e.g
500: Internal Server Error 服务器内部错误
502: Bad Gateway 前面代理服务器联系不到后端的服务器时出现
504:Gateway Timeout 这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应

5.浏览器接收到响应的HTML,开始解析
5.1 如果有压缩则首先进行解压处理,紧接着就是页面解析渲染
5.2 遇到js/css/image等静态资源,开始请求html代码中的资源(如js、css、图片等)
5.3 使用keep-alive特性了,建立一次HTTP连接,可以请求多个资源

二、浏览器解析渲染

1.浏览器解析HTML,并构建DOM树

1.1 浏览器采用自上而下的方式解析
1.2 HTML浏览器有专门的html解析器来解析HTML
1.3 遇到样式(link、style)与脚本文件(script)会阻塞解析(可以使用async 或者defer,不会阻塞线程)

注意:
display:none 的元素也会在DOM树中
注释也会在DOM树中
script标签会在DOM树中

2.解析css去构建CSSOM树

2.1 浏览器会解析CSS文件并生成CSS规则树
2.2 每个CSS文件都会被分析成StyleSheet对象,每个对象都包括CSS规则

注意:
CSS解析可以与DOM解析同进行
CSS解析与script的执行互斥
在Webkit内核中进行了script执行优化,只有在JS访问CSS时才会发生互斥

3、构建渲染树Render Tree
通过DOM树和CSS规则树,浏览器就可以通过他们两个构建渲染树

注意:
Render Tree和DOM Tree不完全对应
display: none的元素不在Render Tree中
visibility: hidden的元素在Render Tree中
JavaScript 应尽量少的去影响 DOM 的构建

三、页面布局绘制阶段

3.1.Render Tree 渲染树布局

布局阶段会从渲染树的根节点开始遍历-递归遍历
布局阶段的输出就是我们常说的盒子模型-计算大小和位置

注意
float元素,absoulte元素,fixed元素会发生位置偏移
脱离文档流,其实就是脱离Render Tree

3.2.Rendder Tree 渲染树绘制

浏览器会遍历渲染树,调用渲染器的paint()方法在屏幕上显示其内容
渲染树的绘制工作是由浏览器的UI后端组件完成的

3.3.回流(reflow)

不可避免
只要有交互就存在,就会引起部分页面重新渲染
当render树绘制完成之后,比如JavaScript改变样式或Tab,隐藏,这时候render树就需要重新计算

3.4.重绘(repaint)

当我们改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重绘,但是元素的几何尺寸和位置没有发生改变

注意:
display:none 因为改变组件的大小,会触发reflow
visibility: hidden 不会改变组件占位大小,只会触发repaint
因为reflow不可避免,但是可以减少比如:用transform做形变和位移

四、总结渲染过程可以做的性能优化

1.样式文件应当在 head 标签中,而脚本文件在 body 结束前,这样可以防止阻塞的方式

2.简化并优化CSS选择器,尽量将嵌套层减少到最小

3.尽量减少在 JavaScript 中进行DOM操作

4.修改元素样式时,更改其class属性是性能最高的方法

5.不要使用document.write()这种输出内容的方法,使用现代W3C DOM方法来为现代浏览器处理页面内容

6.DNS查询和解析域名也是消耗时间的,所以要减少对外部JavaScript、CSS、图片等资源的引用,不同域名的使用越少越好

最后,以上总结都是老夫为了方便理解自己总结的内容,其中参考以下资料,创作不易,尊重原著

参考文献链接
https://blog.csdn.net/WuLex/article/details/77850206
https://www.imooc.com/article/40004
https://www.jianshu.com/p/fbe0e9fa45a6/

H5系列
Web前端基础篇-HTML-01-BOM浏览器对象模型
Web前端基础篇-HTML-02-HTML的生命周期
Web前端基础篇-HTML-03-事件处理系统
Web前端基础篇-HTML-04-HTML 渲染流程
Web前端基础篇-HTML5-05-最全本地存储总结
Web前端基础篇-HTML5-06-离线缓存AppCache
Web前端基础篇-HTML5-07-浏览器缓存机制

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