一、背景/出现原因
iframe 的弊端
iframe 就相当于页面里再开个窗口加载别的页面,但是它有很多弊端:
- 每次进来都要加载,状态不能保留
- DOM 结构不共享。比如子应用里有一个 Modal,显示的时候只能在那一小块地方展示,不能全屏展示
- 无法跟随浏览器前进后退
- 天生的硬隔离,无法与主应用进行资源共享,交流也很困难
而 SPA 正好可以解决上面的问题:
- 切换路由就是切换页面组件,组件的挂载和卸载非常快
- 单页应用肯定共享 DOM
- 前端控制路由,想前就前,想后就后
- React 通信有 Redux,Vue 通信有 Vuex,可与 App 组件进行资源共享,交流很爽
二、解决什么问题,
解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用后,随之而来的应用不可维护的问题。
- 独立发布
- 存量系统增量迁移/重构
- 将大型巨石应用拆分
- 允许各个技术团队自行选择技术框架
三、应用场景
四、架构模式
- 基座模式(中心化)。通过一个主应用来管理其他应用。设计难度小、方便实践,但是通用度低。
- 自组织模式(去中心化)。应用之间是平等的,不存在相互管理的模式。设计难度大,不方便实施,但是通用度高。
四、主流方案对比,优劣比较
- Single-Spa
- 乾坤
- webpack5 模块联邦
- EMP
- icestark