目前很多大型业务随着业务的飞速膨胀,单体结构(monolithic)已经远不能符合当前开发模式了,所以后端有微服务,前端有微前端,客户端有组件化,其主要目标都是一致的,都是为了解决单体结构的问题,但是各端也有各自的一些特色,其中后端的拆分最为复杂,而客户端拆分最难以彻底,而微前端则介于这两者之间。
一般来说,都是后端先进行的微服务拆分,而组织架构的调整最好是前后端保持一致,才能确保最低的沟通成本,而从康威定律来看,相应的架构也需要进行同样的调整。
同时服务拆分也给我们带来了异构系统的可能性,不仅仅是后端服务的异构实现,甚至前端也可以采用不同的框架进行搭建,这给予了团队不同的技术选型空间。
服务拆分的最大一个好处就是功能发版不再相互依赖了,减少了团队间的沟通成本与增加了迭代速度。
而对于微前端来说,比较重要的几个方面就是:
- 页面路由
- 跨组件通信
- 页面组合
路由的事情相对比较容易解决,对于多页应用来说,通过配置反向代理即可,只需要定义好各个团队之间的域即可,避免出现冲突等问题。
通信的问题对前端来说也比较容易解决,通过事件冒泡的形式向上传递事件,接收方可以通过在window上加入监听实现。
其中组合的方式较为复杂,有多种形式进行,但是需要保证的是各个团队的职责足够的清晰。
页面合成可以通过:
- iframe
- ajax
- web component
从渲染发生的时间可以分为:
- CSR
- SSR
- 两者混合渲染
可以看到两种渲染方式的明显区别。这种特点在加载时间上也带来了不一样的体验。
下面是技术选型的一个指导。
总结
可以看出来微前端既有一部分微服务在后台拆分思路一致的地方,也有和客户端一样单体页面拆分问题。