其他分享
首页 > 其他分享> > 解密微前端:浅谈微前端生态

解密微前端:浅谈微前端生态

作者:互联网

解密微前端:浅谈微前端生态

玩弄心里的鬼发布于 2021-07-21   English

这篇文章算是我对在阿里做微前端的一个总结吧,没有写的事无巨细,更像是一个对自己的备忘录,很多地方因为做的比较久了记忆也比较模糊了我也会慢慢补充。

我对微前端的理解

当我们在谈论微前端的时候,往往提到的是一个前端的架构模式:一种瓦解前端“巨石应用”的分治方案。但是在我看来,随着微前端在企业级中后台应用的广泛使用,我们在谈论微前端的时候已经衍生到一整套前端生态闭环(加载器、路由、发布系统、应用插件等等),甚至当这套生态跑流畅之后可以落地出一整套微前端的解决方案。

因此,我对微前端的理解就是:

而抛去以上架构层面的认知,我觉得微前端首要解决的问题是团队合作 / 效能所带来的前端工程化问题。

架构背景

我一直认为当我们谈论生态闭环或者解决方案的时候配合架构背景会更有说服力,也能让大家理解我们很多地方为什么要这么做。

之前微前端系列的第一篇文章已经详细介绍了我们的项目架构背景,这里在简单回顾下,详情见《解密微前端:"巨石应用"的诞生》

模版架构

弊端:

iframe 架构

诉求:

弊端:

微前端架构

诉求:

业界痛点

这里我在搭建微前端生态的时候和阿里的其他的团队做了交流,收集了其他团队在微前端生态搭建过程中的遇到的痛点:

我们在微前端生态相关的建设

微前端框架

微前端框架在我们的技术选型是 qiankun,当时的选型目标比较简单粗暴:

而在我看来作为微前端生态中最终要的一环,微前端款框架应该集成了最核心的功能:

前三点都是采用的框架本身提供的能力,而应用间通信我们采用了自建的方案。

为什么自建通信模型?

其实框架侧提供的通信方案基本上能满足大部分业务场景,但是我们再次基础上有着更高的诉求:

为此,我们在 iframe 通信模型的基础上,基于宿主环境判断封装了微前端的发布订阅模型,采取完全相同的 API,子应用不再关心自己的接入方式和宿主环境。

应用管理

路由管理

在聊应用管理之前我想先聊一下路由管理,对于大型的 B 端系统,一套合理的路由规则是极其重要的,尤其我们的系统是对外使用的:

这里首先在路由约束下,我是采取了下面的规则:/:platform/:privilegeKey/:childHash

子应用版本控制

对于国内主流的微前端方案来说都提供了两种方式的接入:

这两种方式决定了发布系统如何配合我们的微前端生态,这里我们采取的是第一种方案。

为什么采用 entry 模式?

容灾(应急策略)

在容灾降级这边,因为我们已经有了一套比较成熟的 iframe 生态,并且微前端方案在我设计的时候就多处做好了向下兼容的策略,因此我们对于容灾降级就是降级成 iframe 方案,对于 iframe 依旧异常的场景就只能通过监控报警来兜底了。

子应用赋能

在我看来,子应用赋能是微前端中不可或缺的一环,下面主要向大家介绍下我在子应用赋能方面所做的一些事。

通信模型

通信模型上面已经简单提过了,这里就不过多赘述了。

自动埋点

主子应用同时挂载埋点 SDK 的话是没有意义的,设置会增加数据“噪音”,因此仅需要主应用挂载 SDK 即可。我这里基于集团的埋点 SDK 做了二次封装,在主应用 ready 的时候挂载埋点 SDK,并以当前的 microKey 作为埋点的 id 聚合子应用的埋点,并且对子应用开放埋点调用事件。

总结起来就是:

异常监控

和埋点一样,异常监控我们也采用主应用挂载的形式,并以 microKey 做监控聚合。但是不同的是,监控这块我们暴露了卸载主应用监控的事件给子应,接入的不同团队的不同应用可能采取了完全不同的监控体系,而监控 SDK 的底层远离都是劫持 fetch 等原生事件去做的,不同的 sdk 间很可能出现污染。

路由中台

在路由规则和权限点的基础上,我们也落地了自己的路由管控配置平台,我们收口了全部子应用间路由跳转的 url,替换为按照路由事件 + schema 的形式让子应用调用,这样在子应用自有链接随着业务迭代的时候只需要同步到路由中台,便不需要其他子应用同步更新路由链接了。

其他赋能

这里还有很多根据我们业务域定制的一些能力,我就不一一细说了:

最后

最后简单说下我个人认为的微前端最佳实践吧:

标签:浅谈,前端,解密,生态,iframe,埋点,应用,路由
来源: https://www.cnblogs.com/sexintercourse/p/16506155.html