微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。

特点

将网站或Web应用程序视为由独立团队拥有的功能的组合。每个团队都有自己关心和专长的不同业务或任务领域。一个团队具有跨职能,并且从数据库到用户界面,端到端地开发其功能。

核心思想

技术栈无关

  • 微前端的核心价值在于 “技术栈无关”,这才是它诞生的理由,或者说这才是能说服我采用微前端方案的理由。

独立开发、独立部署

增量升级

建立团队前缀

优于自定义API的本机浏览器功能

建立弹性站点

解决了什么问题

  • 可控体系下的前端协同开发问题(含空间分离带来的协作和时间延续带来的升级维护)

  • 解构巨石应用

  • 避免巨石应用随着技术更迭、产品升级、人员流动带来的工程上的问题

带来了什么价值

  • 产品的组合能力

  • widget 的产品输出能力

  • 主要还是工程上的价值,产品能力只是其延伸

微前端的架构姿势

核心原则:技术栈无关!!!

  • 具体来讲:应用之间不应该有任何直接或间接的技术栈、依赖、以及实现上的耦合

架构目标

  • 方案上跟使用 iframe 做微前端一样简单,同时又解决了 iframe 带来的各种体验上的问题

对比iframe

iframe的特点

  • 优点:提供了浏览器原生的硬隔离方案,可以完美解决CSS和JS的隔离问题
  • 缺点:隔离性无法被突破,导致应用间上下文无法被共享,以及随之带来的较差的开发体验、产品体验

为什么不用iframe

  • url 不同步。浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用
  • UI 不同步,DOM 结构不共享
  • 全局上下文完全隔离,内存变量不共享。iframe 内外系统的通信、数据同步等需求,主应用的 cookie 要透传到根域名都不同的子应用中实现免登效果。
  • 慢。每次子应用进入都是一次浏览器上下文重建、资源重新加载的过程。

如果是widget级别,微前端和业务组件的区别在哪?

采用微前端的核心原因是:技术栈无关!无论是对遗产项目的改造,还是对新项目的架构选择,技术栈无关的前提能让项目可持续发展,易上手、易维护。

最后

事实上如果所有的 web 技术栈能做到统一,所有 library 的升级都能做到向下兼容,我们确实就不需要微前端了


 评论