目前的主流浏览器有5个:Internet Explorer、Firefox、Safari、Chrome和Opera浏览器。根据 StatCounter 浏览器统计数据,目前(截止2019 年 5 月)Firefox、Safari 和 Chrome 浏览器的总市场占有率将近 83.66%。因而可知,现在开放源代码浏览器在浏览器市场中占据了很是坚实的部分。
以上5种浏览器因为有着不一样的浏览器内核,形成一样的html页面有着不一样呈现。Internet Explorer的内核是Trident;Firefox的内核是Gecko;Chrome、Safari内核是Webkit;Opera的内核则是Presto。css
咱们先大体看下浏览器渲染关键路径图: html
浏览器从网络或硬盘中得到HTML字节数据后会通过如下流程将字节解析为DOM树:web
<html>
、<body>
、<p>
这样的标签以及标签中的字符串和属性等都会被转化为令牌,每一个令牌具备特殊含义和规则)。下面经过一段HTML代码与配图更好的理解“字节 -> 字符 -> 令牌-> 节点对象 -> 对象模型”这个过程:浏览器
<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="test.png"></div>
</body>
</html>
复制代码
浏览器解析遇到<link>
标签时,浏览器就开始解析CSS,像构建DOM树同样构建CSSOM树。style.css的代码以下:缓存
body { font-size: 16px }
p { font-weight: bold }
span { color: red }
p span { display: none }
img { float: right }
复制代码
在构建了DOM树和CSSOM树以后,浏览器只是拥有2个相互独立的对象集合,DOM树描述的文档结构和内容,CSSOM树描述了对应文档的样式规则,想要渲染出页面,就须要将DOM树、CSSOM树结合在一块儿,构建渲染树。性能优化
渲染树构建好后,浏览器获得了每一个节点的内容与样式,下一步就是须要计算每一个节点在浏览器窗口的确切位置与大小,即layout布局。
布局阶段,从渲染树的根节点开始遍历,采用盒子模型的模式来表示每一个节点与其余元素之间的距离,从而肯定每一个元素在屏幕内的位置与大小。bash
盒子模型:包括外边距(margin),内边距(padding),边框(border),内容(content)。标准盒子模型width/height = content;IE盒子模型width/height = content + padding + border。服务器
当Layout布局完成后,浏览器会当即发出Paint事件,开始讲渲染树绘制成像素,绘制所须要的时间跟CSS样式的复杂度成正比,绘制完成后,用户才能看到页面在屏幕中的最终呈现效果。网络
若是想更详细地体验浏览器渲染流程,可使用Chrome开发者工具中的Performance面板,录制浏览器从请求直到渲染完成的过程,以下图所示: 异步
经过优化渲染关键路径,能够优化页面渲染性能,减小页面白屏时间。
<script>
标签添加异步属性async,这样浏览器的HTML解析就不会被js文件阻塞。<link>
标签时,浏览器就须要向服务器发出请求得到CSS文件,而后才继续构建DOM树和CSSOM树,能够合并全部CSS成一个文件,减小HTTP请求,减小关键资源往返加载的时间,优化渲染速度。今天浏览器渲染过程和优化方案就介绍到这里,你们若是有更多更好的页面性能优化方案能够多多交流,评论区欢迎留言~~