第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情?
1.从触屏到 CPU
2.CPU 内部的处理
3.从 CPU 到操作系统内核
4.从操作系统 GUI 到浏览器
5.扩展学习
第二个问题:浏览器如何向网卡发送数据?
1.从浏览器到浏览器内核
2.HTTP 请求的发送
3.DNS 查询
4.通过 Socket 发送数据
5.Socket 在内核中的实现
6.底层网络协议的具体例子
7.扩展学习
第三个问题:数据如何从本机网卡发送到服务器?
1.从内核到网络适配器(Network Interface Card)
2.连接 Wi-Fi 路由
3.运营商网络内的路由
4.主干网间的传输
5.IDC 内网
6.服务器 CPU
7.扩展学习
第四个问题:服务器接收到数据后会进行哪些处理?
1.负载均衡
2.LVS
3.反向代理
4.Web Server 中的处理
5.进入后端语言
6.Web 框架(Framework)
7.读取数据
8.扩展学习
第五个问题:服务器返回数据后浏览器如何处理?
1.从 01 到字符
2.外链资源的加载
3.JavaScript 的执行
4.从字符到图片
5.跨平台 2D 绘制库
6.GPU 合成
7.扩展学习
第六个问题:浏览器如何将页面展现出来?
1.Framebuffer
2.从内存到 LCD
3.LCD 显示
4.扩展学习
本文所忽略的内容
为了编写方便,前面的介绍中将很多底层细节实现忽略了,比如:
内存相关
1.堆,这里的分配策略有很多,比如 malloc 的实现
2.栈,函数调用,已经有很多优秀的文章或书籍介绍了
3.内存映射,动态库加载等
4.队列几乎无处不在,但这些细节和原理没太大关系
各种缓存
CPU 的缓存、操作系统的缓存、HTTP 缓存、后端缓存等等
各种监控
很多日志会保存下来以便后续分析