了解浏览器渲染网页的每个步骤机制!

了解浏览器渲染网页的每个步骤机制!

我的想法:如果我要构建快速可靠的网站,需要真正了解浏览器渲染网页的每个步骤机制,这样就可以在开发过程中对每个步骤进行优化。 这篇文章是我在较高水平上对端到端过程的学习总结。

好了,废话不多说,我们开始吧。这个过程可以分为以下几个主要阶段:

1、开始解析HTML

2、获取外部资源

3、解析 CSS 并构建CSSOM

4、执行 JavaScript

5、合并 DOM 和 CSSOM 以构造渲染树

6、计算布局和绘制

1.开始解析HTML

当浏览器通过网络接收页面的HTML数据时,它会立即设置解析器将HTML转换为文档对象模型(DOM)

文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。简言之,它会将web页面和脚本或程序语言连接起来。

解析过程的第一步是将HTML分解并表示为开始标记结束标记及内容标记,然后它可以构造DOM。

1.png

2. 获取外部资源

当解析器遇到外部资源(如CSS或JavaScript文件)时,解析器将提取这些文件。 解析器在加载CSS文件时继续运行,此时会阻止页面渲染,直到资源加载解析完(稍后会详细介绍)。

JavaScript 文件略有不同-默认情况下,解析器会在加载 JS 文件然后进行解析同时会阻止对HTML的解析。 可以将两个属性添加到脚本标签中以减轻这种情况:deferasync。 两者都允许解析器在后台加载JavaScript 文件的同时继续运行,但是它们的执行方式不同。 关于这一点后面还会再讲一点,但总的来说:

defer表示文件的执行将被延迟,直到文档的解析完成为止。 如果多个文件具有defer属性,则将按照页面放置的顺序依次执行。


async 意味着文件将在加载后立即执行,这可能是在解析过程中或在解析过程之后执行的,因此不能保证异步脚本的执行顺序。


预加载资源

元素的 rel 属性的属性值preload能够让你在你的HTML页面中 元素内部书写一些声明式的资源获取请求,可以指明哪些资源是在页面加载完成后即刻需要的。

对于这种即刻需要的资源,你可能希望在页面加载的生命周期的早期阶段就开始获取,在浏览器的主渲染机制介入前就进行预加载。这一机制使得资源可以更早的得到加载并可用,且更不易阻塞页面的初步渲染,进而提升性能。


2.png

3.解析CSS并构建CSSOM

你可能很早就知道DOM,但对CSSOM(CSS对象模型)可能听得少,反正我也没听过几次。

CSS 对象模型 (CSSOM) 是树形形式的所有CSS选择器和每个选择器的相关属性的映射,具有树的根节点,同级,后代,子级和其他关系。CSSOM 与 文档对象模型(DOM) 非常相似。两者都是关键渲染路径的一部分,也是正确渲染一个网站必须采取的一系列步骤。

CSSOM 与 DOM一起构建渲染树,浏览器依次使用渲染树来布局和绘制网页。

与HTML文件和DOM相似,加载CSS文件时,必须将它们解析并转换为树-这次是CSSOM。 它描述了页面上的所有CSS选择器,它们的层次结构和属性。

CSSOMDOM的不同之处在于它不能以增量方式构建,因为CSS规则由于特定性而可以在各个不同的点相互覆盖。 这就是CSS 阻塞渲染的原因,因为在解析所有CSS并构建CSSOM之前,浏览器无法知道每个元素在屏幕上的位置。

3.png

4.执行JavaScript

不同的浏览器有不同的 JS 引擎来执行此任务。从计算机资源的角度来看,解析 JS 可能是一个昂贵的过程,比其他类型的资源更昂贵,因此优化它对于获得良好的性能是如此重要。

载入事件

加载的JS和DOM被完全解析并准备就绪后就会 emit document.DOMContentLoaded事件。 对于需要访问DOM的任何脚本,例如以某种方式进行操作或侦听用户交互事件,优良作法是在执行脚本之前先等待此事件。

