首页 > 其他分享 >HTML、DOM 和 BOM:深入解析网页加载和渲染过程

HTML、DOM 和 BOM:深入解析网页加载和渲染过程

时间:2024-05-31 09:29:31浏览次数:14  
标签:网页 DOM HTML BOM 浏览器 解析

在网页开发中,HTML、DOM 和 BOM 是三个关键但各自不同的概念,它们在网页加载和渲染过程中紧密协作。本文将深入探讨这三个概念及其协作机制,帮助你更好地理解现代网页的工作原理。

什么是 HTML?

HTML(HyperText Markup Language)是用于描述网页结构的标记语言。它通过标签(如 <div>, <p>, <a> 等)定义网页的内容和布局,是网页的基础。

HTML 示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Example Page</title>
</head>
<body>
    <h1>Welcome to my website</h1>
    <p>This is a paragraph of text.</p>
</body>
</html>

什么是 DOM?

DOM(Document Object Model)是 HTML 文档的编程接口。它将文档表示为树结构(或节点树),每个节点代表文档的一部分(例如元素、属性、文本)。通过 DOM,开发者可以使用 JavaScript 动态地访问和修改文档的内容、结构和样式。

DOM 操作示例:

// 选择一个元素并改变其内容
document.getElementById("myElement").innerText = "New Content";

什么是 BOM?

BOM(Browser Object Model)是浏览器对象模型,提供了与浏览器窗口互动的接口。BOM 包含了关于浏览器的信息和控制浏览器窗口的方法,例如操作窗口大小、处理弹出窗口、获取浏览器信息等。

常用的 BOM 对象和方法:

  • window 对象:代表浏览器窗口或框架,可以访问全局作用域、控制窗口的大小、管理弹出窗口等。
  • navigator 对象:包含有关浏览器的信息,例如浏览器名称、版本和用户代理。
  • screen 对象:包含有关用户屏幕的信息,例如分辨率和颜色深度。
  • location 对象:包含有关当前 URL 的信息,并提供方法来改变 URL。
  • history 对象:提供了与浏览器会话历史记录交互的方法,例如前进和后退。

BOM 使用示例:

// 弹出一个新窗口
window.open("https://www.example.com", "newwindow", "width=400,height=300");

// 获取当前页面的 URL
console.log(window.location.href);

// 打印浏览器的信息
console.log(navigator.userAgent);

从浏览器访问网页开始的协作过程

当浏览器访问网页(例如 www.qq.com)时,HTML、DOM 和 BOM 之间的协作过程可以分为以下几个步骤:

1. 输入 URL 并发送请求

用户在浏览器中输入 www.qq.com 并按下回车键时,浏览器会解析这个 URL 并向对应的服务器发送一个 HTTP 请求。

2. 服务器响应

服务器接收到请求后,会处理请求并返回一个包含 HTML 内容的 HTTP 响应。这个响应头包含了一些元信息(例如状态码、内容类型等),响应体包含了 HTML 文档。

3. 浏览器解析 HTML 并生成 DOM 树

浏览器接收到服务器的响应后,开始解析 HTML 内容:

  • 解析 HTML:浏览器从头到尾解析 HTML 标记,构建对应的 DOM 树。每一个 HTML 标签都会被解析成一个 DOM 节点。
  • 生成 DOM 树:浏览器逐步将解析的 HTML 标签转换成 DOM 元素,并按层级关系构建 DOM 树。

4. 构建 CSSOM 树

同时,浏览器还会解析 CSS(包括外部样式表和内嵌样式),构建 CSSOM(CSS Object Model)树,以便后续结合 DOM 树进行渲染。

5. JavaScript 解析和执行

  • 解析和执行 JavaScript:当浏览器遇到 <script> 标签时,会暂停 DOM 树的构建,解析并执行 JavaScript 代码。JavaScript 代码可以通过 DOM 接口动态地修改 DOM 树。
  • BOM 的使用:JavaScript 代码也可以使用 BOM 接口与浏览器进行交互,例如获取浏览器信息、控制窗口、处理 URL 等。

6. 结合 DOM 和 CSSOM 进行渲染

浏览器将 DOM 树和 CSSOM 树结合起来,生成渲染树(Render Tree),并根据渲染树绘制网页。

7. 加载其他资源

HTML 文档中引用的其他资源(如图片、视频、外部样式表、外部脚本等)会被单独请求并加载。当这些资源加载完成后,它们可能会进一步影响 DOM 和渲染。

示例解析过程

假设 HTML 内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Example Page</title>
    <link rel="stylesheet" href="styles.css">
    <script>
        window.onload = function() {
            document.getElementById('message').innerText = 'Hello, World!';
            console.log('Current URL:', window.location.href);
            console.log('Browser Info:', navigator.userAgent);
        };
    </script>
</head>
<body>
    <h1 id="message">Original Message</h1>
    <img src="image.jpg" alt="Example Image">
</body>
</html>

