前言
https://juejin.cn/post/6854573210109739021#heading-4
本文目标
1.通过从输入URL到页面显示这一整个运行过程,梳理一下相关知识点
- http1.0 http2.0 https TCP/UDP 网络架构 缓存
- 浏览器进程&线程,渲染机制,跨域,安全(XSS,CSRF)
2.主要是把知识成体系的建立起来
依赖知识
1.线程、进程
2.并发、并行
3.同步、异步
4.阻塞、非阻塞
5.浏览器的进程和线程
主体大纲
- 用户输入(输入解析)
- 检查缓存(强缓存和协商缓存)
- DNS解析(IP发查,DNS缓存)
- 建立TCP连接(三次握手,UDP,网络架构,等待tcp队列)
- 建立TLS连接(https)
- 发起http请求(http1.0,http1.1, http2.0, 请求行,请求头,请求体)
- 服务器处理请求
- 服务器响应请求(响应行,响应头,响应体,状态码)
- 端口TCP连接(四次分手)
- 渲染开始(从进程的角度看,中间有一个导航流程)
- 构建dom树
- 样式解析计算(css阻塞问题,结构化,属性标准化,元素样式具体化)
- 构建布局树(创建可见元素的布局树,计算节点位置,优化(重绘,重排相关))
- 分层,生成分层树(原因,分层条件)
- 生成绘制列表,交给合成线程
- 合成线程将图层分为图块,光删化将图块变成位图(
分图块原因) - 合成线程发送绘制图块命令,给浏览器进程
- 浏览器生成页面,显示到显示器上
依赖知识
1.线程和进程
- 进程
- 他是程序的一次执行过程,就是一个程序的运行实例,程序执行过程中分配和管理资源的基本单位
- 启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫做进程
- 线程
- 是CPU调度和分派的基本单位,和同一进程的其他线程共享资源
- 关系
- 线程是进程的一部分,不能单独存在的,它是由进程来启动和管理的,一个进程有多个线程
2.并发和并行
- 开发的关键是你有处理多个任务的能力,不一定要同时。(吃饭吃到一半电话来了,去打电话,再吃饭)
- 并行的关键是你有同事处理多个任务的能力(一边打电话,一边吃饭)