【每日十分钟前端】浏览器2,浏览器解析渲染页面流程,HTML解析、CSS解析、布局绘制等

Sqribble:基于模板规则的云原生文档操作系统解析 文档自动化生成正从‘AI幻觉排版’走向‘确定性规则驱动’,其核心是将排版知识封装为可执行模板逻辑,而非依赖大模型猜测。这类工具以云渲染引擎替代本地计算,通过结构化内容摄取、语义解析与模板映射,实现输入即成品的稳定输出。它解决的不是基础编辑问题,而是专业文档生产中的一致性、跨平台兼容性与品牌规范落地难题,适用于知识付费、企业培训、营销资料等高频PDF交付场景。Sqribble正是这一范式的典型代表,将模板升维为带业务逻辑的文档函数。 阅读详情

Critical Rendering Path,CRP,网页的关键渲染路径。
指的是浏览器从请求HTML、CSS、Javascript文件开始,到将它们最终以像素输出到屏幕上这一过程。

大致步骤为:

1、解析HTML文本,构建DOM。

2、解析CSS,构建CSSOM(CSS规则树)。

3、合并DOM树和CSSOM,构建渲染树Render-Tree。

4、布局Layout/Reflow,负责各元素尺寸、位置的计算。

5、绘制Paint/Repaint,绘制页面像素信息,展示到屏幕上。

上面过程并非一次进行,存在一定的交叉。

提高网页加载速度,就要在第一次加载的时候让元素尽快显示在屏幕上,而不是等所有元素全部准备就绪后再显示。

补充:
浏览器的解析是自上而下开始的,会先解析HTML,直到遇到外部样式和外部脚本(没有async、defer属性时),会阻塞浏览器的解析,大致为:
html解析 → 外部样式、脚本加载 → 外部样式执行 → 外部脚本执行 → html继续解析

解析HTML文本,构建DOM

HTML内容Bytes → 单个字符characters → 标记tokens → 对象objects → DOM树

DOM,document Object Model,文档对象模型。

解析由两部分组成:分词与构建树。

1、浏览器到得到html后,第一步就是将HTML解析成许多符号序列标记tokens,每个token都有自己的含义和规则集,也就是分词过程。

2、分词的结果是得到一堆的tokens,此时把他们转化为对象,这些对象分别定义他们的属性和规则。

3、将对象组合成为一棵树(DOM元素+属性节点)。(不同标签之间的关系就像是一个树形结构一样)

补充:

这个过程是循序渐进的。
我们假设一个HTML非常大,一次传输(RTT)后只能的到一部分,浏览器得到这部分后就会开始构建DOM,并不会等到整个文档都就位后才开始渲染。从而加快构建过程,从顶部向下构建,后面的构建不会对前面的造成影响。

解析CSS,构建CSSOM(CSS规则树)

CSS内容Bytes → characters → tokens → objects → CSSOM

CSS Object Model,对象模型,构建过程类似DOM。

当HTML解析到<link>标签时,会请求对应的CSS文件,当CSS文件就绪时便开始解析它,如果遇到行内style时则直接解析。这个可以跟构建DOM同时进行。

如果是外部样式,CSSOM的构建必须要获得一份完整的CSS文件。因为CSS文件包含大量的样式,后面的会覆盖前面的,如果提前构建CSSOM就很容易获得错误的结果。

即为:

1、如果是内联样式,CSSOM构建包含在解析HTML过程中。
2、如果是外部样式,包含在解析CSS样式表过程中。
3、如果没有设置样式,使用默认样式,包含在解析HTML过程中。

补充:

渲染优化,在不考虑引入Javascript的情况下:

DOM即使构建完成也需要等CSSOM构建完成,才能经过一个完整渲染过程并呈现画面。
此时有一个优化就是,尽早构建出 CSSOM:

(1)、html文档中的<style>或者<link>标签应该放在<head>里并尽早发现被解析。
(2)、减少第一次请求的 CSS 文件大小。
(3)、甚至可以将最重要部分的CSS规则以<style>标签发在<head>里,无需网络请求。

合并DOM树和CSSOM,构建渲染树Render-Tree

当DOM和CSSOM都有了之后,浏览器就要开始构建渲染树了。

此时不需要全部构建,只需要构建需要显示在屏幕上的部分。
一般来说渲染树和DOM树一一对应,但不是严格意义上的一一对应,因为有一些不可见元素的DOM(比如<head>、<meta>、display:none等),是不需要构建。

步骤:

