使用icestrak微前端框架渐进式融合9个应用,架构思路,技术方案分享个人的微前端体系实践后的心得总结,2022年

本文不涉及具体的实现,是对过去工作的总结,只讲大体实现思路,适用于任何中台大型项目,实际项目中也涉及到移动端部分,但本文没有提及。

下面是我自己梳理的一些微前端理念需要理解的一些基本概念,多用图片表示

通过proxy创建window快照记录与恢复

1.我为什么将菜单和子容器加载的逻辑抽离出主容器基座?

项目需要管理多个子应用、MPA页面和低码开发的单个页面,同时菜单更新频繁。因此,为了避免频繁打包主容器基座来更新菜单,我需要将菜单和子应用配置抽离出基座,通过接口拉取菜单配置和子应用配置。随着菜单的膨胀,需要配置字段的增多,大JSON已经很难配置和维护了,因此我将菜单和子应用配置可视化,可视化后,产品和后端同学用起来相对得心应手。

菜单结构的设计因团队或公司而异。我的主要思路是将菜单的结构设计为menu,而将子应用的资源配置放到每个menuItem中。通过循环菜单,可以生成框架所需的appConfig资源和入口路径。在icestrak中,将路由全部设置为绝对路径,并且相同的子应用会自动匹配资源。这样的设计可以更加灵活地配置菜单和子应用,同时也方便了框架的使用和维护。

菜单字段设计依据下面3方面:

上面已经初步搭建完成的微前端体系,但当你跑起一个子应用demo的时候,会发现比自己开发spa应用要慢,这里就要说说微前端应用的渲染体系。

当前的渲染顺序

从上图可以看出,子应用资源的加载时机相比于spa应用延后的特别多,渲染就会比传统spa应用慢很多,下面是我的两个优化思路

在全局大图中,有一个pre-effect的脚本,第三部分就是上面问题的优化思路,前置子应用资源的加载时机,,在加载主容器资源之前就通过逻辑匹配确定子应用的资源,用浏览器的预请求和资源并发机制,提前把首次进入的子应用资源加载好(依据子应用的资源大小提高首屏LCP200ms~400ms不等)

随着接入的子应用越来越多,菜单膨胀到几千行,此时通过接口拉取菜单JSON配置后,再去生成对应的菜单和appConfig耗时可能超过400ms,微前端应用会出现渲染子应用卡白屏的瞬间,为此,和负责开发网关同学沟通,在生成vm模版时,直接注入到window上全局菜单,引入菜单版本概念,菜单解析完成生成的headermenu和sildermenu和appConfig保存到本地indexDb里,window注入的菜单版本和本地不同,运算一遍菜单生成逻辑,更新indexDB里。

当子应用的资源加载后,初始化子应用项目时,可能会有一些需要通过拉取接口数据后才能初始化完成的子spa应用(比如某些页面需要用户的鉴权状态,某些页面加载前可能需要拉取一些关键接口才能渲染等情况),这个初始化的过程会阻塞子应用的渲染,提取这部分初始化接口逻辑到主容器中,并发的调取首次进入的子应用初始化的所需接口,通过webWorker处理,挂载到对应字应用的全局chidlrenConfig上。(优化结果提高200ms到300ms不等)

9个项目历史跨度巨大,所有融合子项目都要做request改造,子应用处于微应用模式下,子应用统一调用公共请求,封装统一错误处理(统一公共组件ui抛出),增加频繁更新接口缓存机制,设计单项目连续错误上报机制。

抽离出来的逻辑和接口,根据子应用初始化逻辑复杂度不等,充分利用浏览器并发机制和通过webWorkder计算不占据主容器渲染线程,,首屏LCP提升100ms~400ms。

....

