客户端容器 | 青训营笔记

93 阅读4分钟

所有图片来自 字节前端训练营 - 客户端容器.pptx - 飞书云文档 (feishu.cn)

此文档是对对应课程 客户端容器 - 掘金 (juejin.cn) 的笔记

浏览器架构

单进程、多进程、面向服务

单进程:所有服务都在浏览器进程中实现。

多进程:主进程、网络进程、渲染进程、GPU进程、插件进程(进程间相互隔离、运行在沙盒中)。

面向服务的进程:按照服务类型,将UI、数据库、设备、网络等基础服务,分别在自己的进程中运行,进程间通信需要实现定义接口,通过IP通信实现交互。

image.png

image.png

前置知识:

  • 进程是计算机分配资源的最小单位;
  • 线程是计算机调度的最小单位;
  • 一个进程是指一个程序在特定的数据、内存空间等资源的条件下的一次运行过程。
  • 一个进程有至少一个线程,也可以多个线程同步运行,同一个进程的多个线程共享一块内存。

扩展性

单进程架构通过多个线程实现各模块的功能,此时各模块访问同一块内存单元,导致内存的使用容易出现冲突,添加新的模块比较困难,扩展性差。

多进程架构使用多个进程实现,此时各模块在独立的内存区域运行。解决了内存空间的冲突问题,但一些大型的进程,其涵盖的服务比较多,耦合度较高。

面向服务的架构是在架构的基础上,按服务类型划分进程,实现了高内聚、低耦合。

安全性、稳定性、流畅性

仍是基于单进程与多进程的差异:单进程由于使用同一块内存单元,不同的线程可能会访问同一块内存,由此引发的:

  • 安全问题
  • 同一个函数的结果可能不同(不同时刻的内存空间可能被其它线程修改)
  • 以及受到资源限制的卡顿(临界资源、锁)

多进程分工:

image.png

渲染进程

常见的浏览器内核

image.png

渲染进程的多线程架构

image.png

js引擎与渲染引擎

image.png

js引擎实际上是一种语法解析服务,将js源码视作文本,通过语法分析、语义分析等解析并构建AST抽象语法树,再根据抽象语法树翻译出字节码,交由操作系统解析执行。

V8引擎额外做了一些优化,对于使用频率较高的语句,转化为机器码,下次遇到时,可以直接运行,加快整体的运行效率。对于一些发生变化的常见语句,或其出现频次降低后,执行去优化操作,不再对其转换。

渲染引擎则通过xml解析生成渲染树,根据渲染树的结构渲染。

image.png

chrom运行原理

页面渲染与展示的过程

image.png

浏览器收到url

UI线程通知网络线程发送网络请求

网络线程收到HTTP响应后,根据响应头的信息分别处理:

  • 错误:返回错误类型码等
  • 收到html、css等 交给渲染进程处理
  • 收到zip、资源文件等 交给资源下载器处理

网络进程处理完毕,通过IPC告知主进程;

主进程通过IPC告知渲染进程;

渲染进程收到并返回确认消息(开始处理)

  • 进程开始加载资源(html、css、js等)
  • 构建DOMtree CSSOMtree
  • 组成渲染树
  • 计算布局、元素大小
  • 构建、绘制图层,生成图块
  • 图块的栅格化(转化为位图)
  • 展示在屏幕上

优化

首屏优化

  • 压缩、分包、treeshaking
  • 静态资源分离(将静态资源和动态资源分开部署,获取静态资源时,可以通过缓存优化)
  • js非阻塞加载
  • 缓存
  • SSR
  • 预置loading、骨架屏

渲染优化

  • GPU加速
  • 减少重绘、回流
  • 离屏渲染
  • 懒加载

js优化

  • 防止内存泄漏
  • 早结束循环
  • 合理使用闭包
  • 较少DOM访问
  • 防抖节流
  • Web Workers

跨端容器

image.png

react Native

image.png