(1)、浏览器从DOM树开始,遍历每一个“可见”节点。
(2)、对于每一个“可见”节点,在CSSOM上找到匹配的样式并应用。
(3)、生成渲染树。

补充:

1、CSS匹配规则为从右向左

浏览器是给可见节点找对应规则。
(jQuery选择器是使用一个规则去找对应的节点,这样从左到右或许更快。)
对于前者,一个CSS文件中或许有上千条规则,而且对于当前节点来说,大多数规则是匹配不上的,如果从右开始匹配(也是从更精确的位置开始),能更快排除不合适的大部分节点。而如果从左开始,只有深入了才会发现匹配失败,如果大部分规则层级都比较深,就比较浪费资源了。

2、讲述到为止,DOM不阻塞渲染树的构建,CSSOM阻塞。

布局Layout

这一步也称为Reflow,回流。

目前已经得到了元素的自身信息,但是还不知道它在浏览器视口中的位置和大小。这一过程主要就是定位坐标和大小、是否换行、各种position、overflew、z-index属性等,最终输出元素的盒模型(box-model)

回流,意味着元素的内容、结构、位置或尺寸发生变化,需要重新计算样式和渲染树。

渲染Paint

这一步也称为Repaint,重绘。

浏览器将每一个节点以像素显示在屏幕上,即将图像绘制出来。

这一过程需要的时间与文档大小、css应用样式的数量与复杂度、设备自身有关,例如,对简单的颜色进行paint是简单的,但是对box-shadow进行paint是复杂的。

重绘,意味着元素发生的改变只是影响元素的一些外观之类的情况(背景色,边框颜色,文字颜色等)(没有几何信息),此时只需要应用新样式绘制这个元素就可以了。

补充:

回流一定伴随着重绘,重绘可以单独出现。

引入JavaScript

有以下几个特点:

1、阻塞浏览器的解析,HTML构建DOM时候,发现一个外部脚本时,需等待脚本下载完成并执行后才会继续解析HTML。

2、浏览器的优化,在下载脚本的时候(脚本阻塞情况时),也会继续下载其他资源,只是脚本并行下载的优化,之后必须等这个脚本执行完毕后才能继续接下来的解析。

3、defer与async,如果使用异步脚本(加上defer或async属性的脚本),可以等到解析完毕后执行脚本。
<script src="" async />

补充:

1、JavaScript执行会被CSSOM构建阻塞,也就是JavaScript必须等到CSSOM构建完成后才会执行。

2、async,异步执行。
异步下载完成后就会执行,不确保执行顺序,一定在onload前,但不确定在DOMContentLoaded事件的前或后。
即,无需阻塞DOM,在对Script执行网络请求期间可以继续构建DOM,直到拿到Script之后再去执行。

3、defer,延迟执行。
在浏览器看起来的效果像是脚本放在了body后面一样。
不同的浏览器优化效果不一样,按规范应该在DOMContentLoaded事件前,实际上也可能在它后面。
即,将该Script的网络请求优先级降低,先执行别的,延长响应时间。

遇到图片类资源

直接异步下载,不会阻塞解析,下载完毕后直接用图片替换原有的src的地方。

浏览器接收到图片字节后,便开始渲染了,而不是等到整张图片接收完成后。

Loaded 和 DOMContentLoaded

(1)、load事件触发时,页面上的所有DOM、样式表、脚本、图片都已经加载完成了。

(2)、DOMContentLoaded事件触时,仅DOM加载完成,不包含样式、图片、异步脚本的加载完成情况。

模板驱动型文档自动化:结构化生成与企业级文档工程实践 文档自动化是现代知识型组织提升交付效率的核心能力,其本质在于将非结构化内容生产转化为可复用、可验证、可版本化的工程流程。模板驱动(Template-Driven)作为区别于AI生成和低代码拖拽的关键范式,强调结构先行、样式内嵌与变量锚定,通过分层模板架构(基础样式层、业务模块层、客户定制层)实现高内聚低耦合的文档资产治理。该技术显著降低格式校准、跨平台兼容与版本归档等重复劳动,广泛应用于商业计划书、法律意见书、SaaS客户报告等需批量产出高信噪比文档的场景,尤其适合咨询顾问、律所、教育机构与客户成功团队。 阅读详情

相关推荐

Opus 4.7自验证机制:生产级AI可靠性的技术跃迁

