首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
JavaScript类型:关于类型,有哪些你不知道的细节?
JavaScript对象:面向对象还是基于对象?
JavaScript对象:我们真的需要模拟类吗?
JavaScript对象:你知道全部的对象分类吗?
JavaScript执行(一):Promise里的代码为什么比setTimeout先执行?
JavaScript执行(二):闭包和执行上下文到底是怎么回事?
JavaScript执行(三):你知道现在有多少种函数吗?
JavaScript执行(四):try里面放return,finally还会执行吗?
JavaScript词法:为什么12.toString会报错?
(小实验)理解编译原理:一个四则运算的解释器
JavaScript语法(预备篇):到底要不要写分号呢?
JavaScript语法(一):在script标签写export为什么会抛错?
JavaScript语法(二):你知道哪些JavaScript语句?
JavaScript语法(三):什么是表达式语句?
JavaScript语法(四):新加入的**运算符,哪里有些不一样呢?
HTML语义:div和span不是够用了吗?
HTML语义:如何运用语义类标签来呈现Wiki网页?
CSS语法:除了属性和选择器,你还需要知道这些带@的规则
HTML元信息类标签:你知道head里一共能写哪几种标签吗?
CSS 选择器:如何选中svg里的a元素?
CSS选择器:伪元素是怎么回事儿?
HTML链接:除了a标签,还有哪些标签叫链接?
CSS排版:从毕昇开始,我们就开始用正常流了
HTML替换型元素:为什么link一个CSS要用href,而引入js要用src呢?
HTML小实验:用代码分析HTML标准
CSS Flex排版:为什么垂直居中这么难?
CSS动画与交互:为什么动画要用贝塞尔曲线这么奇怪的东西?
HTML语言:DTD到底是什么?
CSS渲染:CSS是如何绘制颜色的?
CSS小实验:动手做,用代码挖掘CSS属性
HTML·ARIA:可访问性是只给盲人用的特性么?
浏览器:一个浏览器是如何工作的?(阶段一)
浏览器:一个浏览器是如何工作的?(阶段二)
浏览器:一个浏览器是如何工作的(阶段三)
浏览器:一个浏览器是如何工作的?(阶段四)
浏览器:一个浏览器是如何工作的?(阶段五)
浏览器DOM:你知道HTML的节点有哪几种吗?
浏览器CSSOM:如何获取一个元素的准确位置
浏览器事件:为什么会有捕获过程和冒泡过程?
浏览器API(小实验):动手整理全部API
性能:前端的性能到底对业务数据有多大的影响?
工具链:什么样的工具链才能提升团队效率?
持续集成:几十个前端一起工作,如何保证工作质量?
搭建系统:大量的低价值需求应该如何应对?
前端架构:前端架构有哪些核心问题?
当前位置:
首页>>
技术小册>>
深入学习前端重构知识体系
小册名称:深入学习前端重构知识体系
### 浏览器:一个浏览器是如何工作的(阶段三) 在深入探讨“深入学习前端重构知识体系”的过程中,理解浏览器的工作原理是不可或缺的一环。本书的前几章可能已经介绍了浏览器的基础架构、用户界面、渲染引擎等基本概念,而本章节将聚焦于浏览器工作流程的“阶段三”——**页面渲染与交互处理**。这一阶段是浏览器将HTML、CSS、JavaScript等资源转化为用户可交互页面的关键环节,涉及复杂的内部机制和多线程协作。 #### 一、页面渲染流程概览 浏览器从接收到URL开始,经过DNS解析、建立连接、发送HTTP请求、接收响应数据等一系列操作后,进入“阶段三”——页面渲染。这一阶段大致可以分为以下几个步骤: 1. **资源加载**:浏览器根据HTML文档中的链接(如`<img>`、`<script>`、`<link>`等标签),发起对外部资源的请求,如图片、CSS文件、JavaScript脚本等。 2. **解析HTML**:浏览器解析HTML文档,构建DOM(文档对象模型)树。这是一个将HTML文档转换成浏览器内部可操作结构的过程。 3. **解析CSS**:同时或随后,浏览器解析CSS文件,构建CSSOM(CSS对象模型)树。CSSOM树包含了所有样式的信息,用于后续计算元素的最终样式。 4. **构建渲染树**:将DOM树与CSSOM树合并,形成渲染树(Render Tree)。渲染树只包含需要显示的节点及其样式信息。 5. **布局(Layout)**:根据渲染树中每个节点的样式信息,计算其在屏幕上的精确位置和大小。 6. **绘制(Paint)**:将渲染树中的节点转换为屏幕上的像素,生成最终的可视化图像。 7. **合成与显示**:将绘制好的图层进行合成,通过GPU加速渲染到屏幕上。 #### 二、深入解析渲染流程 ##### 1. HTML解析与DOM构建 HTML解析是浏览器工作的核心环节之一。浏览器通过HTML解析器将HTML文档转换为DOM树。这个过程大致可以分为词法分析和语法分析两个阶段。 - **词法分析**:将HTML文本分割成一系列的标记(tokens),如标签名、属性名、属性值等。 - **语法分析**:根据HTML的语法规则,将标记组合成树状结构,即DOM树。DOM树是HTML文档在浏览器中的内部表示,是后续操作的基础。 ##### 2. CSS解析与CSSOM构建 与HTML解析类似,CSS文件也被CSS解析器解析成CSSOM树。CSSOM树包含了文档中所有样式的信息,用于后续计算元素的最终样式。 - **解析CSS规则**:CSS解析器将CSS文件中的样式规则解析成一系列的CSSRule对象,每个CSSRule对象包含选择器和一组样式声明。 - **构建CSSOM树**:根据CSSRule对象,构建CSSOM树。CSSOM树中的每个节点都与DOM树中的节点相关联,用于后续计算元素的最终样式。 ##### 3. 渲染树构建 有了DOM树和CSSOM树之后,浏览器开始构建渲染树。渲染树是DOM树的一个子集,只包含需要显示的节点及其样式信息。 - **节点可见性检查**:不是所有的DOM节点都会显示在屏幕上,如`<head>`标签内的内容、设置了`display: none`的节点等。这些节点在渲染树构建过程中会被忽略。 - **样式计算**:为每个渲染树节点计算最终的样式。这个过程会考虑CSS的继承、层叠和优先级等规则。 ##### 4. 布局(Layout) 布局是计算每个渲染树节点在屏幕上的精确位置和大小的过程。浏览器使用流式布局模型,从左到右、从上到下地安排页面元素。 - **创建布局树**:基于渲染树和计算得到的样式信息,创建布局树(也称为盒模型树)。布局树中的每个节点都包含了元素的尺寸、位置等几何信息。 - **计算布局**:遍历布局树,为每个节点分配精确的坐标和尺寸。这个过程可能会涉及多次迭代,特别是在处理复杂布局(如表格布局)时。 ##### 5. 绘制(Paint) 绘制是将布局树中的节点转换为屏幕上的像素的过程。浏览器会遍历布局树,为每个节点调用绘制方法,将其内容绘制到一块画布或位图上。 - **分层绘制**:为了提高渲染效率,浏览器会将页面分成多个图层。每个图层可以独立地进行绘制和合成。 - **栅格化**:将绘制好的图层转换成由像素组成的栅格图像。这个过程是由栅格化线程完成的,不占用主线程的资源。 ##### 6. 合成与显示 合成是将多个图层合并成一个最终图像的过程。这个过程由合成器线程完成,并通过GPU加速渲染到屏幕上。 - **图层合成**:合成器线程按照一定规则(如图层顺序、透明度等)将多个图层合并成一个最终的图像。 - **GPU渲染**:将合成后的图像传递给GPU进行渲染。GPU利用硬件加速技术,将图像高效地渲染到屏幕上。 #### 三、浏览器多线程协作 在浏览器的工作流程中,多线程协作是提高性能和稳定性的关键。现代浏览器通常采用多进程、多线程的架构来执行不同的任务。 - **浏览器进程**:负责浏览器的整体控制,包括用户界面、地址栏、书签等。 - **网络进程**:负责发起和接收网络请求。 - **渲染进程**(多个):每个标签页对应一个渲染进程,负责页面的渲染和JavaScript的执行。 - **主线程**:负责HTML解析、CSS解析、样式计算、布局、绘制等任务。 - **工作线程**:如JavaScript引擎线程(如Chrome的V8引擎),用于执行JavaScript代码。JavaScript代码的执行不会阻塞主线程的渲染工作。 - **合成器线程**:负责图层的合成和渲染到屏幕上的工作。 - **栅格化线程**:负责将绘制好的图层转换成栅格图像。 #### 四、性能优化与前端重构 了解浏览器的渲染流程和多线程协作机制,对于前端性能优化和重构具有重要意义。以下是一些基于这些知识的性能优化策略: 1. **减少重排和重绘**:重排和重绘是渲染过程中最耗时的操作之一。通过减少不必要的DOM操作、利用CSS的transform属性等方式,可以减少重排和重绘的次数。 2. **合理利用图层**:通过CSS的`will-change`属性或JavaScript的`requestAnimationFrame` API,可以提示浏览器将某些元素提升为单独的图层,从而优化渲染性能。 3. **优化资源加载**:合理组织HTML文档中的资源链接,利用浏览器缓存、CDN等技术,减少资源加载时间和带宽消耗。 4. **异步加载JavaScript**:将JavaScript脚本设置为异步加载(`async`或`defer`属性),可以避免阻塞HTML的解析和渲染。 5. **使用现代前端框架**:现代前端框架(如React、Vue、Angular)提供了高效的组件化和虚拟DOM等技术,可以进一步优化渲染性能和交互体验。 #### 五、总结 本章节深入探讨了浏览器工作的“阶段三”——页面渲染与交互处理。通过解析HTML、CSS,构建DOM树、CSSOM树和渲染树,以及执行布局、绘制和合成等步骤,浏览器将网络资源转化为用户可交互的页面。同时,浏览器通过多线程协作机制,提高了性能和稳定性。了解这些知识,不仅有助于我们更好地理解浏览器的工作原理,还为前端性能优化和重构提供了有力的支持。在“深入学习前端重构知识体系”的旅途中,掌握这些知识将是我们不可或缺的一部分。
上一篇:
浏览器:一个浏览器是如何工作的?(阶段二)
下一篇:
浏览器:一个浏览器是如何工作的?(阶段四)
该分类下的相关小册推荐:
剑指javascript
Javascript-ES6与异步编程
Javascript重点难点实例精讲(一)
npm script实战构建前端工作流
剑指javascript-ES6
编程入门课:Javascript从入门到实战
零基础学JavaScript
javascript设计模式原理与实战
WebSocket入门与案例实战
Node.js 开发实战
ES6入门指南
Flutter核心技术与实战