Chrome浏览器原理及优化
1. 相关面试题
1.1. 请说说从输入 URL 到页面渲染完成的全过程
1. 输入URL,用户在浏览器的地址栏输入一个URL,并按下回车键;
2. DNS解析;
浏览器需要将域名转换为服务器的IP地址,以建立连接。
(1). 如果浏览器缓存、操作系统缓存或路由器缓存中已有该域名的IP地址,则直接获取;
(2). 否则,会向本地域名服务器发起DNS查询请求,通过递归查询的方式获得IP地址;
3. TCP链接;
浏览器与目标服务器之间使用三次握手建立TCP连接:
(1). SYN:浏览器发送SYN同步序号请求包,要求服务器建立连接;
(2). SYN-ACK:服务器收到SYN包后,回应SYN-ACK包;
(3). ACK:浏览器收到SYN-ACK包后,回复ACK确认包,完成连接;
4. TLS握手;
如果使用HTTPS,浏览器与服务器之间进行TLS握手,确保传输的安全性:
(1). 客户端问候:浏览器发送支持的加密套件列表和随机数;
(2). 服务器问候:服务器选择加密套件、返回公钥证书和随机数;
(3). 密钥生成:双方通过公钥证书和随机数生成会话密钥;
(4). 握手完成:双方使用生成的会话密钥加密通信;
5. 发送HTTP请求;
建立连接后,浏览器发送HTTP请求:
(1). 请求行:包括方法、路径、HTTP版本,如GET / HTTP/1.1;
(2). 请求头:携带相关头信息,如User-Agent、Accept-Language;
(3). 请求体:通常在POST请求中携带数据;
6. 服务器处理请求;
服务器接收到请求后:
(1). 根据URL和请求方法,确定处理逻辑;
(2). 可能需要查询数据库或调用其他API;
(3). 生成响应,包括响应行、响应头和响应体;
7. 返回HTTP响应;
服务器发送响应:
(1). 响应行:包括HTTP版本、状态码、状态描述,如HTTP/1.1 200 OK;
(2). 响应头:携带相关头信息,如Content-Type、Cache-Control;
(3). 响应体:通常是HTML、JSON、图片等内容;
8. 浏览器渲染页面;
浏览器开始渲染页面,主要经过以下阶段:
(1). 构建DOM树;
解析HTML文档,构建DOM树,遇到外部资源CSS、JavaScript或是图片时,根据属性决定是否同步或异步加载。
(2). 构建CSSOM树;
解析CSS文件和<style>标签,构建CSSOM树。
(3). 合成渲染树;
将DOM树和CSSOM树合并,生成渲染树,只包含可见元素。
(4). 布局计算;
确定每个元素的大小和位置,根据CSS盒模型进行布局。
(5). 绘制;
绘制每个元素的内容,包括文本、图像、背景等。
(6). 分层与合成;
渲染层分为多个图层,独立绘制并最终组合成完整页面。
9. 执行JavaScript
在页面渲染过程中或渲染完成后,浏览器执行JavaScript脚本:
(1). 阻塞脚本:在构建DOM时遇到<script>标签会暂停解析,直到脚本加载并执行完成;
(2). 异步脚本:async和defer属性可用于异步加载和执行脚本,不阻塞DOM解析;
10. 事件处理与交互
(1). 页面加载完成后,浏览器继续处理用户的交互操作;
(2). 根据事件绑定的处理函数,执行相应的JavaScript代码;
1.2. DOM和CSSOM的关系和影响
1. 描述DOM和CSSOM是如何分别构建的?
DOM是通过解析HTML文档来构建的,每个HTML标签都会变成DOM树中的一个节点。
CSSOM是通过解析CSS文件和<style>标签中的样式信息构建的,它反映了所有CSS规则和对应样式属性的层次结构。
2. 它们是如何相互影响,最终形成渲染树的?
当DOM和CSSOM均构建完成后,浏览器将它们合并成一个渲染树,该树只包括页面中实际需要渲染的元素及其样式信息。
3. 修改DOM或CSSOM中的元素对页面渲染有何影响?
修改DOM或CSSOM都可能引发重排和重绘,严重时会导致整个页面的重新渲染,影响性能,可以借助 transform3D调用GPU优化,减少重排。
1.3. 浏览器的重排与重绘怎么理解
1. 解释什么是重排和重绘?
重排是指浏览器为了重新计算页面布局而进行的过程,通常发生在添加或删除可见的DOM元素,或者元素尺寸改变的情况下。
重绘发生在元素的外观改变,但位置和尺寸未变的情况下,例如改变颜色、阴影等。
2. 提供哪些常见操作会触发重排和重绘?
常见触发重排的操作包括修改DOM结构、改变元素位置和尺寸,而改变颜色或背景图将触发重绘。
3. 如何优化代码以减少重排和重绘的影响?
优化方法包括使用CSS类进行样式变更而非直接操作样式属性,避免在循环中直接操作DOM,利用文档碎片或虚拟DOM来批量更新DOM,使用transform和opacity进行动画处理,因为这些属性可以由合成器处理。
1.4. 请说说浏览器的合成层
1. 什么是浏览器的合成层?
合成层是浏览器处理完重排和重绘后,将页面分割成多个层次,然后由合成器合成最终视觉输出的过程。每个层可以单独被GPU处理,以优化性能。
2. 为何某些CSS属性可以触发GPU加速?
CSS属性如transform和opacity可以触发GPU加速,因为它们不影响DOM的布局,而只是影响元素的外观和位置变换。GPU处理这类变换比CPU更高效,因为GPU专门设计来处理图形和视觉效果。
3. 如何通过开发者工具来识别和优化合成层的性能?
使用Chrome等浏览器的开发者工具的“Layers”面板可以查看页面的层信息。通过这些工具,开发者可以观察哪些元素被创建成单独的层,评估合成层的性能,并进行相应的优化,比如减少不必要的层,合并可以合并的层,或调整动画使用合适的属性来优化GPU处理。
2. 浏览器渲染过程详解