大语言模型的可靠性是AI工程化落地的核心瓶颈,其本质在于输出幻觉、指令歧义与多步推理失稳。Opus 4.7通过内生的‘自我一致性验证’(SCV)机制,在生成过程中同步激活多条推理路径并强制交叉验证,显著提升输出在代码执行、数据逻辑与视觉语义层面的自洽性。该能力并非后处理校验,而是训练目标重构的结果,直接降低长链路Agent的人工复核率与失败率。结合字面主义响应范式与2576像素级视觉理解,模型从‘善意补全’转向可预测、可审计的协同行为,使自动化任务真正具备生产就绪(Production-Ready)能力。本

weixin_30751947的博客 451

详细的浏览器解析html过程

从头开始说起,可能有些地方不是很全,以后学习过程中慢慢补齐 1、用户在地址栏输入一个URL,通过DNS域名解析,先在本地hosts文件夹里查找有无与当前域名对应的ip地址,若有则向服务器发起请求,若没有,则在本地域名服务器查找,采用递归查找,若仍然没有,则在根域名服务器查找,采用迭代查找,它会告诉你在哪个服务器查找,查找到ip地址,把对应规则保存在本地hosts文件中。 2、缓存服务器CDN 3、进行http请求,三次握手四次挥手 拓展:为啥是三次握手和四次挥手,不是其他次数呢?这几次连接中到底.

weixin_49343253的博客 3944

Vibe Coding:当AI把需求直接翻译成代码,工程师该信多少?

Vibe Coding(感觉编程)正重塑软件开发范式——它并非简单的AI代码补全,而是大语言模型对‘用户意图’的跨模态理解与工程化翻译。其核心原理在于将自然语言需求映射为符合安全规范、架构约束和业务语义的可执行代码,技术价值体现在大幅压缩MVP周期与降低协作门槛。典型应用场景包括快速原型开发、非核心模块生成及低代码增强,但高度依赖Prompt工程、上下文约束与自动化审计。本文聚焦真实项目中暴露的逻辑缺陷、安全漏洞与架构腐化等可量化风险,结合vibe_id追踪、意图对齐审查与Node.js环境兼容性实践,提供

weixin_30733003的博客 481

HTML的解析顺序及过程详解

1、解析规则: 1、html字符串被浏览器接收后一句一句读取并解析 2、如果解析到link标签,便发送请求获取css; 3、解析到script标签,发送请求获取js后并执行相应的代码 4、解析到img后会请求图片资源 2、开始解析html //解析器通常会把工作分配给两个组件:分词程序负责把输入的html切分成合法的序列;解析程序按照句法规则去分析然后构建句法树。 <html> <body> <p>hello taya</p> <div&g

qq526362801的博客 5809

FPGA实战:给你的UART串口通信加上Verilog奇偶校验位(Modelsim仿真验证)

本文详细介绍了如何在FPGA中实现UART串口通信的Verilog奇偶校验功能,包括发送端校验位生成和接收端校验检测的设计与实现。通过Modelsim仿真验证,确保数据传输的可靠性,适用于嵌入式系统和数字通信领域。

weixin_34216614的博客 341

基于deepseek本地模型的本地知识库构建

通过以上步骤,你已经成功构建了一个基于 AnythingLLM 和 LM Studio 的本地知识库。这个系统不仅能够高效地存储和检索知识,还能结合强大的语言模型生成准确的回答。你可以根据自己的需求进一步扩展和优化这个系统,比如增加更多的文档格式支持、优化检索算法等。

qq_30178745的博客 1381

浏览器解析HTML过程

浏览器根据url从服务器下载到html资源后,将会对html的内容至上而下逐行解析后才会呈现给用户,解析过程会有下载资源(css、js、img等)、执行脚本、构建 DOM 树、渲染页面等操作,这其中有很多规则,当代码设计不合理时可能会导致解析过程冗余、页面首屏渲染时间延长、占用不必要的内存等。所以对解析过程有较全面的详细的了解,也是项目架构的基础。

qq_42405304的博客 1196

DC-DC BUCK电路 PCB 布局布线 5 要点:以 XL4015 12V转5V 为例解析噪声控制

本文以XL4015 12V转5V降压电路为例,详细解析DC-DC BUCK电路PCB布局布线的5个关键要点,重点探讨噪声控制策略。通过功率回路最小化、热管理与接地优化、电感电容布局、反馈网络防干扰设计以及实测验证技巧,帮助工程师实现高效稳定的电源设计,显著降低输出纹波和电磁干扰。

weixin_29165725的博客 369

浏览器解析HTML原理

