http页面的加载过程

news2025/4/15 6:02:25
  1. HTTP/2 核心概念

1.1 流(Stream)

• 定义:HTTP/2 连接中的逻辑通道,用于传输数据,每个流有唯一标识符(Stream ID)。

• 特点:

◦ 支持多路复用(多个流并行传输)。

◦ 独立管理优先级、流量控制和状态。

• 示例:

◦ 流 ID=1:传输 HTML 请求和响应。

◦ 流 ID=2:传输 CSS 文件。

1.2 帧(Frame)

• 定义:HTTP/2 的最小传输单元,所有数据(头部、正文等)均以帧形式传输。

• 结构:

◦ Length(帧长度)、Type(类型)、Flags(标志位)、Stream ID、Payload(负载)。

• 关键帧类型:

◦ HEADERS:传输 HTTP 头部。

◦ DATA:传输消息体(如 HTML、CSS 内容)。

◦ SETTINGS:连接初始化配置。

1.3 物理传输与逻辑复用

• 物理层面:不同流的帧在同一个 TCP 连接上串行传输。

• 逻辑层面:接收端通过 Stream ID 重组帧,实现并行处理。

• 优势:减少延迟,避免传统 HTTP/1.1 的队头阻塞。

  1. 浏览器渲染流程

2.1 核心步骤

  1. 请求 HTML:浏览器发起 HTTP 请求获取 HTML 文件。

  2. 解析 HTML:

◦ 边下载边解析(流式解析),构建 DOM 树。

  1. 加载外部资源:

◦ CSS:通过 标签触发加载,阻塞渲染(需构建 CSSOM 树)。

◦ JS:默认阻塞解析(可通过 async/defer 优化)。

◦ 图片/媒体:非阻塞加载(懒加载优化)。

  1. 构建渲染树:合并 DOM 和 CSSOM,确定可见元素及样式。

  2. 布局(Layout):计算元素几何位置。

  3. 绘制(Paint):逐层合成并显示内容。

2.2 JavaScript 的影响

• 同步脚本:暂停 HTML 解析和渲染。

• 异步脚本:

◦ async:下载完成后立即执行(不保证顺序)。

◦ defer:下载完成后在 HTML 解析完成后执行(保证顺序)。

  1. 资源加载与优化策略

3.1 关键资源加载顺序

  1. HTML:必须优先加载,构建页面骨架。

  2. CSS:内嵌或外链,需尽早加载(避免 FOUC)。

  3. JavaScript:按需加载(defer 或动态导入)。

  4. 媒体资源:懒加载(loading=“lazy”)。

3.2 性能优化技巧

• 减少阻塞:

◦ 将 CSS 放在 ,JavaScript 放在页面底部或使用 defer。

• 利用 HTTP/2 多路复用:合并多个小文件,减少请求次数。

• 预加载关键资源:

• 缓存策略:

◦ 设置 Cache-Control 头,利用浏览器缓存。

  1. 常见问题与解决方案

4.1 队头阻塞(Head-of-Line Blocking)

• HTTP/2:通过多路复用解决应用层阻塞。

• TCP 层阻塞:需优化网络稳定性(HTTP/3 迁移到 QUIC 协议)。

4.2 渲染阻塞优化

• CSS:内联关键 CSS,异步加载非关键 CSS。

• JavaScript:使用 async/defer 或 Web Workers。

  1. 实际案例分析

5.1 示例 HTML 加载流程

• 流程:

  1. 下载 HTML → 解析 → 加载 style.css(阻塞渲染)。

  2. 下载 analytics.js(不阻塞解析)。

  3. 图片 image.jpg 在滚动到可视区域时加载。

  4. 总结

• HTTP/2:通过流和帧实现高效多路复用,优化网络传输。

• 浏览器渲染:依赖 HTML、CSS、JS 的协同加载与解析。

• 优化核心:减少阻塞、合理利用并行、优先加载关键资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL【8.0.41版】安装详细教程--无需手动配置环境

一、MySQL 介绍 1. 概述 MySQL 是一个开源的关系型数据库管理系统,由瑞典公司 MySQL AB 开发,现属于 Oracle 旗下。它基于 SQL(结构化查询语言)进行数据管理,支持多用户、多线程操作,广泛应用于 Web 应用、…

鸿蒙ArkTS实战:从零打造智能表达式计算器(附状态管理+路由传参核心实现)

还在为组件状态混乱、页面跳转丢参数而头疼? 这篇博客将揭秘如何用鸿蒙ArkTS打造一个漂亮美观的智能计算器: ✅ 输入完整表达式,秒出结果——字符串切割简单计算 ✅ 状态管理黑科技——Provide/Consume 实现跨组件实时响应 ✅ 路由传参实战—…

qq邮箱群发程序

1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击,进入UI编辑界面: 点击第三步后进入QT的UI设计界面,通过点击按钮进行界面设计,设计后进行保存到当前Pycharm…

K8S学习之基础七十九:关闭istio功能

关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间,pod都会开启istio功能 反之,如果要开启istio,在对应命名空间打上该标签即可

