客户端容器
- 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而不是直接操作
###渲染进程-多线程的工作流程
- 网络线程加载网络资源
- JS引擎解析JS脚本并执行
- JS引擎空闲时,渲染进程立刻工作
- 用户交互、定时器操作等产生回调函数放入任务队列中
- 事件进程进行事件循环,将对列里的任务取出来交给JS引擎执行
一道笔试题(图)
Chrome运行原理
如何展示网页
- (图)
输入处理
- URL或者query
开始导航
- 发出请求
读取响应
- (request)网络线程接收到HTTP响应式后,先检查响应头的媒体类型(MIME Type)
- (response)如果响应主体是一个HTML文件,浏览器将内容交给渲染进程处理
- (response)如果拿到的是其他类型文件,比如zip、exe等,则交给下载管理器处理
寻找渲染进程
- 图
资源加载
- 收到主进程的消息后,开始加载HTML文档
- 除此之外还需要加载子资源,例如一些图片、CSS样式文件及JavaScript脚本等
构建渲染树
- 构建DOM树(转换HTML
- 构建CSSOM树(转换CSS让浏览器理解
- 构建渲染树
页面布局
- 根据渲染树计算每个节点的位置和大小
- 在浏览器页面区域绘制元素边框
- 遍历渲染树,将元素以盒模型的形式写入文档流
页面绘制
- 构建图层
- 绘制图层
- 生成图块
- 图块栅格化(GPU加速)
- 显示到屏幕上
首屏优化
渲染优化
个人心得
这部分好难,但是又感觉很实用,好好听,慢慢记。