用户输入的网址后,通过DNS解析后得到服务器的地址,然后浏览器向服务器发起请求,经过TCP三次握手确认连接后,服务器将需要的代码发回给浏览器。如果输入的不是网址而是一串关键词,浏览器就会知道你是要搜索,然后会使用默认的搜索引擎来查询。浏览器安全校验通过和接收到代码完毕后,浏览器通过IPC管道将数据以次传递给渲染进程进入渲染进程。然后渲染器进程将会对HTML代码进行解析。

xcm2480416851的博客 1573

ROS2+MoveIt2+Gazebo仿真实战:从零搭建六轴机械臂控制闭环

本文详细介绍了如何从零搭建一个完整的ROS2+MoveIt2+Gazebo六轴机械臂仿真控制闭环。通过手写URDF模型、配置MoveIt2运动规划、集成Gazebo物理仿真与ROS2 Control控制器,最终实现RViz中规划轨迹、Gazebo中同步执行的完整数字孪生验证平台,为机器人算法开发和硬件验证提供低成本、高效的仿真解决方案。

weixin_29093017的博客 484

爬虫瑞数5.5案例:欧冶钢材交易官网,带后缀K5nOZLud(面向对象补环境)

瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。由于之前某通信的瑞数已经调整,这里再出一篇文章,瑞数特点以及请求执行的流程已在之前的文章中分析过,这里不再特别讲解;

老衲爱洗头的博客 3043

你了解浏览器原理吗?说说浏览器解析html的过程

html文件在没有写入html标签之前和txt文本是一个性质的,不含任何样式。只是单纯的文本预览文件。一旦加入了html标签,表示内容有了语义!浏览器的渲染引擎才会根据标签的语义开始解析。

热爱前端的大三在校生 2325

R语言线性混合模型(LMM)分析

它将数据表示为固定效应和随机效应的线性组合,其中固定效应表示总体均值的影响,随机效应表示个体间的随机差异。LMM的目标是通过最大似然估计或最小二乘估计来估计模型中的固定效应和随机效应的参数。LMM结合了固定效应和随机效应,能够同时考虑个体间和个体内的变异,并适用于具有相关性的数据。目前在使用LMM的R语言包中,较常用的是lme4和nlme包,它们提供了丰富的函数和工具来拟合和分析线性混合模型。面板数据分析:LMM适用于分析具有面板结构的数据,如经济学中的面板数据或教育研究中的学生评估数据。

走向CTO的路上... 2967

【每日十分钟前端】基础篇1,DOCTYPE、@规则、typeof

1、DOCTYPE 有什么作用? 2、css@规则有哪些,有什么用? 3、JS中typeof的类型有哪些?

u013035708的博客 399

这才是 Python 的正确玩法!用强化学习 (RL) 训练 AI 玩《王者荣耀》,胜率 90%!

大家打排位时,一定遇到过那种“意识神级、操作零失误”的对手,或者“走位呆滞、送人头”的队友。以前的“人机”是程序员写死的脚本(If 血量<20% Then 回城)。而现在的顶级 AI(如腾讯绝悟、OpenAI Five),是靠强化学习 (Reinforcement Learning)自己“左右互搏”练出来的。今天,我们不谈枯燥的数学公式,我将手把手教你用,搭建一个能玩 MOBA 游戏的 AI Agent。即使不能去 KPL 打职业,虐一下钻石局还是绰绰有余的!

BUG猿的博客 1182

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【每日十分钟前端】基础篇7,SEO、清除浮动、数组API

1、前端需要注意哪些 SEO? 2、清除浮动指什么?如何清除浮动?两种以上方法。 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 3、数组有哪些 API ,哪些会改变原数组?

u013035708的博客 413

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【每日十分钟前端】基础篇18,为什么会出现页面乱码?如何解决?、 BFC、IFC、GFC、FFC的区别、数据类型判断typeof与instanceof

1、[HTML] 为什么会出现页面乱码?如何解决? 2、[CSS] BFC、IFC、GFC、FFC的区别是什么? 3、[JS] 数据类型判断typeof与instanceof?

u013035708的博客 1280

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

一个合格(优秀)的前端都应该阅读这些文章

的确,有些标题党了。起因是微信群里,有哥们问我,你是怎么学习前端的呢?能不能共享一下学习方法。一句话也挺触动我的,我真的不算是什么大佬,对于学习前端知识,我也不能说是掌握了什么捷径。当然,我个人的学习方法这篇文章已经在写了,预计这周末会在我个人公众号发布。而在此之前,我想展(gong)示(xiang)一下,我平时浏览各个技术网站,所记录下来的文章。如果你能做到每日消化一篇,或许,你只...