2.1. DNS 查询
对于一个 web 页面来说导航的第一步是要去寻找页面资源的位置。如果导航到 Example Domain,HTML页面被定位到 IP 地址为93.184.216.34的服务器。如果以前没有访问过这个网站,就需要进行 DNS 查询。
浏览器向域名服务器发起 DNS 查询请求,最终得到一个 IP 地址。第一次请求之后,这个 IP 地址可能会被缓存一段时间,这样可以通过从缓存里面检索 IP 地址而不是再通过域名服务器进行查询来加速后续的请求。
每个主机名 在页面加载时通常只需要进行一次 DNS 查询。但是,对于页面指向的不同的主机名,则需要多次 DNS 查询。如果字体、图像、脚本、广
相关文章:
Chrome浏览器原理及优化
1. 相关面试题 1.1. 请说说从输入 URL 到页面渲染完成的全过程 1. 输入URL,用户在浏览器的地址栏输入一个URL,并按下回车键; 2. DNS解析; 浏览器需要将域名转换为服务器的IP地址,以建立连接。 (1). 如果浏览器缓存、操作系统缓存或路由器缓存中已有该域名的IP地址,…...
2025_2_9 C语言中队列
1.队列(先进先出) 队列也是一种受限制的线性结构 它只能在一端添加元素,在另一端访问,删除元素 (队首插入,队尾删除) 因为链表实现没有数组实现快,所以队列大多数是用数组实现的 q…...
[图文]DeepSeek能做对《软件方法》的测试题吗?
目前为止,我已经针对《软件方法》涉及的知识点出了几百道选择题,我们来看一下DeepSeek能不能做对这些题。 在选择题目时,我刻意向后兼容,选择只要受过严谨的软件开发方法学训练,即使没听说过《软件方法》也应该能通过…...
推荐个Deepseek网站
这几天有用到Deepseek,但是官网老时崩溃,硅基流动这个网站感觉还可以用,赠送了十多块钱,用完要收费,但比较便宜,可以接受。 https://siliconflow.cn/zh-cn/models 这里可以设置给模型添加固定的标签需求...
【Linux开发工具】C/C++ 在Linux下的编译器-gcc/g++
目录 一、前言 二、gcc/g的使用 三、程序翻译的四个阶段 1.预处理 2.编译 3.汇编 4.链接 四、动静态库 1.库函数的命名和分类 2. 动静态库的区别 一、前言 学习了vim的使用方法后,我们就可以高效编辑文本文件了,但vim并不像vs一样编辑好.c文件…...
hmi界面:工业设计风格如何识别,有什么应用场景。
一、工业设计风格在 HMI 界面中的视觉特征 (一)简洁的布局 功能分区明确 工业设计风格的 HMI 界面往往将不同的功能模块进行清晰的分区,每个区域都有明确的用途。例如,操作区、显示区、状态区等划分一目了然,用户可以…...
NIO三大组件
文章目录 概述Channel & BufferSelector服务器设计历史演化多线程版设计线程池版设计selector 版设计 概述 NIO的意思是 non-blocking io 非阻塞 IO 。NIO中存在3大组件:Channel 、 Buffer 、Selector Channel & Buffer channel (中文 管道的…...
pytest.fixture
pytest.fixture 是 pytest 测试框架中的一个非常强大的功能,它允许你在测试函数运行前后执行一些设置或清理代码。以下是关于 pytest.fixture 的详细介绍: 一、定义与用途 pytest.fixture 是一个装饰器,用于标记一个函数为 fixture。Fixture 函数中的代码可以在测试函数运…...
MHTML文件如何在前端页面展示
MHTML文件如何在前端页面展示 需求背景: 目前在给证券公司做项目,但是在使用新系统的过程中,甲方还希望之前之前系统的历史记录可以看到。 最初制定的计划是项目组里面做数据的把原系统页面爬取下来,转成图片,直接给…...
学习笔记:在华为云ModelArts上运行MindSpore扩散模型教程
目录 一、背景与目的 二、环境搭建 三、模型原理学习 1. 类定义与初始化 2. 初始卷积层 3. 时间嵌入模块 4. 下采样模块 5. 中间模块 6. 上采样模块 7. 最终卷积层 8. 前向传播 9. 关键点总结 四、代码实现与运行 五、遇到的问题及解决方法 六、总结与展望 教程来源:…...
使用sharding-jdbc实现读写分离
简介 读写分离是一种数据库架构设计的模式,主要用于提高数据库的性能和可扩展性。它将数据库的读取操作和写入操作分离到不同的数据库实例上,从而优化系统的负载和响应速度。 实现前提是需要进行主从复制(数据层面的分离) 实现…...
“图像识别分割算法:解锁视觉智能的关键技术
嘿,各位朋友!今天咱们来聊聊图像识别分割算法。这可是计算机视觉领域里特别厉害的一项技术,简单来说,它能让机器“看懂”图像中的不同部分,并把它们精准地分出来。想象一下,机器不仅能识别出图里有猫还是狗…...
【Go语言快速上手】第二部分:Go语言进阶
文章目录 并发编程goroutine:创建和调度 goroutinechannel:无缓冲 channel、有缓冲 channel、select 语句无缓冲 channel有缓冲 channelselect 语句 sync 包:Mutex、RWMutex、WaitGroup 等同步原语Mutex:互斥锁RWMutex:…...
GRN前沿:GRETA:从多模式单细胞数据推断基因调控网络方法的比较与评价
1.论文原名:Comparison and evaluation of methods to infer gene regulatory networks frommultimodal single-cell data 2.发表日期:20254.12.21 摘要: 细胞通过基因表达调节其功能,由转录因子和其他调节机制的复杂相互作用驱…...
python基础入门:4.4模块与包管理
Python模块与包管理完全指南:构建可维护的代码结构 # 示例项目结构 """ my_package/ ├── __init__.py ├── core/ │ ├── __init__.py │ ├── utils.py │ └── calculator.py ├── data/ │ └── config.json └── tes…...
《XSS跨站脚本攻击》
一、XSS简介 XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XSS,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名&…...
LC-两数之和、字母异位词分组、最长连续序列、移动零、盛最多水的容器
两数之和 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length; // 获取数组 nums 的长度// 外层循环:遍历数组中的每一个元素 nums[i]for(int i 0; i < n; i) {// 内层循环:从 nums[i] 的下一个元素 nums[j] 开始遍…...
Netty源码解析之线程池的实现(二):创建线程与执行任务
前言 先看下面的代码: public class MyTest {public static void main(String[] args) {//创建NioEventLoopGroupNioEventLoopGroup loopGroup new NioEventLoopGroup(3);System.out.println(Thread.currentThread()"准备执行任务");//执行任务for (in…...
IDEA - 一个启动类多次启动方法
More Run/Debug -> Modify Run Configuration -> modify options -> Allow mutiple instances...
U3D支持webgpu阅读
https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
