单纯根据对概念的理解,很容易想到实现微前端的重要思想就是将应用进行拆解和整合,通常是一个父应用加上一些子应用,那么使用类似Nginx配置不同应用的转发,或是采用iframe来将多个应用整合到一起等等这些其实都属于微前端的实现方案:
- Nginx路由转发
通过Nginx配置反向代理来实现不同路径映射到不同应用,例如www.abc.com/app1对应app1,www.abc.com/app2对应app2,这种方案本身并不属于前端层面的改造,更多的是运维的配置。
优点:简单,快速,易配置
缺点:在切换应用时会触发浏览器刷新,影响体验
- iframe嵌套
父应用单独是一个页面,每个子应用嵌套一个iframe,父子通信可采用postMessage或者contentWindow方式
优点:实现简单,子应用之间自带沙箱,天然隔离,互不影响
缺点:iframe的样式显示、兼容性等都具有局限性;太过简单而显得low
- Web Components
每个子应用需要采用纯Web Components技术编写组件,是一套全新的开发模式
优点:每个子应用拥有独立的script和css,也可单独部署
缺点:对于历史系统改造成本高,子应用通信较为复杂易踩坑
- 组合式应用路由分发
每个子应用独立构建和部署,运行时由父应用来进行路由管理,应用加载,启动,卸载,以及通信机制
优点:纯前端改造,体验良好,可无感知切换,子应用相互隔离
缺点:需要设计和开发,由于父子应用处于同一页面运行,需要解决子应用的样式冲突,变量对象污染,通信机制等技术点