document.addEventListener('DOMContentLoaded', (event) => {    // 这里面可以安全地访问DOM了});

在所有其他内容(例如异步JavaScript,图像等)完成加载后,将触发window.load事件。

window.addEventListener('load', (event) => {    // 页面现已完全加载});

4.png

5.合并DOM和CSSOM 构建渲染树

渲染树DOMCSSOM的组合,表示将要渲染到页面上的所有内容。 这并不一定意味着渲染树中的所有节点都将在视觉上呈现,例如,将包含opacity: 0visibility: hidden的样式的节点,并仍然可以被屏幕阅读器等读取,而display: none不包括任何内容。 此外,诸如之类的不包含任何视觉信息的标签将始终被忽略。

与 JS 引擎一样,不同的浏览器具有不同的渲染引擎。

5.png

6. 计算布局和绘制

现在我们有了完整的渲染树,浏览器知道了要渲染什么,但是不知道在哪里渲染。 因此,必须计算页面的布局(即每个节点的位置和大小)。 渲染引擎从顶部开始一直向下遍历渲染树,计算应显示每个节点的坐标。

完成之后,最后一步是获取布局信息并将像素绘制到屏幕上。

6.png

原文地址:https://dev.to/jstarmx/how-the-browser-renders-a-web-page-1ahc

作者:James Starkie

译文地址:https://segmentfault.com/a/1190000037650883

更多编程相关知识,请访问:编程学习课程!!

以上就是了解浏览器渲染网页的每个步骤机制!的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1548690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 20:07:09
下一篇 2025年12月21日 20:07:25

相关推荐

  • html是网页文件吗

    html是网页文件,Html文件就是平时我们所说的静态网页文件,是以“.html”或“.htm”扩展名结尾的文件;是直接通过浏览器就能打开浏览的超文本文件。 该方法适用于所有品牌电脑 Html文件就是平时我们所说的静态网页文件,是以“.html”或“.htm”扩展名结尾的文件;是直接通过浏览器就能打…

    2025年12月21日
    000
  • html如何实现点击链接打开一个新窗口

    html实现点击链接打开一个新窗口的方法:可以通过使用a标签的target属性来实现,如【target=”_blank”】。target属性规定了在何处打开链接文档,_blank表示在新窗口中打开链接文档。 本教程操作环境:windows10系统、html5版,该方法适用于所…

    2025年12月21日
    000
  • html获取javascript变量值的方法有哪些

    html获取javascript变量值有如下三种方法: (免费学习视频分享:html视频教程) 方法一:嵌入到html句子中,当html元素使用 var df=newDate(); var year= df.getFullYear() ; document.write(“”+year+” J2EE开…

    2025年12月21日
    000
  • html最外层元素是什么?

    html最外层元素是“html”标签元素,也称为根元素,是所有其他HTML元素(除了“”标签)的容器。“”与“”标签限定了文档的开始点和结束点,在它们之间是文档的头部和主体。 相关推荐:《编程视频课程》 html> 标签告知浏览器这是一个 HTML 文档。 标签是 HTML 文档中最外层的元素…

    2025年12月21日
    000
  • html字体大小怎么设置

    设置html字体大小的方法:1、【font-size】后面加px值的方式;2、使用inherit继承父元素的字体大小;3、设置固定的几个值;4、设置smaller和larger;5、设置百分比的形式。 本教程操作环境:windows10系统、html5版,DELL G3电脑,该方法适用于所有品牌电脑…

    2025年12月21日 好文分享
    000
  • html使用什么来描述网页?

    html使用“标记标签”来描述网页。html(超文本标记语言)是一种用于创建网页的标准标记语言,它包括一系列标记标签,通过这些标签可以将影像、声音、图片、文字动画、影视等内容显示出来。 html使用“标记标签”来描述网页。 HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标…

    2025年12月21日
    000
  • 利用html制作简单的个人简历

    我们先来看一下实现效果: (学习视频分享:html视频教程) html代码: 立即学习“前端免费学习笔记(深入)”; 006.btbg{ text-align:center; } 个人简历 姓名 性别 出生日期 照片 民族 政治面貌 婚姻状况 现所在地 籍贯 学历 毕业学校 专业 学习经历 起止年月…

    2025年12月21日
    000
  • HTML中什么是内联元素?

    在HTML中,内联元素是指display属性为inline的元素;内联元素也叫行内元素,在网页中总是随着文字流出现在“行内”,这些元素不会在它本身之前或之后生成“分隔符”,所以可以出现在另一个元素的内容中,而不会破坏其显示。 (推荐教程:html教程) 根据CSS规范的规定,每一个网页元素都有一个d…

    2025年12月21日
    000
  • 浅谈网页中提升SVG文件可访问性的几种方法

    (推荐教程:html教程) SVG是一种图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。本文就来为大家介绍7个提升网页SVG文件可访问性的方案。 1、作为图片使用的 SVG 文件 如果你的 SVG 是作为  的 src 引入的,务必为  添加 r…

    2025年12月21日
    000
  • html input是什么

    在HTML中,input是一个输入框标签,用于指定用户可以在其中输入数据的输入字段;输入字段可通过多种方式改变,取决于标签内的type属性,例“”就是定义一个单行的文本字段。 (推荐教程:html教程) HTML 标签 标签规定了用户可以在其中输入数据的输入字段。输入字段可通过多种方式改变,取决于 …

    2025年12月21日
    000
  • 怎么在html中插入视频和音频

    插入视频的理想解决方法: HTML5 + + @@@###@@@ (视频教程推荐:html视频教程) 代码如下: @@@###@@@ 插入音频的理想解决方法: 立即学习“前端免费学习笔记(深入)”; @@@###@@@ 下面的例子使用了两个不同的音频格式。Html5  元素会尝试以 mp3 或 og…

    2025年12月21日
    000
  • 利用html+css+js实现简单的点赞效果

    我们在浏览其他网站的文章时,经常可以看到文章尾部有点赞收藏效果,非常有趣。今天我们自己动手来实现该效果。 (学习视频推荐:html视频教程) css样式 .like{ font-size:66px; color:#ccc; cursor:pointer;}.cs{color:#f00;} html内…

    2025年12月21日
    000
  • HTML页面的基本代码结构是什么?

    (推荐教程:html教程) HTML页面的基本代码结构 标题内容 这些由(左尖角号)、内容以及>(右尖角号)组成的叫做标签(tag),三者缺一不可。在 HTML 中,使用包围标签的目的是方便将它们与普通文本进行区分。 上述代码描述的是 HTML 的基本结构,主要使用了 、>、、 以及 等…

    2025年12月21日 好文分享
    000
  • HTML中必须掌握的知识点有哪些

    你是如何理解 HTML 语义化的? 学习视频分享:html视频教程 让页面内容结构化,它有如下优点 1、易于用户阅读,样式丢失的时候能让页面呈现清晰的结构。 立即学习“前端免费学习笔记(深入)”; 2、有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。 3、方便其他设备解析,如盲人阅读器…

    2025年12月21日
    000
  • HTML网页自动跳转的5种方法

    (推荐教程:html教程) 在我们进行网站创建时经常会遇到需要进行网页跳转的情况,本文就来为大家介绍五种网页自动跳转的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 网页自动跳转5种方法: 第一种网页自动跳转方法:meta refresh自动跳转法 立即学习“前端免费学习笔记…

    2025年12月21日
    000
  • html是一种页面什么型语言?

    html是一种页面“描述”型语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。 (推荐教程:html教程) html是一种页面“描述”型语言。 HTML(Hyper Text Mark-up Language)即超文本标记语言或超文本链接标…

    2025年12月21日
    000
  • 一起了解script标签中的async和defer属性

    前端当然要从 HTML 开始,我们来聊聊在 script 标签中加上 async/defer 时的功能及差异。 都明白的道理 我们都知道,浏览器解析 HTML 是一行一行按照顺序向后读取的,在传统的写法中,当浏览器读到 时,便会暂停解析 DOM,同时立即开始下载 中定义的资源,并在下载完成后立刻执行…

    2025年12月21日
    000
  • 怎么在html中实现图片超链接

    在html中实现图片超链接的方法:可以通过将图像元素嵌套在a元素中,使其成为一个链接,如【】。 目的: 对整个一幅图像文件设置超链接 思路: 可以通过将图像元素嵌套在a元素中使其变为一个链接。 立即学习“前端免费学习笔记(深入)”; (学习视频推荐:html视频教程) 语法: @@##@@ 举例: …

    2025年12月21日
    000
  • HTML hr是什么意思

    HTML hr是用于在页面中创建一条水平线的一种标签,在HTML中,标签没有结束标签,其使用语法如“这是段落这是段落”。 推荐:《HTML视频教程》 HTML 标签 定义和用法 标签在 HTML 页面中创建一条水平线。 立即学习“前端免费学习笔记(深入)”; 水平分隔线(horizontal rul…

    2025年12月21日
    000
  • html中行内元素与块级元素的区别是什么

    html中行内元素与块级元素的区别是:1、块级元素总是在新行开始,行内元素和其他元素在同一行;2、块级元素的高度、行高可控制,行内元素的高度、行高部分可改变;3、块级元素的宽度与内容无关,行内元素的宽度只与内容有关。 块级元素: (学习视频分享:html视频教程) 1、总是在新行上开始,占据一整行;…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信