客户端容器1 | 青训营笔记

92 阅读3分钟

客户端容器

  • web浏览器及跨端方案

目录

  • 浏览器架构
  • 渲染进程
  • Chrome运行原理
  • 跨端容器

浏览器架构

演进

  • 单进程:所有模块在同一个进程里(早期受硬件限制,另外对于比较基础的进程还可以使用)
  • 多进程架构: (常用)主进程、网络进程、渲染进程、GPU进程、插件进程
  • 面向服务架构:将原来的UI,数据库,文件,设备和网络等作为一个个独立的基础服务,进程之间访问要先定义好接口,通过rpc通信进行交互(可能替代多进程架构)
  • 对比图:扩展性,安全性,稳定性,流畅度

##多进程分工

  • 浏览器(主进程):主要负责页面展示逻辑,用户交互,子进程管理;包括地址栏、书签、前进、后退、收藏夹等
  • GPU进程:负责UI绘制,包含整个浏览器全部UI
  • 网络进程:网络服务进程,负责网络资源加载
  • 标签页(渲染进程):控制tab内的所有内容,将HTML、CSS和JavaScript转换为用户可交互的网页
  • 插件进程:控制网站运行的插件,比如flash,ModHeader等
  • 其他进程:适用程序Storage/Network/Audio Service等

渲染进程

常见浏览器内核

  • edge

多线程架构

  • 哪不是多线程实现,主要负责页面渲染、脚本执行、事件处理、网络请求等

线程

  • JS引擎:js脚本,js程
  • GUI渲染:渲染浏览器界面,解析html,css,构建dom树和render树(JS和GUI互斥)
  • 定时器触发:setTimeout
  • 网络线程:
  • 事件触发:控制事件循环,从任务堆里取出事件运行

JS引擎对比渲染引擎

  • (图)
  • js要去操纵dom树,需要通过bridge而不是直接操作

###渲染进程-多线程的工作流程

  1. 网络线程加载网络资源
  2. JS引擎解析JS脚本并执行
  3. JS引擎空闲时,渲染进程立刻工作
  4. 用户交互、定时器操作等产生回调函数放入任务队列中
  5. 事件进程进行事件循环,将对列里的任务取出来交给JS引擎执行

一道笔试题(图)

Chrome运行原理

如何展示网页

  • (图)

输入处理

  • URL或者query

开始导航

  • 发出请求

读取响应

  • (request)网络线程接收到HTTP响应式后,先检查响应头的媒体类型(MIME Type)
  • (response)如果响应主体是一个HTML文件,浏览器将内容交给渲染进程处理
  • (response)如果拿到的是其他类型文件,比如zip、exe等,则交给下载管理器处理

寻找渲染进程

资源加载

  • 收到主进程的消息后,开始加载HTML文档
  • 除此之外还需要加载子资源,例如一些图片、CSS样式文件及JavaScript脚本等

构建渲染树

  • 构建DOM树(转换HTML
  • 构建CSSOM树(转换CSS让浏览器理解
  • 构建渲染树

页面布局

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

页面绘制

  • 构建图层
  • 绘制图层
  • 生成图块
  • 图块栅格化(GPU加速)
  • 显示到屏幕上

首屏优化

渲染优化

个人心得

这部分好难,但是又感觉很实用,好好听,慢慢记。