客户端容器 | 青训营笔记

104 阅读3分钟

浏览器架构

  1. 单进程架构
  2. 多进程架构(现代)
  3. 面向服务架构(多进程架构的升级版)

任务管理器-多进程分工:

  • 主进程(浏览器)
  • GPU进程:负责UI绘制
  • 网络进程:资源加载
  • 渲染进程(标签页)
  • 插件进程
  • 其他进程

渲染进程

内部是多线程实现:js引擎,GUI渲染,定时器触发,网络线程,事件触发

js引擎vs渲染引擎

解析执行js-xml解析生成渲染树-桥接方式进行两端通信

多线程工作流程

image.png

chrome运行原理

浏览器地址输入URL后发生了什么?
答:在浏览器主进程中,处理输入-开始导航-服务器中读取响应-寻找渲染进程---
渲染进程中:资源加载-构建DOM和CSSOM和渲染树-布局-绘制-合成-展示完成,返回主进程

具体细节

处理输入

UI线程判断URL(直接请求站点资源)还是query查询条件(将输入发送至搜索引擎,也是一个站点)

开始导航

回车后,UI线程通知网络线程发起网络请求获取站点内容。请求过程中,tab(标签页)处于loading状态

读取响应

网络线程接收到HTTP响应后,先检查响应头的媒体类型。如果是HTML文件,浏览器将内容交给渲染进程处理;如果是其他类型(如zip或者exe)则交给下载管理器处理。

寻找渲染进程

网络线程数据准备完毕之后告知主进程,主进程为该站点寻找一个渲染进程。主进程通过IPC告知渲染进程,渲染进程开始处理,导航结束,进入文档加载阶段。

渲染进程-资源加载

加载HTML文档,顺便加载字资源,比如图片,CSS样式文件和Javascript脚本

渲染进程-构建DOM、CSSOM,渲染树

DOM树-HTML文本转化为浏览器能够理解的结构
CSSOM-将CSS代码转化为浏览器可理解的结构
渲染树-DOM和CSSOM的结合

渲染进程-页面布局

根据渲染树计算每个节点的位置和大小,在浏览器页面区域绘制元素边框;遍历渲染树,将元素以盒模型的形式写入文件流

渲染进程-页面绘制

构建图层-将图层转化为绘制指令交给合成线程-合成线程接受指令生成图块-栅格线程将图块进行栅格化展示在屏幕上

前端一些优化手段

首屏优化:压缩、分包、删除无用代码;静态资源的分离;js脚本非阻塞加载或者放在包的底部;缓存策略;SSR;预置loading,骨架屏。
渲染优化:GPU加速;减少回流、重绘;离屏渲染;懒加载。
js优化:防止内存泄漏;循环尽早break;合理使用闭包;减少dom访问;防抖、节流;web workers

跨端容器

webview,小程序,react native/weex,lynx,flutter...

通用原理

UI组件,渲染引擎,逻辑控制引擎,通信桥梁,底层API抹平表现差异

总结

image (1).png