Monolith模式的问题
-
开发成本
避免干扰到其他模块
理解困难,需要多方开发保持一致
-
debug成本
别人的代码影响
-
迁移调整成本
基础架构调整成本,基本上很难改变
-
部署和版本管理成本
上线慢
需要解决的的问题
- 全局样式的冲突。
- JS 可能存在全局污染的问题。
- 某些库多版本。
微服务需要
- 服务发现
- 运行隔离
- 环境一致
服务发现
用服务发现的方式去组织微前端,除了使复杂的上线流程变得解耦、快捷,还可以使拆散之后的工程版本方便对齐,实现更高的稳定性和可调试性。
最重要的收益是快速上线,独立切换
运行隔离
- 变量保护:全局变量、DOM和CSS基本都是走的这条路。前后两次快照,我们来比较,之后根据需要帮你恢复现场。这块内容不细说了,看一眼图就不言而喻:一次比较对照所有 key、两次遍历、黑名单 location、白名单 readonly。估计我这样一说大家都懂。
- 沙盒时序: 下图是我们做的ABCDE五个模块的加载和混行的时序图。虚线左边是加载,右边是独占线程所占用的时间。也就是说有 ABCDE五个模块五个沙盒,分别在这个模块编译(下载、创建js变量和函数、运行这些语句、最终生成一个 React Component)和运行时(这个模块被打开、渲染对应的所有功能)。