(译)理解浏览器的关键渲染路径

当浏览器接收到从服务器发送过来的HTML页面信息,在将其绘画渲染到屏幕上之前会有许多的步骤要做。浏览器绘制页面需要做的这一系列行为我们称为关键渲染路径

了解CRP的知识对于你理解如何提升网站渲染效率非常有用,CRP总共有六步:

1.构建DOM树

2.构建CSSOM树

3.运行JavaScript

4.创建渲染树

5.生成布局

6.绘制页面

(译)理解浏览器的关键渲染路径_第1张图片

1. 构造DOM树

DOM(Document Object Model)树是一个表示全解析过的HTML页面的对象。从根节点元素开始,会逐个创建页面中的每个元素/文本节点。元素包裹的其他元素会被作为子元素节点,并且每个节点会包含其全部的属性。例如:标签会有href属性与其节点关联。 举个:chestnut::

  
  
  Understanding the Critical Rendering Path
  
  
  
  

Understanding the Critical Rendering Path

Introduction

Lorem ipsum dolor sit amet

Copyright 2017

上述HTML会被解析成如下的DOM树

HTML很好的特点在于不需要全部加载完成页面所有内容才来显示网页,可以解析完成一部分内容呈现一部分。但是,其他资源比如CSS和JavaScript会阻止页面的渲染

2. 构建CSSOM树

CSSOM(CSS Object Model)是一个表示各个DOM相关样式的对象,它的表示方法与DOM相似,但是各个节点存在相关的样式值。不论其是显示、还是隐式声明这些样式。 在style.css文件中,我们有如下样式:

body { font-size: 18px; }

header { color: plum; }  
h1 { font-size: 28px; }

main { color: firebrick; }  
h2 { font-size: 20px; }

footer { display: none; } 

接着会创建如下的CSSOM树:

(译)理解浏览器的关键渲染路径_第3张图片

CSS一直被认为是一种渲染阻塞资源。因此如果在首次加载时没有全部解析资源内容就无法进行渲染树的构建。与HTML不同,CSS具有层叠继承的特性,因此不能进行局部加载。定义在文档后面的样式属性会覆盖或更改写之前定义的同类属性。即,如果如果CSS可以进行局部加载的话会导致出现加载错样式的情况。因此表明,CSS必须全部解析之后才能进行下一步。

如果CSS文件适用于当前设备的话,仅仅只是会阻塞渲染。标签可以接受media属性来指定特定样式宽度的特定媒体查询。如果我们有一个样式表具有orientation:landscape的媒体属性,并且我们查看该页面使用portrait模式,就不会出现资源加载而产生的渲染阻塞情况。

CSS要会导致脚本阻塞,这是由于JavaScript文件必须等待CSSOM构建结束之后才进行加载。

3. 运行JavaScript

JavaScript被认为是解析阻塞资源,这表示当解析HTML文档自身时候会被JavaScript给阻塞掉。

当解析器解析到

可以看关于页面加载时的事件日志,以下是我们获得的:

(译)理解浏览器的关键渲染路径_第5张图片

1.发送请求:发送GET请求index.html

2.解析HTML然后发送请求:开始解析HTML并构建DOM,然后发送GET请求style.css和main.js。

3.解析样式表:根据style.css生成CSSOM

4.执行计算脚本:执行main.js

5.布局:基于HTML的元视窗标签,生成布局

6.绘制页面:绘制网页

原文链接:Understanding the Critical Rendering Path

相关参考文章

  • 前端开发者应知必会:浏览器是如何渲染网页的

你可能感兴趣的:((译)理解浏览器的关键渲染路径)