知识卡片

微前端三种落地路径:隔离渲染、流式拼接、应用挂载

结构图卡

内容

微前端落地的核心问题都是同一个:把若干独立开发部署的小前端应用,在用户看到的那一刻重新拼接成一个完整页面,业界常见的三类实现路径,本质是”在哪一层做拼接、拼接的时机是同步还是异步”的不同选择。第一类基于iframe实现,利用浏览器原生的应用隔离能力,把各子应用直接嵌入页面指定位置,实现简单但天然存在样式隔离生硬、iframe间通信复杂、SEO不友好等代价,因此实践中常被视为最容易想到但较少深入使用的方案。第二类基于服务端页面布局服务实现,由服务端异步获取各个页面片段并将其流式组合成一个输出流再返回浏览器,例如Tailor会先解析模板占位符,再并行请求各片段、支持片段失败时的容错兜底,这种”边生成边流式传输”的思路源自Facebook的BigPipe,核心是把Web服务器生成数据和浏览器渲染页面这两个原本串行、互相等待的阶段尽量并行重叠,缩短用户能感知到的白屏和首屏时间。第三类基于微前端框架(如Single-SPA)实现,框架内维护一个应用注册表,当URL路由命中某个已注册子应用时,依次触发该子应用的load、bootstrap、mount生命周期钩子完成挂载,路由离开时触发unmount卸载,子应用彼此技术栈完全独立,且已有项目往往无须重构即可接入。由于挂载后的多个子应用天生运行在各自独立的技术栈里,无法直接共享组件状态,跨应用通信通常需要额外引入一个与具体框架无关的事件总线(发布订阅模式),而不能依赖任何一方框架自身的状态管理机制。

结构图

flowchart TB
  Q["如何把多个独立子应用拼接成一个页面?"]
  Q --> A["方案一:iframe隔离<br/>浏览器原生隔离,实现简单<br/>代价:样式/通信隔离生硬,SEO差"]
  Q --> B["方案二:服务端页面布局服务<br/>如Tailor,源自BigPipe思路<br/>服务端异步获取各片段→流式组合输出<br/>把'服务端生成'与'浏览器渲染'两阶段并行重叠"]
  Q --> C["方案三:微前端框架挂载<br/>如Single-SPA<br/>路由命中→触发load/bootstrap/mount<br/>路由离开→触发unmount<br/>子应用间用事件总线跨技术栈通信"]

参考来源

- 位置:第20章《微前端架构理念与技术实践》"20.5 微前端的实施方案与实践","20.5.1 Tailor实践","20.5.2 Single-SPA实践"(源文件:_epub-src/OEBPS/Text/chapter5-1-5.xhtml、chapter5-1-5-1.xhtml、chapter5-1-5-2.xhtml) - 结论依据:原文说明微前端实践方案"大致分为三大类":基于iframe实现、基于页面布局服务实现("由服务端根据路由动态渲染页面片段,支持片段的并发渲染以提升效率,同时具备一定的容错能力")、基于微前端框架实现("当URL命中微前端应用的路由时激活并挂载,反之……则将其卸载移除"),并说明Tailor"其核心思想与微服务完全一致,就是实现巨型单体应用的拆分"、其流式拼接思路借鉴自Facebook的BigPipe,直接支撑本卡片结论。 - 原始内容:微前端作为一种架构模式,具体的技术实现思路存在多种……常见的实践方案大致分为三大类:1.基于iframe实现……2.基于页面布局服务实现……3.基于微前端框架实现,结合微前端框架,构建包裹器应用。该应用首先实现微前端应用的注册,当URL命中微前端应用的路由时激活并挂载,反之若页面中微前端应用不处于激活状态时,则将其卸载移除。