从出入 URL 到页面展现中间发生了什么
导航流程
- 用户输入 URL
- 浏览器解析 URL,拼出完整的 URL
- 把 URL 进程通过 IPC 把 URL 发给网络进程
- 网络进程检查本地是否有缓存,有直接用,没有进入网络请求流程
- 返回的数据进行类型处理,页面返回的 text/html
- 网络进程通知浏览器进程收到网络请求响应,浏览器进程判断是否和之前的是同一个站,是,就服用原来的渲染进程,否就开一个新渲染进程进展,
- 通知渲染进程提交文档,渲染进程和网络进程建立连接管道传输数据
- 数据传输完成,渲染进程通知浏览器确认提交,浏览器进程更新浏览器界面,修改导航状态
- 渲染进程开始页面解析和子资源加载
渲染阶段
-
DOM 生成 传入 html 根据 html 生成 DOM 树 输出 DOM 树
-
样式计算 传入 css 根据 css 生成层叠样式表 stylesheet,转换样式表把样式属性标准化,计算 DOM 树每个节点的具体样式 输出层叠眼样式表 stylesheet
-
生成布局树 根据 DOM ,去掉不可见元素,比如 head 标签里面的东西,比如 display:none,跟具层叠样式表,计算元素的几何坐标位置,得出可见布局树
-
分层 根据两种情况:
- 使用 css 层叠样式属性
- 出现内容裁剪 把页面进行分层
-
输出绘制指令
-
栅格化 提交绘制指令到合成线程 根据视口生成图块
-
合成与显示 合成线程提交绘制图块指令给浏览器进程,浏览器进程开始绘制并生成页面