常见微前端方案

2023-05-11  本文已影响0人  StoneHui

转载请注明出处,点击此处 查看更多精彩内容。

iframe

iframe 是 HTML 的内联框架元素,表示嵌套的 Browsing Context,它能够将另一个 HTML 页面嵌入到当前页面中,每个嵌入的 Browsing Context 都有自己的会话历史记录和 DOM 树。

每个浏览上下文都拥有完整的文档环境,因此页面上每个 iframe 都需要增加内存和其它计算资源,虽然理论上来说能够在代码中写出来无限多的 iframe,但是这么做可能会导致某些性能问题。

优点

缺点

路由转发

路由分发式微前端,即通过路由将不同的业务分发到不同的独立前端应用上。最常用的方案是通过 HTTP 服务的反向代理(如 Nginx)将不同页面的请求分发到不同的服务上。

优点

缺点

动态加载模块

创建一个基座应用,允许子应用单独部署。为了实现这一点,创建一个 manifest 文件,记录上线的子应用及版本信息,当子应用部署更新时修改 manifest 文件,基座应用通过 manifest 检查更新子应用资源。

改变每个子应用加载的 JavaScript 文件有很多的方法:

npm

每个子应用在一个单独的代码仓库中,每次更新时发布一个新版本到 npm,创建一个基座应用,通过 npm 安装每个子应用。

优点

缺点

Web Component

Web Component 是一套不同的技术,允许你创建可重用的定制元素(它们的功能封装在你的代码之外)并且在你的 Web 应用中使用它们。

Web Components 由三项主要技术组成,它们可以一起使用来创建封装功能的定制元素,可以在你喜欢的任何地方重用,不必担心代码冲突。

基于 Web ComponentShadow Dom 能力,我们也可以实现微前端,将多个子应用聚合起来。

const shadow = document.querySelector('#hostElement').attachShadow({mode: 'open'});
// url 为应用的地址,基于 fetch,我们可以获取到应用的 html 模板,添加到指定节点下
fetch(url).then(res => {
    shadow.innerHTML = res
});

优点

缺点

EMP

EMP 基于 Webpack5 的 Module Federation 实现,用一个词概括,就是“去中心化”,在 EMP 的方案中不需要中心化的基座,每一个微前端应用都可以通过远程调用的方式引入共享模块。

优点

缺点

single-spa / qiankun

single-spa 是一个目前主流的微前端技术方案。

single-spa 从现代框架组件生命周期中获得灵感,将生命周期应用于整个应用程序,其主要实现思路:

single-spa 未解决子应用加载、应用隔离、子应用通信等问题。

qiankun 微前端架构则进一步对 single-spa 方案进行完善,主要的完善点:

优点

缺点

无界(wujie)

无界利用 iframe 的沙箱机制,将子应用的 JavaScript 注入到基座应用同域的 iframe 中运行,并采用 Web Component 实现页面的样式隔离。

优点

缺点

micro-app

micro-app 借鉴了 Web Component 的思想,通过 Custom Element 结合自定义的 Shadow Dom,将微前端封装成一个类 Web Component 组件,从而实现微前端的组件化渲染。并且由于自定义 Shadow Dom 的隔离特性,micro-app 不需要像 single-spaqiankun 一样要求子应用修改渲染逻辑并暴露出方法,也不需要修改 Webpack 配置,在基座应用中嵌入一行代码即可渲染一个微前端应用,是目前市面上接入微前端成本最低的方案。

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读