主容器里的i18n标是全局唯一i18n标,子应用的i18n标记跟随主容器刷新,并且负责判定子容器加载zh/en的language语言包,子应用组件国际化跟随容器标记重置。(子应用使用的i18n各不相同,根据全局I18n标识各自强制刷当前页面才可重置成功),这里是否有别的方案,国际化切换时候体感并不是很好,切换国际化后每个子应用都要强制刷新一遍页面,除了使用相同i18nde框架还有别的办法吗?

使用@ice/stark-data设计全局通信体系,初始化一些全局公共接口数据到iceStore里。

中台管理系统右侧slot一般有消息通知模块,用户信息模块,全局功能搜索模块和帮助中心模块。当前主容器基座的设计如果只用在自己的项目中,付出这么多心血其实不值得,如果可以把当前容器设计成企业统一的微前端容器来使用,右侧功能栏的插槽化设计就是最优方案。

这一块实现比较多,需要有动态配置包的能力。总体思路是将右侧slot抽离成plugin,封装成可插入的plugin插件,vm初始化时候注入相应的脚本路径和脚本名称,子应用加载后执行插槽的渲染。

在微前端体系改造中,子应用的改造是工作量最大和最复杂的部分。这是因为一些旧的构建工具已经过时,无法满足改造的需求,一些依赖的包也是基于Node8开发的,无法升级到最新版本,这给升级工作带来了很大的困难。因此,升级的过程变得费时费力。需要采取措施来解决这些问题,如引入新的构建工具、逐步更新依赖的包等,以确保子应用能够顺利地进行工程化改造。同时,需要认识到这是一个长期的过程,需要耐心和不断地优化和迭代。

总体思路:保留原本老站点,使用一套代码,增加umd打包格式。工程改造为微前端启动和原有端形式启动,线上资源部署会分为spa打包模式和微前端打包模式,分别独有资源版本号。

子应用改造如何融入微前端体系没有标准的方案,很多策略依据自己的项目情况而定。

简单列举一些子应用改造中的难点

{"build:mfa":"REACT_APP_ENV=mfawepbackbuild","build":"wepbackbuild","start:mfa":"REACT_APP_ENV=mfawepbackstart","start:mfa":"wepbackstart",}线上构建拿取环境信息中的version注入到编译环境中,确定完整cdn路径commandecho$BUILD_ARGV_STR|sed\"s/.*--version=\\(\\S\\+\\).*/\\1/g\"spa子应用性能优化大致说一些优化思路和方向

微前端体系让mpa应用重新占据优势,新页面都通过mpa应用打包生成单页面引入微前端体系。

