HTML解析 → DOM树 CSS解析 → CSSOM → 合并 → 渲染树 → 布局 → 绘制 → 合成 → 屏幕显示

news/2025/2/26 19:14:13

一、关键渲染流程

  1. 解析 HTML → 生成 DOM 树

    • 浏览器逐行解析 HTML,构建**DOM(文档对象模型)**树状结构

    • 遇到 <link> 或 <style> 标签时会暂停 HTML 解析,开始加载 CSS

  2. 解析 CSS → 生成 CSSOM

    • 将 CSS 规则解析为**CSSOM(CSS 对象模型)**树

    • 浏览器处理选择器优先级(权重计算)、继承和层叠规则

  3. 合并 DOM + CSSOM → 构建渲染树(Render Tree)

    • 结合 DOM 和 CSSOM,过滤不可见元素(如 display: none

    • 保留可见节点及其计算后的样式信息

  4. 布局(Layout/Reflow)

    • 计算每个节点的几何信息(位置、尺寸)

    • 确定视口(viewport)内元素的精确坐标

    • 首次布局称为「回流」

  5. 绘制(Painting)

    • 将布局结果转换为屏幕上的像素

    • 分图层绘制(如处理 z-index

    • 可能触发重绘(Repaint)

  6. 合成(Compositing)

    • 将不同图层合并为最终界面

    • 利用 GPU 加速处理动画等效果


二、CSS 解析细节

  1. 选择器匹配

    • 浏览器从右向左匹配选择器(优化性能)

    • 例:div .box a 先查找 <a> 标签,再向上匹配

  2. 层叠规则

    • 优先级顺序:!important > 内联样式 > ID > 类/伪类 > 标签

    • 相同权重时,后定义的样式覆盖前者

  3. 继承机制

    • 部分属性(如 font-familycolor)会继承到子元素

    • 显式设置 inherit 可强制继承


三、性能优化要点

  1. 减少回流(Layout Thrashing)

    • 避免频繁读取布局属性(如 offsetWidth

    • 使用 transform/opacity 等触发合成层(跳过布局和绘制)

  2. 选择器优化

    • 避免过度嵌套(如 .nav ul li a

    • 减少通用选择器 * 的使用

  3. 渲染阻塞

    • <link> 标签默认会阻塞渲染,可使用 media 属性优化加载

    • 关键 CSS 可内联以加速首屏渲染


四、调试工具

  1. Chrome DevTools:

    • Performance 面板:分析完整渲染流程

    • Layers 面板:查看合成层信息

    • Rendering 选项卡:高亮重绘区域


总结流程图

复制

HTML解析 → DOM树
       ↓
CSS解析 → CSSOM → 合并 → 渲染树 → 布局 → 绘制 → 合成 → 屏幕显示

http://www.niftyadmin.cn/n/5869093.html

相关文章

Pycharm-Version: 2024.3.3导入conda环境

打开一个新项目&#xff0c;点击File->Settings 找到Project->python interpreter 新增环境&#xff0c;点击add interpreter->add local interpreter 点击select existing->conda&#xff0c;选择地址为&#xff1a;anoconda/library/bin/conda.bat&#xff0c…

Fisher散度:从信息几何到机器学习的隐藏利器

Fisher散度&#xff1a;从信息几何到机器学习的隐藏利器 在机器学习和统计学中&#xff0c;比较两个概率分布的差异是常见任务&#xff0c;比如评估真实分布与模型预测分布的差距。KL散度&#xff08;Kullback-Leibler Divergence&#xff09;可能是大家熟悉的选择&#xff0c…

C++ | 高级教程 | 信号处理

&#x1f47b; 概念 信号 —— 操作系统传给进程的中断&#xff0c;会提早终止程序有些信号不能被程序捕获&#xff0c;有些则可以被捕获&#xff0c;并基于信号采取适当的动作 信号描述SIGABRT程序的异常终止&#xff0c;如调用 abortSIGFPE错误的算术运算&#xff0c;比如除…

文件上传漏洞学习笔记

一、漏洞概述 定义 文件上传漏洞指未对用户上传的文件进行充分安全校验&#xff0c;导致攻击者可上传恶意文件&#xff08;如Webshell、木马&#xff09;&#xff0c;进而控制服务器或执行任意代码。 危害等级 ⚠️ 高危漏洞&#xff08;通常CVSS评分7.0&#xff09;&#xff…

PDF转HTML 超级好用 免费在线转换PDF 完美转换格式

PDF转HTML 超级好用 免费在线转换PDF 完美转换格式&#xff0c;PDF已成为一种广泛使用的文件格式&#xff0c;用于保存和分享文档。然而&#xff0c;PDF文件在某些场景下可能不够灵活&#xff0c;特别是在需要在网页上直接展示其内容时。为了满足这一需求&#xff0c;小白工具推…

自定义提交按钮触发avue-form绑定的submit事件

场景 使用avue-form时&#xff0c;提交按钮会绑定至form区域下方&#xff0c;如果想自定义按钮位置&#xff0c;需要通过dialog的footer位置进行编写&#xff0c;例如&#xff1a; <avue-form ref"form" v-model"dataInfo" :option"dataInfoOpti…

大语言模型的不足与研究热点

大语言模型的不足 技术局限性 理解与判断不足&#xff1a;缺乏人类的直觉和伦理判断&#xff0c;可能生成不准确或道德争议内容&#xff0c;例如在复杂伦理决策中表现不佳。 上下文依赖性&#xff1a;对输入上下文的完整性要求较高&#xff0c;若信息模糊或不完整&#xff0c…

汽车制造又一革新:Profinet-EtherCAT实现高精度激光焊接

通过稳联技术Profinet到EtherCAT网关&#xff0c;将PLC控制系统与激光焊接机器人连接&#xff0c;实现高精度的汽车车身焊接。 在现代汽车制造过程中&#xff0c;装配线的自动化程度直接影响生产效率和产品质量。某知名汽车制造厂引入了稳联技术Profinet转EtherCAT协议网关&…