详细协作过程

  1. 浏览器发送请求

    • 用户输入 www.qq.com,浏览器发送 HTTP 请求。
  2. 服务器响应

    • 服务器返回 HTML 文档,浏览器开始解析。
  3. HTML 解析和 DOM 树构建

    • 解析 <!DOCTYPE html>,确认文档类型。
    • 构建 <html> 元素,继续解析 <head><body>
    • 解析 <link> 标签,请求并加载 styles.css
    • 解析 <script> 标签,暂停 DOM 构建,执行 JavaScript。
    • JavaScript 中的 window.onload 事件被设置,在页面加载完成后执行。
    • 解析 <body>,构建 DOM 节点 <h1><img>
  4. CSSOM 树构建

    • 加载并解析 styles.css,构建 CSSOM 树。
  5. JavaScript 解析和执行

    • 等待 window.onload 事件,加载完成后执行。
    • JavaScript 修改 DOM 节点 <h1 id="message"> 的文本内容。
    • 使用 BOM 获取并输出当前 URL 和浏览器信息。
  6. 结合 DOM 和 CSSOM 进行渲染

    • 结合 DOM 树和 CSSOM 树,生成渲染树。
    • 浏览器根据渲染树绘制页面内容。
  7. 加载其他资源

    • 请求并加载 image.jpg,当图像加载完成后渲染到页面上。

总结

HTML、DOM 和 BOM 是现代网页开发的三大支柱:

  • HTML 定义文档的内容和结构。
  • DOM 提供操作和修改 HTML 文档的接口。
  • BOM 提供与浏览器环境交互的接口,使网页具备动态和交互性。

通过理解 HTML、DOM 和 BOM 的协作过程,你可以更高效地开发和调试复杂的网页应用。希望本文能帮助你深入了解网页加载和渲染的底层机制。

标签:网页,DOM,HTML,BOM,浏览器,解析
From: https://blog.csdn.net/qq_52010229/article/details/139307001

相关文章

  • 前端开发(2)--HTML常用的标签
    100编程书屋_孔夫子旧书网HTMl的标签可以分为单个标签和成对标签。单个标签:html4规定单个标签要有一个/表示结尾,html5则不用<!--单个标签--><meta><!--成对标签--><div></div>以下是HTMl中常用的一些标签div标签div标签主要用来将相关的内容组合到一块,就......
  • HTML历理 隔N行变N行色
    /*隔行变色*/.m-tb2ntr:nth-child(2n){background-color:#f9f9f9;}.m-tb2ntr:hover{background-color:#f2f2f2;}.m-tb4ntr:nth-child(4n+3),.m-tb4ntr:nth-child(4n+4){background-color:#f9f9f9;}.m-tb6ntr:nth-child(6n+4),.m-tb6ntr:nth-child(6n+5),.m-tb6ntr:n......
  • html+css
    一.什么是htmlhtml是超文本语言,也是标识语言二.html特点1.简易性2.可拓展性3.平台无关性4.通用性三.html标签标题标签到6个等级标题h1最大段落标签(1) 空格(必须手打)(2)em标签表示斜体(3)i标签表示斜体(4)br表示换行(5)b标签表示加粗(6)strong标签表示加粗(7)s标......
  • JS+DOM简要笔记
    js官方文档:https://www.w3school.com.cn/js/index.asp简单理解:html是内容,css是控制样式,js是行为。1,js弱类型特点JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。JavaScript是一种基于对象的脚本语言,可以创......
  • HTML20_web概念1
    一、web概念概述1、JavaWeb:使用Java语音开发基于互联网的项目2、软件架构:1.C/S:Client/Server客户端/服务器端 *在用户本地有一个客户端程序,在远程有一个服务器端程序 *如:QQ,迅雷... *优点: 1.用户体验好 *......
  • 第二十六章HTML与CSS书写规范
    1.HTML书写规范1.文档类型声明及编码统一为html5声明类型。编码统一为utf-8。2.页面tdkTDK是一个缩写,其中“T”表示为网页定义标题,“D”表示为网页定义描述description,“K”表示为搜索引擎定义关键词keywords。1、<title>标题:只强调重点即可,尽量把重要的关键词放在前面......
  • html--瀑布
    <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><TITLE>NewDocument</TITLE><METANAME="Generator"CONTENT="EditPlus"><METANAME="Author"......
  • html--龟派气功
    <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><TITLE>NewDocument</TITLE><METANAME="Generator"CONTENT="EditPlus"><METANAME="Author"......
  • html--全魔乱舞
    <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><TITLE>NewDocument</TITLE><METANAME="Generator"CONTENT="EditPlus"><METANAME="Author"......
  • error Conflict: Multiple assets emit different content to the same filename ind
    ERRORFailedtocompilewith1error20:32:04errorConflict:Multipleassetsemitdifferentcontenttothesamefilenameindex.htmlERRORinConflict:Multipleassetsemitdif......