当前位置: 首页 > news >正文

文档的预解析

1. 预解析的核心目标

浏览器在正式解析(Parsing)HTML 前,会启动一个轻量级的  预解析器(Pre-Parser),快速扫描文档内容,实现:
  • 提前发现并加载关键资源(如 CSS、JavaScript、图片)。
  • 推测性构建部分 DOM 结构,减少主解析器的等待时间。
  • 优化网络请求的优先级,避免资源加载阻塞渲染。

2、具体步骤

  1. 快速扫描:预解析器逐字节扫描 HTML,识别 资源标签(如<script>、<link>、<img>)
  2. 推测性构建DOM:预解析器尝试构架简化的DOM结构,供主解析器后续填充
  3. 主解析器接管:主解析器基于预解析结果继续处理,跳过已扫描的部分,直接填充或修正 DOM
  4. 主解析器追上时停止:当主解析器处理到预解析器已扫描的位置时,预解析器退出。

3、预解析的触发条件与限制

(1)触发条件:

  • HTML 文档开始加载时自动启动。
  • 遇到 <script async> 或 <link preload>等标签时增强预加载。

(2)无法预解析的情况:

  • 内联JS会强制主解析器暂停。
  • 同步脚本(无async/defer)会阻塞预解析和主解析。
  • 主解析器暂停时,预解析器也会被迫停止(因为预解析器需要与主解析器保持同步,避免预测错误)。

4、主解析器暂停时预解析器的两种情况:

(1)同步脚本导致的暂停
  • 主解析器必须立即下载并执行 脚本(可能修改 DOM)。
  • 预解析器强制停止:因为脚本可能通过 document.write()动态插入标签,预解析器必须等待主解析器执行完毕才能保证预测准确性。
(2)async脚本执行导致的暂停
  • 主解析器暂停执行脚本,但预解析器继续扫描
  • 原因:async 脚本不会通过 document.write()修改 DOM(现代规范已废弃此用法),且其执行时间极短,预解析器可安全继续工作。

5. 关注资源优先级

  • 预解析器会根据资源类型分配优先级:
    • 高优先级:CSS、字体、首屏图片。
    • 低优先级:非首屏图片、异步脚本。

拓展:

1、资源下载的过程:

触发下载的时机(预解析器扫描+主解析器处理)—>网络请求的生命周期(检查缓存—>建立连接(如果没有缓存)—>发送请求—>接收响应)

2、资源优先级的设置作用:

  • 预解析器在快速扫描 HTML 时,会为发现的资源分配初始优先级
  • 解析器不直接控制下载,而是由 浏览器网络栈 根据优先级调度下载任务,保证关键路径资源快速就位

3、主解析器和预解析器的步调:

 预解析器在扫描到同步脚本时,会停止,等到主解析器走到这个脚本执行完脚本后,两个解析器才同时开始往后走,避免脚本修改后续DOM导致预测错误

http://www.dtcms.com/a/112727.html

相关文章:

  • JavaWeb 课堂笔记 —— 02 JavaScript
  • 机器视觉开发工程师常用C#运算符与使用方法大总结
  • 网络安全防御核心原则与实践指南
  • php7.4.3连接MSsql server方法
  • 方差分析_单因素、多因素、析因方差分析
  • 【首款ARMv9开源芯片“星睿“O6测评】在“周易”NPU上部署Yolov8l模型并实现实时目标检测
  • 场馆预定系统小程序PHP+uniapp
  • 讲述我的PLC自学之路 第六章
  • Harmony OS“一多” 详解:基于窗口变化的断点自适应实现
  • 类的基本概念
  • 深入剖析丝杆升降机工作原理,解锁工业传动奥秘
  • 【C++】C++11<包装器没写>
  • 动态规划1——斐波那契数列模型——第 N 个泰波那契数
  • 算法题(117):字符串的展开
  • 16.2Linux自带的LED灯驱动实验(详细编写)_csdn
  • OJ系统C端UI自动化测试
  • Kubernetes 集群搭建(一):从环境准备到 Calico 网络插件部署
  • 自定义填充 cad
  • SpringCloudGateWay
  • spring security 过滤器链相关初始化过程
  • 使用 Elastic 实现端到端的大语言模型(LLM)可观测性:洞察生成式 AI 应用这个不透明的世界
  • C/C++测试框架googletest使用示例
  • 用HTML.CSS.JavaScript实现一个贪吃蛇小游戏
  • 基于Go语言实现一个网络聊天室(连接Redis版)
  • Kubernetes集群管理详解:从入门到精通
  • Eliet Chat开发日志:信令服务器注册与通信过程
  • JAVA单例模式
  • 2023-2024总结记录
  • leetcode二叉树刷题调试不方便的解决办法
  • 【Redis】服务端高并发分布式结构