上门预约洗鞋店小程序都具备哪些功能?

现在大家对洗鞋子的清洗条件越来越高,在家里不想去,那就要拿去洗鞋店去洗。如果有的客户没时间去洗鞋店,这个时候,有个洗鞋店小程序就可以进行上门取件,帮助没时间的客户去取需要清洗的鞋子,这样岂不是既帮…

蓝桥杯——走迷宫(Java-BFS)

这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制:广度优先搜索按层遍历所有可能的路径,首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用:通过队列按先进先出的顺序处理节点,确保每一步探索的都是当…

下载firefox.tar.xz后如何将其加入到Gnome启动器

起因:近期(2025-04-07)发现firefox公布了130.0 版本,可以对pdf文档进行签名了,想试一下,所以卸载了我的Debian12上的firefox-esr,直接下载了新版本的tar.xz 包。 经过一番摸索,实现了将其加入Gn…

加密≠安全:文件夹密码遗忘背后的数据丢失风险与应对

在数字化时代,保护个人隐私和数据安全变得尤为重要。许多人选择对重要文件夹进行加密,以防止未经授权的访问。然而,一个常见且令人头疼的问题也随之而来——文件夹加密密码遗忘。当你突然发现自己无法访问那些加密的文件夹时,那种…

【开源宝藏】30天学会CSS - DAY12 第十二课 从左向右填充的文字标题动画

用伪元素搞定文字填充动效:一行 JS 不写,效果炸裂 你是否曾经在设计页面标题时,觉得纯文字太寡淡?或者想做一个有动感的文字特效,但又不想引入 JS 甚至 SVG? 在这篇文章中,我们将通过 一段不到…

nginx或tengine服务器,配置HTTPS下使用WebSocket的线上环境实践!

问题描述: HTTPS 下发起WS连接,连接失败,Chrom 浏览器报错。 socket.js:19 Mixed Content: The page at https://app.XXX.com was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint ws://172.16.10.80:903…

【Oracle篇】跨字符集迁移:基于数据泵的ZHS16GBK转AL32UTF8全流程迁移

💫《博主主页》:奈斯DB-CSDN博客 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解 💖如果觉得文章对你有所帮…

西门子S7-1200PLC 工艺指令PID_Temp进行控温

1.硬件需求: 西门子PLC:CPU 1215C DC/DC/DC PLC模块:SM 1231 TC模块 个人电脑:已安装TIA Portal V17软件 加热套:带加热电源线以及K型热电偶插头 固态继电器:恩爵 RT-SSK4A2032-08S-F 其他&#xff1…

vant4+vue3上传一个pdf文件并实现pdf的预览。使用插件pdf.js

注意下载的插件的版本"pdfjs-dist": "^2.2.228", npm i pdfjs-dist2.2.228 然后封装一个pdf的遮罩。因为pdf文件有多页,所以我用了swiper轮播的形式展示。因为用到移动端,手动滑动页面这样比点下一页下一页的方便多了。 直接贴代码…

2025 数字中国创新大赛数字安全赛道数据安全产业积分争夺赛初赛-东部赛区WriteUp

2025 数字中国创新大赛数字安全赛道数据安全产业积分争夺赛初赛-东部赛区WriteUp 数据安全:ez_upload(60分): 模型安全:数据分析:溯源与取证:1-1:1-2: 数据社工:2-2:2-3:2-4: 数据跨境&#xff…

2025 年网络安全终极指南

我们生活在一个科技已成为日常生活不可分割的一部分的时代。对数字世界的依赖性日益增强的也带来了更大的网络风险。 网络安全并不是IT专家的专属特权,而是所有用户的共同责任。通过简单的行动,我们可以保护我们的数据、隐私和财务,降低成为…

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序)

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序) 如果要使用抓包软件,基本上第一步都是要安装证书的。原因如下: 客户端(浏览器或应用)会检测到证书不受信任,并弹出 证书错误&#xff0…

图解力扣回溯及剪枝问题的模板应用

文章目录 选哪个的问题17. 电话号码的字母组合题目描述解题代码图解复杂度 选不选的问题78. 子集题目描述解题代码图解复杂度 两相转化77. 组合题目描述解题代码法一:按选哪个的思路法二:按选不选的思路 图解选哪个:选不选 复杂度 选哪个的问…

Elasticsearch 8.X 如何利用嵌入向量提升搜索能力?

众所周知,Elasticsearch 是一个非常流行的搜索引擎,因为它速度快、扩展性强,尤其擅长全文搜索。 近两年,向量嵌入(Vector Embedding)技术的引入,让 Elasticsearch 在处理高级搜索场景时变得更强…

MySQL体系架构(一)

1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle Drizzle是真正的M…

深度强化学习基础 0:通用学习方法

过去自己学习深度强化学习的痛点: 只能看到各种术语、数学公式勉强看懂,没有建立清晰且准确关联 多变量交互关系浮于表面,有时候连环境、代理控制的变量都混淆 模型种类繁多,概念繁杂难整合、对比或复用,无框架分析所…