前言
本节课程主要着重介绍浏览器的架构以及运行原理,并以一道八股文为例,讲解在Chrome浏览器里,网页是如何加载并且渲染成我们所见的画面。通过对本节课的学习,你还能了解到在浏览器里JS引擎和渲染引擎如何协同工作,如何从多个角度优化前端的性能体验。再以webview容器为扩展,带你认识一些常见的跨端方案。
浏览器架构
浏览器架构演进
- 单进程架构: 所有模块运行在同一个进程里,包含网络、 插件、JavaScript运行环境等
- 多进程架构:主进程、网络进程、渲染进程、GPU进程、插件进程
- 面向服务架构:将原来的UI、数据库、文件、设备、网络等,作为一个独立的基础服务
浏览器架构对比
架构类型 | 扩展性 | 安全性 | 稳定性 | 流畅度 |
---|---|---|---|---|
单进程架构 | 低,所有模块运行在同一进程里,访问同一块内存区域,数据没有隔离,新增模块可能会影响原有功能 | 低,三方插件可直接访问操作系统里任意资源 | 低,三方插件漏洞或者某个tab页面JavaScript脚本问题可能导致浏览器崩溃 | 卡顿,所有页面运行在同一进程中,开启多个页面时明显卡顿 |
多进程架构 | 中,各进程分配独立的内存区域有些进程功能较大,耦合度高 | 高,运行在独立沙箱中,不能访问系统敏感资源 | 高,进程相互隔离,当一个页面或者插件崩溃时,不会影响其他进程 | 流畅,每个页面运行在独立的渲染进程中,充分利用系统资源 |
面向服务架构 | 高,服务模块划分更细,更内聚、耦合性低,易于扩展 | 高,运行在独立沙箱中,不能访问系统敏感资源 | 高,进程相互隔离,当一个页面或者插件崩溃时,不会影响其他进程 | 流畅,每个页面运行在独立的渲染进程中,充分利用系统资源 |
多进程分工
- 浏览器(主进程):主要负责页面展示逻辑,用户交互,子进程管理;包括地址栏、书签、前进、后退、收藏夹等
- GPU进程:负责UI绘制,包含整个浏览器全部UI
- 网络进程:网络服务进程,负责网络资源加载
- 标签页(渲染进程):控制tab内的所有内容,将Html、Css和Java Script转换为用户可交互的网页
- 插件进程:控制网站运行的插件,比如flash、 ModHeader等
- 其他进程:如上图所示:适用程序Storage/Network/Audio Service 等
渲染进程
JS引擎vs渲染引擎
- 解析执行JS
- XML 解析生成渲染树,显示在屏幕
- 桥接方式通信
多线程工作流程
- 网络线程负责加载网页资源
- JS引擎解析JS脚本并且执行
- JS解析引擎空闲时,渲染线程立即工作
- 用户交互、定时器操作等产生回调函数放入任务队列中
- 事件线程进行事件循环,将队列里的任务取出交给JS引擎执行
跨端容器
为什么需要跨端
- 开发成本、效率
- 一致性体验 6018
- 前端开发生态
跨端容器-使用WebView优势
- 一次开发,处处使用,学习成本低
- 随时发布,即时更新,不用下载安装包
- 移动设备性能不断提升,性能有保障 4.通过JSBridge和原生 系统交互,实现复杂功能
跨端容器-通用原理
-
UI组件
-
渲染引擎
-
逻辑控制引擎
-
通信桥梁
-
底层API抹平表现差异
其他
今天的学习就到这里啦!神奇的前端有没有激发你的兴趣呢,快来跟我一起探索吧!
重铸前端荣光,我辈义不容辞!