「技术分享」你知道微前端吗?(微前端的好处和缺陷)
ccwgpt 2024-09-20 13:14 28 浏览 0 评论
阅读原文:【技术分享】你知道微前端吗?
点击关注“八戒技术团队”,阅读更多技术干货
微前端具备哪些价值
1.前端技术栈无关主框架不限制接入应用的技术栈,子应用具备完全自主权;
2.独立开发、独立部署 子应用仓库独立,前后端应用独立开发,部署完成后主框架自动完成同步更新;
3.独立运行时 每个子应用之间状态隔离,运行时状态不共享;
微前端架构方案主要解决前端应用在开发部署过程中,随着时间的拉长,前端参与团队成员的增加和变动,导致前端应用从普通应用演变成一个巨石应用,随之而来的是前端应用的开发维护成本剧烈增加和逐渐的不可维护性。其次,前端技术栈的变动,导致在新的项目中想使用老的业务逻辑,唯一的方案是重写业务逻辑,这再次增加前端的开发成本,同时也增加了前端开发人员的学习成本,开发难度增加等问题。
中后台应用解决方案
中后台应用由于其应用生命周期长的特点,最后演变成一个巨石应用的概率往往高于其他类型的 web 应用。而从技术实现角度,微前端架构解决方案大概分为两类场景:
- 单实例:即同一时刻,只有一个子应用被展示,子应用具备一个完整的应用生命周期。通常基于 url 的变化来做子应用的切换。
- 多实例:同一时刻可展示多个子应用。通常使用 Web Components 方案来做子应用封装,子应用更像是一个业务组件而不是应用。
还有比较常见的解决方案如iframe嵌入式页面等,这种应用的缺点是全局化的时间和样式问题,如全局弹窗在嵌入页面中无法使用等问题。
微前端常见框架
目前微前端实现方案中比较主流的有以下框架:
Web Components
Web Components 是一套不同的技术,允许您创建可重用的定制元素(它们的功能封装在您的代码之外)并且在您的web应用中使用它们。
简单来说,就是就是自定义html元素标签,在项目中引入自定义的元素标签即可实现封装好的功能。同时,Web Component 允许内部代码隐藏起来,这叫做 Shadow DOM,即这部分 DOM 默认与外部 DOM 隔离,内部任何代码都无法影响外部。
iframe
iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。
iframe作为一种古老的页面嵌入方案,可以简单且快速的解决多项目中页面嵌入问题,提供了浏览器原生的隔离方案,无论是样式还是js隔离这些问题都能被完美解决。这是它的优点,也是最大的缺点,这导致应用内上下文不能共享,嵌入的页面与宿主页面之间无法通讯,导致应用的体验问题。同时还有页面url变化导致嵌入页面的状态丢失,全局DOM不共享,导致弹窗位置无法自动居中处理等问题。
Single-spa
Single-spa 是一个将多个单页面应用聚合为一个整体应用的 JavaScript 微前端框架。在single-spa中,微前端是浏览器内的javascript模块。
Singe-spa的工作方式:
Singe-spa可以实现通过对路由的匹配,在不同路由时渲染不同的web应用,同时利用沙箱机制实现样式的重用。
qiankun
qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。
特点:
- 基于single-spa封装,简化接入流程,做到了开箱即用。
- 技术栈无关
- HTML Entry接入方式
- 样式隔离
- js沙箱
- 资源预加载
qiankun在single-spa的基础上,增加了js沙箱和样式隔离,同时简化了single-spa的配置流程,做到了简单,易用的特性。
ModulFederation(模块联邦)
ModulFederation是webpack5推出的一项新功能,官方定义如下:多个独立的构建可以形成一个应用程序。这些独立的构建不会相互依赖,因此可以单独开发和部署它们。这通常被称为微前端,但并不仅限于此。通俗来说,ModulFederation提供了能在当前应用中远程加载其他服务器上应用的能力。对此,可以引出下面两个概念:
- host:引用了其他应用的应用
- remote:被其他应用所使用的应用
鉴于ModulFederation的能力,我们可以完全实现一个去中心化的应用部署群:每个应用单独部署在各自的服务器,每个应用都可以引用其他应用,也能被其他应用所引用,即每个应用可以充当host的角色,亦可以作为remote出现,无中心应用的概念。
通过ModulFederation可以将多个应用都用到的通用组件单独部署,在runtime时将模块引入到其他项目中,这样组件代码就不会编译到项目中,同时亦能满足多个项目同时使用的需求。
猪八戒前端项目改造实践
主应用使用utopia+nuxt-ssr,子应用使用纯vue项目
1. 在nuxt.config.js中映入微前端组件
2. Micros.js代码如下
import { registerMicroApps, start } from 'qiankun'
const apps = [
{
name: 'vueApp',
entry: '//dyf.test.zbjdev.com:10000',
container: '#vue',
activeRule: '/vue',
props: { asd: 123 }
},
// {
// name: 'reactApp',
// entry: '//localhost:20000',
// container: '#react',
// activeRule: '/react'
// },
]
registerMicroApps(apps)
start()
3. 生成子应用
对子应用入口main.js改造
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
// new Vue({
// router,
// render: h => h(App)
// }).$mount('#app')
let instance = null
function render() {
instance = new Vue({
router,
render: h => h(App)
}).$mount('#app')
}
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
if (!window.__POWERED_BY_QIANKUN__) {
render()
}
export async function bootstrap() { }
export async function mount(props) {
console.log(props);
render(props)
}
export async function unmount() {
instance.$destroy()
}
4. 最后在nuxt的layout文件下的default.vue添加挂载标签
<div id="vue"></div>即可
5. 运行结果
同时启动主应用和子应用,通过访问/vue路由即可看见加载了子应用的项目。
总结
微前端的本质在于资源的隔离与共享,这里的颗粒度既可以是应用,也可以是模块,或者是自己定义的抽象层,这些都是为了更好的“高内聚,低耦合”。微前端可以降低项目的复杂程度和降低耗费在部署和发布项目上的时间成本,但并不能解决所有的业务问题。使用微前端框架在目前的猪八戒前端项目完全可以取代seajs的项目加载方式,如果想在更多的业务分层中使用,实现微前端项目的特性,独立运行、独立部署,还需要对前端项目进一步改造。
希望以上内容能对有需要的人有所帮助
欢迎大家留言写下自己希望了解的技术方向
欢迎大家一起探讨交流
相关推荐
- 团队管理“布阵术”:3招让你的团队战斗力爆表!
-
为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...
- 知情人士回应字节大模型团队架构调整
-
【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...
- 豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍
-
强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...
- 创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)
-
创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...
- 消息称吴永辉入职后引发字节大模型团队架构大调整
-
2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...
- 31页组织效能提升模型,经营管理团队搭建框架与权责定位
-
分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...
- 异形柱结构(异形柱结构技术规程)
-
下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...
- 职场干货:金字塔原理(金字塔原理实战篇)
-
金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...
- 底部剪力法(底部剪力法的基本原理)
-
某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...
- 结构等效重力荷载代表值(等效重力荷载系数)
-
某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...
- 体系结构已成昭告后世善莫大焉(体系构架是什么意思)
-
实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...
- 框架柱抗震构造要求(框架柱抗震设计)
-
某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...
- 梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)
-
某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...
- 死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?
-
活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...
- 不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么
-
最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- scrapy框架 (52)
- beego框架 (42)
- java框架spring (43)
- grpc框架 (55)
- 前端框架bootstrap (42)
- orm框架有哪些 (43)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)