惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
G
Google Developers Blog
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Blog — PlanetScale
Blog — PlanetScale
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
I
InfoQ
MyScale Blog
MyScale Blog
V
V2EX
B
Blog
罗磊的独立博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

时间的朋友

Windows 命令行密码重置 Anaconda安装 typescript 注解解读1 Konvajs Shape加载自定义图片 sshpass 使用 why-is-node-running webgl笔记 SharedArrayBuffer is not defined blender 常用快捷键 | 时间的朋友 vue -- v3.4commit提交记录2 vue2 升级vue3报错问题整理 着色器 expressjs 源码 hyper-V arch linux 网络配置 element input数字格式化 three 拼接货架 WebAudio笔记 Windows nginx重启bat脚本 vue -- v3.4commit提交记录 URI malformed vue3 -- Class 对象在组件中使用范例 | 时间的朋友 ruby 安装和升级 element-plus 老版本cascader使用卡死问题 vue3 内置Transition组件 | 时间的朋友 前端memo的实现 | 时间的朋友 Vue -- vue-class-component源码 | 时间的朋友 linux 优化脚本 typescript 装饰器 | 时间的朋友 microbundle 源码 | 时间的朋友 WSL2问题解决WslRegisterDistribution failed with error: 0x800701bc
浏览器工作原理 | 时间的朋友
2023-04-21 · via 时间的朋友

浏览器工作原理

Published: · LastMod: April 25, 2023 · 607 words

浏览器工作原理 🔗

Web 性能包含了服务器请求和响应、加载、执行脚本、渲染、布局和绘制每个像素到屏幕上。

地址栏输入一个 URL 🔗

  1. DNS服务器查询对应IP服务器,如果缓存中没有就进行缓存,缓存中存在则直接从缓存中取出

TCP握手 🔗

与目标服务器建立连接

其中3次握手完成连接建立

image.png

TSL协商 (SSL 握手) 🔗

如果是https,还需要进行TSL协商

image.png

到此浏览器才和服务器建立连接

获取HTML内容 🔗

发出http get请求,获取到html内容

解析html内容 🔗

解析html内容,生成对应的DOM树和CSSOM

image.png

  • 构建DOM树:DOM树是增量的
  • 构建CSSOM树:CSSOM树是阻塞渲染的,因为规则可以被覆盖,所以要等到所有CSSOM完成
  • 构建Render树(DOM和CSSOM结合成render树)只包括可见信息
  • 确定Layout布局:确定节点宽高、对象大小和位置(节点数越多,布局就更耗时)
  • Paint: 绘制到屏幕上

JavaScript编译 🔗

Javascript下载后,浏览器使用抽象语法树传递到解释器中,输出到主线程上执行的字节码。

script中deferasync 🔗

async 🔗

  • 不能保证多个async脚本的执行顺序
  • 可能会中断DOM构建(如果HTML解析器还在执行,但是脚本已经下载完了,会先执行脚本,阻塞解析器继续执行,知道脚本执行完毕)

defer 🔗

  • 在html解析完全完成之后才会执行,DOMContentLoaded之前执行
  • 可以保证顺序,不会阻塞解析器