weixin_30776545的博客 366

快速原型设计:在快马平台十分钟构建页面访问监控系统Demo

首先是一个首页路由,它负责从数据库里查询出最近一周所有监控页面的检测记录,并按照日期和页面URL进行聚合计算,得出每日的成功率和平均响应时间,然后将这些数据传递给前端模板。我只需要点击一下部署按钮,这个监控系统的Demo就直接生成了一个可以公开访问的临时网址,我可以把这个链接分享给同事,他们也能直接看到图表和进行操作测试,完全不用关心服务器、环境这些繁琐的事情。好的实践是,点击后按钮状态变为“检测中...”,并暂时禁用,待后端检测完成后再恢复,并刷新页面图表数据,给用户明确的操作反馈。

ThunderstormLynx23的博客 214

Markdown与Mermaid:高效文档写作与图表绘制的轻量级解决方案

在技术文档编写与知识管理领域,轻量级标记语言(Lightweight Markup Language)正成为提升效率的关键工具。其核心原理是通过简洁的文本语法替代复杂的格式操作,将文档内容与表现形式分离,从而实现专注内容创作、易于版本控制和跨平台协作的技术价值。这一特性使其在开发者文档、项目规划、技术方案编写等应用场景中极具优势。以Markdown为例,它通过#、-、**等简单符号即可实现标题、列表、强调等结构化排版,而Mermaid则进一步扩展了能力边界,允许用户使用类似代码的声明式语法直接生成流程图、时

congjukun0600的博客 353

我用蓝耘MaaS + 魔珐星云,打造了一个压迫感拉满的 AI 面试官

且目视他人之凝目如点点鬼火, 大胆去走你的夜路。在正式开始之前,先快速过一遍这次用到的“武器库”。如果你对某些组件已经很熟悉,可以直接跳过;如果还不太了解,看这段就够了。整个系统由四个核心组件构成,我按“大脑 → 神经 → 身体”的顺序来拆解:🧠 蓝耘 MaaS(大脑) 蓝耘的 MaaS(Model as a Service)平台,简单说就是把 DeepSeek、GLM、Qwen 这些主流大模型打包成标准的 API 服务。不用自己部署模型,不用管 GPU 驱动,注册就能调。最关键的是它完全兼容 OpenA

Pocker_Spades_A的博客 1万+

WPF html格式用richtextbox显示出来 Show HTML in RichTextBox

郁闷 写好提交结果没成功,刚写好的都不见了。没有心情再写了。直接保存代码  string abc2 = ("hahayeyehaha"); string abc = ("hahayeyehaha");TextRange range = new TextRange(txtRichText.Document.ContentStart, txtRichTex

3302

浏览器解析HTML的过程

基于词法单元,依据 HTML 的语法规则,构建一棵解析树(也叫语法树)。在这个过程中,浏览器会将 Token 组合成节点,并按照 HTML 元素的嵌套关系构建树形结构。如果 HTML 文档引用了 CSS 样式(内联样式、外部样式表等),浏览器会解析 CSS 规则,构建 CSS 对象模型(CSSOM)树。如果页面元素的布局发生改变(如添加或删除元素、修改元素尺寸等),就会触发回流,重新进行布局计算。如果只是元素的视觉样式(如颜色、背景等)发生改变,而布局未变,就会触发重绘。

weixin_40682342的博客 670

浏览器是怎么解析 HTML 文档的?

【代码】浏览器是怎么解析 HTML 文档的?

weixin_50517054的博客 772

关于浏览器解析html全过程详解

DOM文档通常加载的步骤: 1.解析HTML结构。 2.加载外部脚本和样式表文件 3.解析并执行脚本代码。 4.DOM树构建完成。//DOMContentLoaded 5.加载图片等外部资源。 6.页面加载完毕。//load 顺序是这样,但很多时候几个步骤是同时发生的。 在这里梳理一下完整流程下的各种细节: 由于浏览器采用至上而下的方式解析,所以会先解析html,直到...

耐得住寂寞也是一种境界 1万+
上一篇: 【每日十分钟前端】浏览器1,浏览器缓存。
下一篇: 【每日十分钟前端】基础篇17,HTML全局属性、CSS工程化的理解、JS中的同步和异步
黎明初时
博客等级 码龄13年 47粉丝 53原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值