THE END
1.8个用于绘制软件架构图的画图工具系统架构图用什么画软件架构工具可分为三类:建模工具、代码图表和画图工具。 画图工具最适合在交谈和实验想法时进行快速草图。 通过绘制软件架构图的方式,可以更有效地传达系统的复杂性,带来许多优势。清晰的系统设计可以帮助工程团队更好地理解架构,来规划未来的开发,同时也能够识别潜在的问题。 https://blog.csdn.net/u013643074/article/details/134054864
2.用什么工具画软件架构图最方便?5款高效软件推荐!可视化系统设计: 软件架构图将抽象的系统设计转化为可视化的形式,使人们更容易理解系统的复杂性和结构。风险管理: 通过分析架构图,可以更早地发现潜在的问题和风险,从而采取预防措施。指导开发: 架构图可以作为开发的指导,让开发者更清楚自己的工作内容以及与其他模块的关系。系统演化: 架构图为系统的演化提供了https://baijiahao.baidu.com/s?id=1777299687464926450&wfr=spider&for=pc
3.画图工具架构图画图工具介绍kcoufee的技术博客最近经常有小伙伴问文章中的图是用什么软件画的,下面就来梳理一下常用的画图工具: 常规画图: Excalidraw、draw.io、语雀 思维导图: Xmind 代码截图: Carbon 画图模板: ProcessOn Excalidraw Excalidraw 是一款轻量、开源的手绘风格电子白板和画图应用,可以快速画出漂亮的流程图、UML图甚至是图表。 https://blog.51cto.com/u_12995/9445265
4.系统功能模块图用什么软件画:探索最佳工具和技术本文旨在探讨用于绘制系统功能模块图的最佳软件工具。功能模块图是系统设计的关键部分,它帮助设计师和开发者可视化软件的结构和功能。文章将介绍几种流行的绘图软件,包括它们的特点、优势以及如何使用它们来创建清晰、有效的功能模块图。本文适合软件开发者、系统架构师以及对系统设计感兴趣的专业人士。 https://www.yingxiongyun.com/news/post/13919.html
5.住建部公布自主创新装配式建筑数字化设计软件经验做法BIM设计工具子平台包含了智能设计工具、管理工具和效率工具三大类、共计十二个子类的工具;交付子平台主要用于交付成果的质量和指标审查,比如规划报建的审查,施工图审查等;BIM资源子平台则覆盖了构件、模版、标准、做法四大种类资源库。 设计项目管理子系统能保证设计项目全流程高效有序实施,其中,合同管理模块连接了业务与http://www.ccpa.com.cn/site/content/8962.html
6.架构图用什么软件制作?这9款建议收藏!在当今数字化时代,架构图成为了理解、设计和沟通复杂系统架构的重要工具。无论是软件开发、网络设计、还是项目规划,都离不开清晰、准确的架构图来指导和支持。然而,选择合适的软件来制作架构图却是一项挑战。在市场上有许多不同类型的软件可供选择,它们各自拥有特定的功能和优势。因此,为了帮助读者更好地选择,本文将https://boardmix.cn/article/9-architecture-diagram-tools/
7.低功耗蓝牙工具APP开发实战获得LightBLE 思维导图、原型图、设计原稿 获得一套完整的、可运行的LightBLE代码 适合人群 想快速掌握BLE的小伙伴 需要开发BLE的程序员 想要获得快速BLE调试框架的爱好者 工具与语言 需求规整:XMind 原型设计:Mockplus UI设计:Sketch 硬件:智能手机(安卓4.3以上 或 iOS6.0以上) https://www.jianshu.com/p/3a8b80005261
8.2021届计算机科学方向毕业设计(论文)阶段性汇报我经过对工具链的对比与评估,确定了最终开发会以Vitis HLS工具为主,运用高层次综合设计方法加快开发进度。当前硬件实现已经完成了计算模块的开发,实现了用于加速稠密矩阵乘法的矩阵计算单元以及用于支持图计算操作的通用向量处理单元。现在正在开发的是用于指令解码以及调度各个模块的全局控制单元和用于加速支持图计算操作的https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3943
9.一篇文章入门“求解器”开发(全篇)工业软件开发求解器开发二是解耦前处理器和求解器,方便测试,调试,集成和模块化; 三是可以方便与第三方工具交互(数值优化工具,CAD设计工具)。 这种结构从四五十年前软件设计之初一直沿用到现在,没有特殊原因无需改动。比如OpenFOAM中,每一种求解器都可以编译成单独的可以执行程序。 https://www.jishulink.com/post/1908094
10.经验分享:打造优秀工具型网站的3个大招!优设网如今工具型网站越来越多(58同城、云盘、产品首页等),在不断打磨细节的过程里,有童鞋总结了工具型网站的设计目标和3种设计框架,全篇的思路非常值得学习,同学们除了学习专业知识,也可以看看作者解决问题的逻辑,对职业发展会有帮助。 什么是工具型网站 我们先从wikipedia上了解三组概念: https://www.uisdc.com/tool-based-website-design/
11.产品经理认证知识体系指南第二版学习笔记良好的市场调研既为客户需求又为产品价值主张奠定了基础,也有助于定义清晰的概念说明和产品设计规格。在整个产品创新流程中,应持续开展市场调研,从而确保产品设计始终与价值主张保持一致。 产品组合分析。BCG的分类方式,包括: 产品路线图。公司内外的沟通工具,产品创新匹配公司经营的规划。需要持续制定。https://idarc.cn/index.php/archives/3707/
12.erp系统框架有哪些零代码企业数字化知识站企业资源规划(ERP)系统是帮助企业整合和管理其业务流程的重要工具。ERP系统的框架通常包括多个关键组件,旨在提高企业效率,优化资源配置。以下是一些主要的ERP系统框架组件: 模块化设计:现代ERP系统通常采用模块化设计,各个模块可以独立运行,也可以相互集成。常见的模块包括财务管理、供应链管理、生产管理、销售和客户关系管理https://www.jiandaoyun.com/blog/article/985848/
13.基于深度学习的实时识别硬件系统框架设计AET由于整个CNN网络模型中的每个计算模块是互不相关且独立的,充分体现出了其结构能够进行并行运算的特性,尤其是在进行卷积运算时,而FPGA本身的硬件电路结构,也使其具有进行并行运算的特点。因此在整体系统框架设计中均采用了并行化的实现方法,框架设计中为每个卷积层的卷积核进行了卷积核组的设定,根据特征图输入和运算后特http://www.chinaaet.com/article/3000091553
14.案例审计智能升级:基于RPAOCRChatbot实现员工报销内审自动在完成业务流程图及事务的定义后,团队则基于开发框架进行流程框架图的设计,并进行反复验证,从而保证此核心环节的准确。 4. 功能模块的设计及实现 按照模块化的开发思路,团队可根据内审所涉及的操作设计多种功能模块。根据开发人员的偏好,使用 Java, C#, Python等工具,再结合RPA工具提供的各种组件均可完成功能模块的实https://maimai.cn/article/detail?fid=1606465229&efid=qXWo2bC07C6z14AkbFOy1w
15.中小学幼儿园教师培训课程指导标准(化学)4.知道初中化学各主题的关键评价要点,能基于双向细目进行评价设计,能从知识技能、思路方法、认识发展水平(即能力素养发展水平)等维度设计评价工具,能从知识技能、思路方法、认识发展水平等维度对评价结果进行分析,提升评价的设计、实施能力。 一、学科整体理解 http://www.cqtn.gov.cn/bm/qjw/zwgk_25192/zfxxgkml_bm/jczwgk/ywjyly/jsgl/jszyfz/202111/t20211128_10042966.html
16.浩辰3D「结构框架」设计,不用插件轻松搞定!浩辰3D在日常生活中,我们经常能看到各种结构框架设计,大到厂房钢结构、高压线路输电塔,小到操作台、自动化设备机台、空调外机安装架等。那么,在由浩辰CAD公司研发的浩辰3D软件中如何实现结构框呢?浩辰3D软件提供了专业的【框架】模块,点击菜单栏—【工具】—【框架】即可调出。下面小编将以3D钢结构工作台创意建模来展示浩https://www.gstarcad.com/support/1441/
17.从域名到运营:开办独立网站全流程十五、工具和资料 〇、前期工作 开设独立网站的前期工作主要包括需求调查与项目规划,如果是由第三方信息化服务承接,一般包括使用问卷或现场访谈开展客户调查,明确项目背景、目标,以及核心需求,并交付项目规划和设计文档。 需求调查与项目规划有利了掌握项目目标,以及如何实现目标。 http://www.thailycare.com/blog/network/762.html
18.什么是Cortex,怎样驱动着智能合约和区块链的功能Cortex 模型表示工具被设计为 ? 表征:将字符串映射为主流神经网络模型、概率图模型所支持的最细粒度的指令集 ? 组织:将指令集映射为主流神经网络框架的代码 ? 迁移:提供同构检测工具,使得不同机器学习/神经网络框架中相同模型可以互相迁移 4.存储层 https://m.elecfans.com/article/732683.html